無根之木不活,無基之樓不立,無論是學習哪個領域知識,基礎是重中之重。
針對學習linux驅動,我們來仔細談談:
個人認為C語言和資料結構就是重中之重!Linux系統最優秀的地方就在于核心。無論是程序排程,記憶體管理,還是資料的組織形式,而這些算法的基礎就是一個高效而精簡的資料結構,紅黑樹也好,核心連結清單也好,看不懂C語言,搞不清資料結構,基本上談不上做驅動。基礎不紮實不要談上層建築,資源不全面就不要談合作,很簡單的道理。
假設樓主的C語言和資料結構都是勉強過關的(分得清指針函數函數指針,能夠熟練自定義連結清單并進行增删改查等連結清單或樹的算法重組)。我們來談下一個階段,讓我們對類Unix系統的基本操作有一個基本的了解,打開檔案,切換路經,更改個密碼,填個使用者什麼的。
接下來我們來談驅動,做驅動就得有做驅動的樣子,不知道樓主之前玩過裸闆51或者AVR沒有,如果沒有,盡快搞通,資源很多,跟着人家把電平配一遍,來個矩陣鍵盤,組個跑馬燈,有成就感的同時也打下了硬體基礎,好處大大滴。
基于作業系統的驅動,即必須了解核心對驅動程式的管理方法,怎樣劃分一個具體的裝置,是字元型?塊裝置?還是别的什麼,或者從總線的角度來劃分一個裝置,i2c也好,USB也罷,還是資料位址控制這麼一個三總線形式,都是有必要掌握的東西。
上升到應用,任何一個實踐項目中很難會有一個闆子讓你從零開始寫驅動,百分之九十九是拿來改,這就是一個熟練的過程,做到一定多的東西,就會下意識地覺得,這個地方可能會有問題,我需要留意一下。
總結一下,驅動工程師其實也是一種硬體翻譯型工程師,其任務就是看懂手冊上的表格,然後展現在代碼裡面。客觀地說,我們這個行業門檻較高,隊友較少,不過等到真正入門之後,那種成就感是無與倫比的。
取消
評論