1. 程式人生 > >Sreekrishnan Venkateswaran 大師對嵌入式學習的看法(摘抄)

Sreekrishnan Venkateswaran 大師對嵌入式學習的看法(摘抄)

《精通Linux裝置驅動程式開發》
                作者 Sreekrishnan Venkateswaran 對學習嵌入式的建議

Linux嵌入式開發流程一覽表

(1)
確定裝置的功能與介面技術。
根據這些回顧一下描述過相關裝置驅動程式子系統的章節。
正如本書所述,幾乎Linux上的每-個驅動程式子系統都包括核心層(用於提供驅動程式服務)
和抽象層(使應用程式獨立於底層硬體之外〉(見第 18章中的圖 18-3 )。
你所編寫的驅動程式需要合乎此框架,並與子系統中的其他元件進行介面。如果你的裝置是一個調變解調器,就需要學習UART 、 tty與線路規程層是如何工作的。如果待驅動的晶片是RTC或看門狗,就需要學習如何遵守相應的核心API。
如果你面對的是滑鼠,就需要弄清楚如何將其和輸入事件層聯絡在一起。如果是視訊控制器,就要理解幀緩衝子系統。在開始驅動音訊編解碼器之前,研究一下ALSA框架。

(2)
獲取裝置的資料手冊井理解其暫存器程式設計模式。例如,對於12CDVI發射機,需要弄明白裝置的從地址以及初始化過程的程式設計順序。
對於SPI觸控控制器,理解如何實現其有限狀態機。
對於PCI乙太網卡,研究其配置空間的操作。對於USB裝置,需要弄清楚其支援的端點以及如何
與其通訊。

(3)
在強大的核心原始碼樹中,搜尋可作參考的驅動程式。研究候選的驅動程式,並修改合適的驅動程式。
某些子系統提供了驅動程式框架(例如 sound戰ivers/dummy.c, drivers/usb/usbskeleton.c 、 drivers/net/pci-skeleton.c和 drivers/video/skeletonfb.c ),如果沒有找到相近的參考驅動程
序,可以用它作為模型。

(4)
如果找到了參考驅動程式,通過比較二者的資料手冊與原理圖,研究參考驅動程式對應裝置與你的硬體之間的差別。
譬如,假設你正基於一種支援參考硬體的Linux發行版為自己定製的電路板移植Linux,發行版中包括了已經在參考硬體上測試過的USB控制器驅動程式,但定製的電路板使用的USB收發器和其相同嗎?
已有LCD控制器的幀緩衝驅動程式,但你的電路板是否使用了不同的顯示面板介面(如L飛TDS) ?
也許參考板上的EEPROM使用 12c匯流排,而你的使用的是 1-wire匯流排。
乙太網控制器連線的是一個不同的PHY晶片甚或是二層交換晶片?或者為了更大的傳輸範圍和更高的穩定性, RS-232換成了 RS-485?

(5)
如果未找到相近的參考驅動程式,或者你決定從頭開始編寫自己的驅動程式,多花點時間在驅動程式及其資料結構的設計與框架構建上。

(6)
既然己掌握所需的所有知識,配備一些軟體工具(如 etags 、 cscope和偵錯程式)和實驗室裝備(如示波器、萬用表和分析儀〉,開始編寫程式碼吧。

下一步該做什麼?

Linux就這樣了,但只要有人想出了更巧妙的處理方式,內部的核心介面就過時了。沒有一成不變的核心程式碼。即使是慎密構思的排程器,自 2.4核心以來也已經重寫兩次了。
每年在核心樹中新增的程式碼有數百萬行。隨著核心的演進,為了獲得更好的效能,新的特性和抽象不斷增加,程式設計介面被重新設計,子系統被重新構建,可重用的部分經篩選後進入通用核心。
經過本書的學習,你已經打下了堅實的基礎,能夠跟上這些技術變化。為了讓自己的技術水平一直處於最前沿,可以定期更新核心程式碼樹,經常瀏覽核心郵件列表,只要有時間就編寫程式碼。
將來是Linux的天下,成為核心專家一定會有高回報的。努力吧!