如何進(jìn)行驅(qū)動開發(fā)(一)
筆者是一個畢業(yè)以后一直進(jìn)行驅(qū)動開發(fā)的軟件工程師。寫這個文章的目的是為了記錄軟件工作中遇到的一些問題和思考,避免在后續(xù)的軟件工作中犯相同的問題。
首先要進(jìn)行驅(qū)動開發(fā),那就要知道驅(qū)動是什么。筆者理解的驅(qū)動,就是芯片要運作起來,必須要依賴軟件的一系列的配置,這一系列配置就是驅(qū)動。至于為什么需要驅(qū)動,能點開這篇文章的人應(yīng)該都清楚。
可能有些才開始接觸底層開發(fā)的人員或者對這部分不太了解的人會認(rèn)為驅(qū)動開發(fā)是個很高大上的職業(yè)。但筆者作為工作在基層的員工來說,大部分驅(qū)動開發(fā)并沒有太多的技術(shù)含量。為什么這么說,原因如下:
1、大部分功能是由芯片實現(xiàn),驅(qū)動的作用主要是控制和初始化。大部分芯片驅(qū)動就是寫這個,寫完了芯片就能跑起來了。具體做什么業(yè)務(wù)再根據(jù)具體場景來進(jìn)行控制配置,這就不是驅(qū)動的范圍了。
2、驅(qū)動開發(fā)是有套路的不管是用戶態(tài)驅(qū)動還是內(nèi)核態(tài)驅(qū)動,基本按照這個套路走,就不會有大問題。特別是用戶態(tài)驅(qū)動,是一層很薄的軟件,就像一個洋蔥剝幾層就看到最里面的東西,沒太多技術(shù)。
3、大部分驅(qū)動由于主要做控制和初始化,涉及不到復(fù)雜的算法,所以其實編碼階段大部分都不會太難。
所以我感覺我上班的大部分時間其實是在搬磚,所以碼農(nóng)這個稱呼其實也有一定道理 []~( ̄▽ ̄)~*。但是驅(qū)動為什么還是比較吸引人,還是因為驅(qū)動開發(fā)也有它自己的難點和魅力,我理解的驅(qū)動開發(fā)的難點(魅力)主要是集中在以下幾點
1、芯片需要跟軟件一起完成的功能,也就是說整套功能流程需要軟件和芯片緊密配合。這部分功能驅(qū)動是比較復(fù)雜的,會涉及到軟硬件資源的保護(hù),軟硬件的交互效率等問題。
2、內(nèi)核態(tài)驅(qū)動與內(nèi)核耦合,在出現(xiàn)異常后,如何定位是一個難點,特別是踩內(nèi)存這種問題,或者出現(xiàn)了某種異常直接復(fù)位,無問題現(xiàn)場。這種問題分析是很難短時間內(nèi)找到問題點的,必須要一步步抽絲剝繭。
以上主要是筆者對驅(qū)動開發(fā)的基本理解,難免會有些地方理解不夠到位,如果出現(xiàn)理解不一致的情況歡迎一起交流探討。后續(xù)會針對何如開發(fā)Linux驅(qū)動,以及開發(fā)中遇到的問題進(jìn)行具體分析。





