2012-06-27 109 views
27

我想學習linux內核設備驅動程序設計。所以任何人都可以在這裏發佈好的教程頁面或鏈接。我是Linux內核環境的新手。我已經搜索過它,但我不知道如何開始以及爲了便於理解基礎而閱讀哪一本。提前致謝。Linux內核設備驅動程序設計

+0

這也有助於有點http://linuxseekernel.blogspot.ie/2015/08/linux-kernel-module-programming.html – Jeyaram

+0

最小的自動QEMU + Buildroot裏面+ BusyBox的內核模塊設置:https://開頭github.com/cirosantilli/linux-kernel-module-cheat –

回答

40

取決於你目前的技能。如果你是真的新的Linux,也許你應該開始與用戶空間系統編程Advanced Linux Programming。您將獲得有關Unix系統調用和其他概念(如信號,進程/線程等)的豐富知識。如果您在內核方面開發,這是必須的(理解用戶空間API),因爲內核的角色以安全的方式向用戶提供服務。

否則一個經常引用的書是Linux Device Drivers, Third Edition(LDD3)。請記住,這個版本是在Linux 2.6.10版本的時候編寫的,從那時起一些事情發生了變化。 This article顯示了差異2.6進化(直到2.6.31,也就是說,非常有用)。我應該提到martinezjavier/ldd3,其中包含LDD3的更新驅動程序,用於更新的內核(感謝42n4指出了這一點)。

另一個不常被引用的有趣的書是Essential Linux Device Drivers。你不會找到這個免費版本,但它仍然有一個有趣的方法。我喜歡這個,它涵蓋了很多不同的設備類型,並且是最新的2.6.24,這比LDD好一點。

最後,關於內核本身的一本書(不是專門針對驅動程序)是Understanding the Linux Kernel, 3rd Edition。這涵蓋了深入的內核設施和內部機制。這是截至2.6.11的最新版本。

至於在線教程,我發現this post on Pete's Blog是一個非常好的例子。它不僅展示瞭如何創建一個字符設備(最簡單的內核驅動型,即你應該啓動一個),它採用現代的Linux內核功能在一個易於理解的方式,包括:

  • 使用的udev
  • 使用內核數據結構(FIFO)
  • 使用內核的同步(互斥)
  • 使用SYSFS與自定義屬性
  • insmod
模塊選項的

另外:它的目標是Linux 3.0,這意味着它比其他資源更新。

您可能還喜歡this post關於如何手動創建Sysfs條目,但如果不需要額外的節點或屬性,Linux設備模型將負責將設備註冊爲Sysfs條目。

編輯:我應該補充說,學習真正的Linux設備驅動程序編程的最好方法是看實際的驅動程序。在drivers有成千上萬的司機。開始閱讀和理解簡單的概念,如drivers/leds,你會看到這是多麼有價值。學習設備驅動程序編程

1

您可能感興趣的新發布的Linux Driver Templates。顧名思義,它提供了模板並演示了經常使用的Linux設備,以便快速入門。

+0

嘿,你能解釋如何通過LDT? – const

1

我明白這是一個延遲的迴應!

你可以選擇任何一本書,這些都是上面建議的很棒的書。

但是你需要切實地工作。嘗試儘可能多地參與到Kernel中。

大多數情況下,您需要查看內核源代碼本身。

最有趣的文檔可以在Kernel樹下的Documentation文件夾中找到。

0

專業Linux內核架構是一個很好的閱讀。

8
+0

+1,但要記住這類舊問題 - 根據現代堆棧溢出指南 - 脫離主題,因爲它被認爲太寬泛。 – halfer

0

最好的來源是linux手冊頁,但它們對於初學者來說有點重要,直接編程設備驅動程序並不是一件容易的事。我建議你通過以下書籍經過指針和結構

基本的C書籍1.編程C本 - 拜倫戈特弗裏德2. C程序設計語言 - 丹尼斯里奇

中級書籍1.指針基於C肯尼斯臭佬2。專家C編程深層祕訣 - 林登

來到設備驅動程序我已經上傳了pdf格式的內核源文檔https://drive.google.com/folderview?id=0B7iRyndFhHldR3hjOHpOZTdKTjA&usp=sharing您可以從此鏈接下載。

設備驅動程序基礎(用戶模式編程)

的Linux編程接口 - 邁克爾·凱里斯克 開始Linux程序Wrox的出版商 設備驅動程序(內核Deleopment)1. Linux內核開發 - 羅伯特·愛2. Linux內核的內部 - 米貝克

設備驅動程序(驅動程序)1. Linux設備驅動程序 - 第三版(免費下載適用於2.6內核)2.基本Linux設備驅動程序 - Venkateswaran

對象基本駕駛者知識FOL低此網站http://www.tldp.org/LDP/khg/HyperNews/get/devices/devices.html

我的經驗首先,我們必須在進行驅動程序編程之前獲得關於C編程的完整知識,主要是結構和指針,否則理解驅動程序編程會有點麻煩。

正在添加到啓動: - 使用gcc命令使用不同的對象的工具,在linux Basic編程,線程對象文件的分析(鎖

  1. 用戶空間編程的gcc生成的 基礎proprocessed,彙編和對象文件,同步技術),信號,進程(fork,exec),定時器(Posix)。這將有助於您理解內核概念。

  2. 內核編程 瞭解內核源碼樹,不同的分支及其重要性,使用ctags和cscope瀏覽內核源代碼,這將有助於您在內核源代碼瀏覽。

  3. 驅動編程 首先了解不同驅動程序類,焦炭,塊等, 接着學習設備協議,發送和接收,所述產品手冊是用於通過這個去的最佳來源。 然後開始編寫簡單的字符驅動程序,例如RTC(端口映射設備),IOAPIC(內存映射設備),然後轉到USB,PCI,網絡,I2C,SPI等,如果您需要幫助,可以找到內核源碼樹中的所有這些框架代碼。

相關問題