嵌入式Linux驅動模板精講與項目實踐
初步看起來Linux設備驅動開發涉及內容很多,而需要實現驅動的設備千差萬別,其實做一段時間驅動之後回首看來主要就是以下幾點:
(1)對驅動進行分類,先歸納為哪個類型的驅動,歸類正確再利用內核提供的子系統進行開發,往往會發現其實很多通用的事情內核已經幫我們做了,一個優秀的驅動工程師應該最大程度上利用內核的資源。內核已經實現的畢竟穩定性強,可移植性高。
(2)找到內核的提供的子系統,接下來就是要製作該子系統對該類設備提供的表徵,也就是描述該類驅動的結構體,然後定義這個結構體把必要的數據進行初始化,最後調用該內核子系統提供的接口函數提交給內核管理。這是大部分驅動程序開發的戰略流程。
(3)明確子系統已經做了什麼,需要在自己驅動中實現哪些內容,通常做法是找一個接近的驅動程序進行修改,而不是一行一行代碼進行編寫。到內核中找接近的驅動例程是一個很好很快的方法。這些例程基本上提供接口如何使用,調用流程等等。
(4)以上基本上都是與內核接口有關,驅動第二個涉及到的就是芯片手冊,這個與做其他嵌入式軟件一致,故從單片機軟件開發或者其他操作系統軟件開發轉過來做Linux驅動開發的人員來說,這部分是一個強項。
(5)驅動另外一個內容就是協議,各種嵌入式總線協議從簡單的SPI到複雜的PCI或者USB等等。協議基本知識是需要掌握的,好在內核對各種常見協議都是以子系統的形式提供,在子系統中做了大部分共性的工作,大大降低了驅動開發的工作量。
故學好驅動開發,一個重要的方面就是對內核的學習,熟悉內核的組織和思維方式,所以對其思想做個總結是非常有必要的。