2010-02-08 140 views
50

我想學習如何編寫設備驅動程序,因爲我認爲這很有趣。我使用Mac OS X Macbook,但我也有一臺Ubuntu機器(在Mac Min上運行)。我對C很熟悉,目前正在閱讀this book。我在網上找到了一些鏈接,例如Mac Dev Center。我這樣做是因爲它會很有趣。我認爲,由於我編寫的軟件,看到硬件運行會有真正的滿足感。我應該如何開始編寫設備驅動程序?

我想我想要的是一些提示或建議和指導,並且有人知道沒有驅動程序的設備列表,或者我可以爲已支持的某些東西寫驅動程序(更喜歡前者我實際上提供了價值)。什麼是開始使用的好設備?我咬得比我咀嚼的還多嗎?我不害怕低級別的編程或組裝,也不需要花費任何精力。我真的很想挑戰!

+1

由於您提到了* OS X *和* Linux *,這些設備驅動程序將用於哪些操作系統? – jschmier 2010-02-08 15:52:38

+0

任何一個,我想我更喜歡OS X,因爲那是我使用的筆記本電腦。 – 2010-02-08 16:03:30

+0

「沒有驅動程序的設備...」任何此類設備都不可用!設備製造商**有**創建驅動程序,否則他們不能銷售他們的產品。話雖如此,那裏有一些非常非常簡單的設備。 – jpaugh 2018-01-19 22:50:58

回答

26

對於Linux,您可能會考慮拿起O'Reilly Linux Device Drivers書或在線閱讀PDFs。在我看來,這是關於這個主題的更好的文本之一。

The Linux Kernel Module Programming Guide是另一個很好的資源。

您可能還想在Linux Kernel上專門找一本書。我拿起了Robert Love的Linux Kernel Development (2nd Edition)爲此目的(3rd Edition途中)的副本。

+0

謝謝!編寫設備驅動程序需要多少工作?它是否比編寫大型複雜應用程序更多或更少?我詢問所有回答這個問題的人,因爲我真的想要一個答案。再次感謝! – 2010-02-08 16:34:50

+1

涉及的工作難度和數量取決於設備的複雜程度。 a * tty *設備驅動程序可能比* usb *或* pci *設備驅動程序複雜得多。 – jschmier 2010-02-08 16:54:17

+4

首先寫一個內核模塊作爲驅動程序。基本的Hello World程序。並插入你的Ubuntu/Mac。查看內核日誌並瞭解發生了什麼。 然後嘗試在總線上(如PCI或USB)註冊虛擬驅動程序,然後添加更多功能,如讀取寫入和IOCTL調用。 最後可以移動到執行更復雜的電源管理掛鉤,睡眠,關機。 此外,如果在嵌入式平臺上工作,平臺驅動程序和DMA也可以是一個有趣的閱讀。 – Anirudh 2015-09-07 06:56:32

2

對於Mac,您可能需要查看Mac OS X Internals書。這是思想沉重,但有趣的閱讀。它主要是關於基於PowerPC的Mac,但附有關於基於Intel的Mac的附錄。對於Linux,請查看Linux Device Drivers, 3rd Edition - 它更輕(免費的PDF在線:)並且真的是面向設備驅動程序的,可能是更好的開始。

+0

謝謝!編寫設備驅動程序需要多少工作?它是否比編寫大型複雜應用程序更多或更少? – 2010-02-08 16:33:59

+2

嗯,在這兩種情況下,你都需要知道你在做什麼,所以你需要了解周圍的環境,這是來自經驗,你直到你嘗試纔得到:) :)通過來自LDDv3的源代碼代碼在線但對於當前的內核已經過時了,您會感受到下一步涉及的內容以及您想要了解的內容。 – 2010-02-08 16:47:03

4

如果您想要進行Linux設備驅動程序開發,可免費獲得的O'Reilly書Linux Device Drivers, Third Edition是必須閱讀的。

爲了找到您可以編寫驅動程序的不支持的硬件,請諮詢Linux mailing lists。也許有些USB 3.0設備? ;)

+0

謝謝!編寫設備驅動程序需要多少工作?它是否比編寫大型複雜應用程序更多或更少? – 2010-02-08 16:33:31

17

寫一個設備驅動程序可能非常簡單,或者它幾乎可以任意複雜。例如,我參與了一個項目,在這個項目中,我們花了將近三年的時間來解決設備驅動程序中的一個錯誤。當然,我們在尋找它時清除了其他幾十個錯誤...代碼大大改進了。該修補程序原來是一個八行補丁,保守地花費了大約一百萬美元。但是,作爲一個副項目,我在一週內從芯片數據表中編寫了一個以太網驅動程序,並花了一個星期的時間對其進行調試。自那以後就不需要碰它了。

沒有辦法說一般司機會做多少工作; GPU驅動程序可能花費數億美元,單個LED的驅動程序最多需要幾個小時工作。

+5

你能分享一些更多的細節。很想了解這個補丁以及爲什麼它很難調試。哪一類設備是驅動程序? – Anirudh 2015-09-07 06:52:14