驅(qū)動(dòng)開發(fā)三件寶:spec、datasheet與內(nèi)核源碼
本文關(guān)鍵詞:Linux內(nèi)核修煉之道,由筆耕文化傳播整理發(fā)布。
推薦博文: Linux內(nèi)核“問題門”——學(xué)習(xí)問題、經(jīng)驗(yàn)集錦
推薦下載:《Linux內(nèi)核修煉之道》精華版之方法論
設(shè)備模型之外,對于驅(qū)動(dòng)程序的開發(fā)者來說,有三樣?xùn)|西是不可缺少的:第一是協(xié)議或標(biāo)準(zhǔn)的spec,也就是規(guī)范,比如usb協(xié)議規(guī)范;第二是硬件的datasheet,即你的驅(qū)動(dòng)要支持的硬件的手冊;第三就是內(nèi)核里類似驅(qū)動(dòng)的源代碼,比如你要寫觸摸屏驅(qū)動(dòng)的話,就可以參考內(nèi)核里已經(jīng)有的一些觸摸屏驅(qū)動(dòng)。
spec、datasheet、內(nèi)核源代碼這三樣?xùn)|西對于每個(gè)開發(fā)設(shè)備驅(qū)動(dòng)的人來說都是再尋常不過了,但正是因?yàn)樗鼈兊钠胀,所以在很多人眼里都被歸為被忽視的群體。于是大家開發(fā)驅(qū)動(dòng)的過程中,遇到問題的時(shí)候首先想到的可能還是“問問牛人怎么解決吧”、“旁邊要是有個(gè)牛人該多好”,因?yàn)榕H说南∮,所以知道牛人的價(jià)值,而又因?yàn)閟pec、datasheet和內(nèi)核源代碼的唾手可得,所以常常體會(huì)不到它們在解決問題時(shí)的重要性。
當(dāng)然我并不是貶低牛人的價(jià)值,宣揚(yáng)依賴牛人不好,如果你很幸運(yùn)身邊真就有牛人這種稀缺資源的話,自然是要好好利用,也可以少走很多彎路,節(jié)省很多摸索的時(shí)間。只是人生不如意十之八九,多數(shù)人還是沒有這份幸運(yùn)的,所以與其遍尋牛人討教,,不如多依賴依賴自己,多利用利用自己身邊有的資源去尋找解決問題的途徑。
對這三樣看似普通的東西,關(guān)鍵在于很好的去利用,而不是擁有。就說USB吧,USB驅(qū)動(dòng)和USB設(shè)備如何進(jìn)行交流,交流的方式,交流過程中出現(xiàn)了什么問題是什么引起的等等都在USB spec里有描述,而你的USB設(shè)備支持多少種配置包含多少端點(diǎn)只有設(shè)備的datasheet才知道。協(xié)議的spec和設(shè)備的datasheet是最好的參考資料,驅(qū)動(dòng)開發(fā)調(diào)試中出現(xiàn)的問題絕大部分都能在它們的某個(gè)角落里找到答案。而內(nèi)核中類似設(shè)備的驅(qū)動(dòng)源代碼是最好的模版,對很多硬件設(shè)備,你都可以在內(nèi)核找到同種設(shè)備的驅(qū)動(dòng)代碼進(jìn)行參考實(shí)現(xiàn),甚至于可以拷貝或共享大部分的代碼,只進(jìn)行局部的修改,比如說位于drivers/input/touchscreen目錄下的各個(gè)觸摸屏驅(qū)動(dòng),它們之間的代碼很多都是類似的甚至是相同的。
如果你不僅僅只是打算寫驅(qū)動(dòng),而是還想閱讀內(nèi)核中實(shí)現(xiàn)某種總線、設(shè)備的源代碼,鉆研它們的實(shí)現(xiàn)機(jī)制,那協(xié)議的spec就猶為重要,它們在代碼里的體現(xiàn)無處不在,你需要在閱讀代碼前就對協(xié)議規(guī)范有個(gè)整體的理解。形象點(diǎn)說,spec是理論基礎(chǔ),內(nèi)核代碼是具體實(shí)現(xiàn),理論懂了,看代碼就和看故事會(huì)差不多了。
本文關(guān)鍵詞:Linux內(nèi)核修煉之道,由筆耕文化傳播整理發(fā)布。
本文編號(hào):105730
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/105730.html