顯示廣告
隱藏 ✕
看板 SuperTree
作者 dick51207 (dick51207.bbs@ptt.cc)
標題 Re: [問題] 如何學習Linux Kernel Driver
時間 2018年03月07日 Wed. PM 05:41:23


※ 本文轉寄自 dick51207.bbs@ptt.cc

看板 LinuxDev
作者 wens (文思)
標題 Re: [問題] 如何學習Linux Kernel Driver
時間 Sun May  8 10:50:56 2016


看你寫哪方面的驅動程式,不同硬體會有不同的需求。

C 語言要會是一定的。 Linux Kernel 還有用不少的 compiler extension,
這些遇到也要查一下。且裡面也有些自訂的 modifier ,像是 __init, __iomem
之類的。此外 kernel 有自己的一套函式庫,沒有 C 標準函式庫。這部分
文件也不是太齊全,或許 LDD3 會介紹。我當年看 Linux Kernel Development 2e
現在有些東西也過時了。

通常不會用到組合語言,除非你寫的是 arch 很底層的東西。

作業系統跟系統呼叫的觀念要有。你要了解你寫的驅動程式跟核心怎麼互動,
是單純透過中斷呼叫呢? 還是有 DMA? 會不會直接跟 userspace 互動? (有些限制)
多執行緒的概念也要有。驅動程式是一大堆 callback,不是一個線性執行的程序。
該放 lock 就要放 lock,順序型態要用對,如 interrupt handler 只能用 spinlock.

驅動程式會牽扯到硬體,所以對計算機組織也最好有點了解,快取的限制等等。
不過這部分常常是不同平台有自己的特性,且也不是所有硬體都會接觸到。如果
你做的是 USB, I2C, SPI 之類的外接硬體,或許一開始就不需要。反過來說你就
需要去了解這些硬體匯流排囉。

系統程式應該是不需要。

但多學還是有幫助的。

另外我自己是沒有讀過 LDD3。

※ 引述《qazkevin (阿成)》之銘言:
: 各位大大好
: 小弟目前因為工作的關係需要學會看懂Linux Driver的程式碼,
: 以前從來沒學過這方面的東西,
: 想請問如果要學習Linux Kernel Driver,對於一個初學者來說,
: 如果要按部就班是否要先學會其它方面的相關知識,
: 有先稍微Google一下,
: 好像要先學會Linux的基本操作、C語言、Linux系統程式、系統呼叫、作業系統
: 以及硬體的基本控制概念,
: 小弟我本身有學過一點Linux(在Linux環境下做一些基本的操作),
: C語言也有學過,單就語法方面應該是還可以,
: 但是對於硬體或是作業系統的觀念就很不行,
: 想請問各位我該如何學習Linux驅動程式
: 相關知識到底要懂哪些?
: 又要懂到何種程度?
: 懇求各位回答
: 感激不盡
: PS. 已經買了LDD3準備開始K了

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.76
※ 文章代碼(AID): #1NBgcJLa (LinuxDev)
※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1462675859.A.564.html
qazkevin: 感謝wens大大,我工作寫的driver是跟camera相關...1F 05/08 22:30
qazkevin: 聽起來基本知識有好多,作業系統、計算機組織、系統呼叫
wens: 沒辦法... 就是這麼複雜 @_@3F 05/08 23:12
qazkevin: 謝謝您的答覆^_^4F 05/09 00:28
liang168: 我也是做camera Driver只占其中30%其他還有網頁makefile5F 05/09 11:27
liang168: 先搞清楚make lib 和bash script 因使用linux開發都會用
will12345610: 推一個7F 08/23 20:04

--
※ 看板: SuperTree 文章推薦值: 0 目前人氣: 0 累積人氣: 11 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇