第一步,作為使用者來學習 Linux。
這其實是個蠻大的門檻,我覺得在這之中有以下兩點特別重要:
這其實是個蠻大的門檻,我覺得在這之中有以下兩點特別重要:
- Linux kernel 是什麼,它又負責做什麼事情?
- 檔案與目錄管理,包含權限的了解
這部分可以參考「鳥哥的 Linux 私房菜」網站,該站有非常豐富的資源,講解也是簡單易懂!
第二步,學習 C,並嘗試在 Linux 底下開發可以在 Linux 執行的程式。
有了 Linux 的基礎之後,接下來就是自己嘗試開發程式,這時候開發的程式屬於 User space 範疇,我建議可以在此時多多使用各種 IO 相關的 Linux C API。
這部分我推薦閱讀 K&R 的「The C Programming Language」,這本書其實不太適合程式設計新手,所以可能還要另外找一本自己看得順眼的 C 入門書輔助閱讀。其實 LDD 的開發並沒有什麼太難的 C 語法,能夠通盤理解 K&R 的 C 語言聖經本就已經是非常熟稔 C 語言了。
第三步,開發 kernel module。
有了 Linux 的基礎之後,接下來就是自己嘗試開發程式,這時候開發的程式屬於 User space 範疇,我建議可以在此時多多使用各種 IO 相關的 Linux C API。
這部分我推薦閱讀 K&R 的「The C Programming Language」,這本書其實不太適合程式設計新手,所以可能還要另外找一本自己看得順眼的 C 入門書輔助閱讀。其實 LDD 的開發並沒有什麼太難的 C 語法,能夠通盤理解 K&R 的 C 語言聖經本就已經是非常熟稔 C 語言了。
第三步,開發 kernel module。
這一步我自己走的有點亂,也還沒整理好自己的經驗,不過我推薦以下幾本好書,讀者一定能從其中得到收穫。(之後有空再來重寫這段 XD)
Linux Device Driver 3rd Edition, O'REILLY 出版
Linux 裝置驅動程式之開發詳解 第二版, 松崗出版
Linux Device Driver Programming, 博碩出版
Linux Device Driver 3rd Edition, O'REILLY 出版
Linux 裝置驅動程式之開發詳解 第二版, 松崗出版
Linux Device Driver Programming, 博碩出版
第四步,作為 kernel 開發者來學習 Linux。
之所以要走這一步的原因是因為開發 LDD 跟 kernel 息息相關,kernel 定義了許多介面要求 LDD 開發者遵守,並也提供了大量的 API 供 LDD 開發者使用。這樣有一個好處是分層可以分得很明確,User space program 跟 driver之間就沒有 dependency 的問題。另外,kernel 是由許多的 subsystem 組成,一個 LDD 不可能不跟這些 subsystem 互動,所以理解 kernel 的組成也是很重要的知識。
這部分我推薦閱讀 Robert Love 寫的「Linux kernel Development」,這本書由一種較宏觀的角度來介紹 kernel,細節沒有觸碰得太多,對於 kernel 初學者來說應該是比較好吸收的一本書。另外就是,除了實作需要之外,LDD 開發者也不太需要整個 kernel 都瞭若指掌,用到的時候再深入理解我覺得會比較符合人性,畢竟 kernel 是一隻蠻恐怖的大怪獸。
沒有留言:
張貼留言