我想學習linux內核設備驅動程序設計。所以任何人都可以在這裏發佈好的教程頁面或鏈接。我是Linux內核環境的新手。我已經搜索過它,但我不知道如何開始以及爲了便於理解基礎而閱讀哪一本。提前致謝。Linux內核設備驅動程序設計
回答
取決於你目前的技能。如果你是真的新的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
,你會看到這是多麼有價值。學習設備驅動程序編程
最好的書是
"LDD"
我明白這是一個延遲的迴應!
你可以選擇任何一本書,這些都是上面建議的很棒的書。
但是你需要切實地工作。嘗試儘可能多地參與到Kernel中。
大多數情況下,您需要查看內核源代碼本身。
最有趣的文檔可以在Kernel樹下的Documentation文件夾中找到。
專業Linux內核架構是一個很好的閱讀。
具有非常重要的鏈接網站: http://elinux.org/Device_drivers
偉大的教程與現實的例子(與我們自己的文件系統格式化的usbpen結束 - 搜索發件人進一步篇):
- http://www.linuxforu.com/tag/linux-device-drivers-series/
- http://sysplay.in/index.php?pagefile=lfy_articles
着名的LDD3源代碼書移植到最新的內核: https://github.com/martinezjavier/ldd3/
視頻:
也許其它cources:
- http://www.skilledup.com/courses?keyword=linux+kernel&price_filter=0..0
- http://www.staerk.de/thorsten/index.php/My_Tutorials/Writing_Linux_kernel_modules
- http://www.freesoftwaremagazine.com/articles/drivers_linux
- http://techblog.aasisvinayak.com/kernel-module-programming-tutorial/
- http://www.linuxforu.com/2009/05/a-voyage-to-the-kernel-day-11/
的一些例子:
圖書(沒有在這個線程LDD3提到):
KernelHacking: http://kernelnewbies.org/KernelHacking
視覺Linux內核的地圖:http://www.makelinux.net/kernel_map/
Linux和內核的書籍,適合初學者:
+1,但要記住這類舊問題 - 根據現代堆棧溢出指南 - 脫離主題,因爲它被認爲太寬泛。 – halfer
最好的來源是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編程,線程對象文件的分析(鎖
用戶空間編程的gcc生成的 基礎proprocessed,彙編和對象文件,同步技術),信號,進程(fork,exec),定時器(Posix)。這將有助於您理解內核概念。
內核編程 瞭解內核源碼樹,不同的分支及其重要性,使用ctags和cscope瀏覽內核源代碼,這將有助於您在內核源代碼瀏覽。
驅動編程 首先了解不同驅動程序類,焦炭,塊等, 接着學習設備協議,發送和接收,所述產品手冊是用於通過這個去的最佳來源。 然後開始編寫簡單的字符驅動程序,例如RTC(端口映射設備),IOAPIC(內存映射設備),然後轉到USB,PCI,網絡,I2C,SPI等,如果您需要幫助,可以找到內核源碼樹中的所有這些框架代碼。
- 1. Linux設備驅動程序
- 2. Linux內核設備驅動程序中的filp_open
- 3. 如何在Linux內核設備驅動程序中使用計時器?
- 4. Linux i2c-設備驅動程序module_i2c_driver()
- 5. IOCTL Linux設備驅動程序
- 6. Linux網絡設備驅動程序
- 7. 設備驅動程序在linux中
- 8. 平臺設備/驅動程序vs i2c設備/驅動程序
- 9. 將虛擬PCI設備與linux設備驅動程序接口
- 10. 創建設備文件:Linux設備驅動程序
- 11. Linux設備驅動程序字符設備「子目錄」
- 12. 內核或設備驅動程序編程
- 13. Linux內核設備驅動程序將DMA從設備傳輸到用戶空間內存
- 14. Linux內核中的USB設備和HDD設備的驅動器號
- 15. Linux內核驅動程序不同總線上的相同設備?
- 16. Linux內核設備驅動程序中的分散收集列表
- 17. Linux內核API從平臺驅動程序獲取結構設備
- 18. 在linux內核驅動程序中添加屬性到平臺設備
- 19. Linux設備驅動程序:從內核複製字符串到用戶空間
- 20. 實現PCIe Linux設備驅動程序(希望從內核驅動程序訪問我的卡寄存器)
- 21. Linux內核驅動程序模塊:使用單個驅動程序處理多個設備文件
- 22. 將設備驅動程序連接到Linux內核中的多個外部驅動程序
- 23. 添加驅動程序到Android設備內核
- 24. 內核設備驅動程序「提領‘無效*’指針
- 25. Android內核驅動程序的相機設備
- 26. 將設備驅動程序加載到內核中
- 27. 有關設備驅動程序和內核的問題
- 28. Linux設備驅動程序中的內聯函數
- 29. 如何在linux中創建內置設備驅動程序
- 30. Wince設備驅動程序
這也有助於有點http://linuxseekernel.blogspot.ie/2015/08/linux-kernel-module-programming.html – Jeyaram
最小的自動QEMU + Buildroot裏面+ BusyBox的內核模塊設置:https://開頭github.com/cirosantilli/linux-kernel-module-cheat –