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