中午跟比較要好的同事一塊吃飯,同事剛從單片機(jī)開(kāi)發(fā)轉(zhuǎn)Linux開(kāi)發(fā)沒(méi)多久,目前負(fù)責(zé)給客戶開(kāi)發(fā)一個(gè)USB 設(shè)備驅(qū)動(dòng)。他跟我抱怨,由于獲取不到客戶內(nèi)核代碼,因此每次客戶那邊內(nèi)核代碼發(fā)生了改變,自己的驅(qū)動(dòng)程序也要跟著重新編譯,太麻煩了。因此,我建議同事把驅(qū)動(dòng)寫(xiě)到APP里面。同事大驚,Linux能在應(yīng)用層開(kāi)發(fā)驅(qū)動(dòng)?
答案是肯定的。在Linux系統(tǒng)中,對(duì)于總線類驅(qū)動(dòng)(usb,i2c,spi等),驅(qū)動(dòng)框架都分為倆部分。一是總線控制器驅(qū)動(dòng),它負(fù)責(zé)使能總線傳輸數(shù)據(jù)的能力。二是設(shè)備驅(qū)動(dòng),它負(fù)責(zé)使能掛在總線上的設(shè)備。
以u(píng)sb設(shè)備為例,usb host controller驅(qū)動(dòng)使得Linux可以在自己及掛在自己身上的usb 設(shè)備(如usb轉(zhuǎn)串口設(shè)備、usb攝像頭等)之間傳輸數(shù)據(jù)。但是usb設(shè)備種類有千千萬(wàn)。驅(qū)動(dòng)這些設(shè)備,都需要通過(guò)usb總線發(fā)送特定的數(shù)據(jù)給到usb設(shè)備。比如,我要初始化usb 串口設(shè)備,我應(yīng)該發(fā)什么數(shù)據(jù)設(shè)置它的波特率呢?
相信大家已經(jīng)明白了,總線控制器驅(qū)動(dòng)及總線設(shè)備驅(qū)動(dòng)的關(guān)系了,其實(shí)就是程序分層的思想??偩€控制器驅(qū)動(dòng)有了之后,程序員就可以調(diào)用她的接口,將自己要發(fā)送的數(shù)據(jù)發(fā)送到總線上的設(shè)備,這就是設(shè)備驅(qū)動(dòng)了。那具體在內(nèi)核空間調(diào)用還是在應(yīng)用空間調(diào)用都是OK的。
筆者在實(shí)際工作過(guò)程中,有過(guò)在應(yīng)用空間開(kāi)發(fā)i2c設(shè)備驅(qū)動(dòng),安卓APP開(kāi)發(fā)usb 設(shè)備驅(qū)動(dòng)(usb轉(zhuǎn)串口)程序的經(jīng)驗(yàn)。
責(zé)任編輯 LK
-
控制器
+關(guān)注
關(guān)注
114文章
16838瀏覽量
182289 -
usb
+關(guān)注
關(guān)注
60文章
8066瀏覽量
269761 -
Linux
+關(guān)注
關(guān)注
87文章
11420瀏覽量
212361
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
學(xué)習(xí)嵌入式Linux應(yīng)用層的開(kāi)發(fā)
嵌入式Linux的驅(qū)動(dòng)開(kāi)發(fā)
電池能不能修復(fù)?
到底能不能實(shí)現(xiàn)無(wú)代碼開(kāi)發(fā)
新能源的車到底能不能買(mǎi)_新能源汽車的利與弊
諧波治理到底能不能節(jié)電
linux spi應(yīng)用層驅(qū)動(dòng)以及回環(huán)測(cè)試代碼
嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)從基礎(chǔ)到框架

嵌入式Linux應(yīng)用層開(kāi)發(fā)教程(一)基本概念

嵌入式Linux驅(qū)動(dòng) GPIO操作 包括驅(qū)動(dòng)和應(yīng)用層程序?qū)?b class='flag-5'>驅(qū)動(dòng)進(jìn)行測(cè)試

Linux中LED驅(qū)動(dòng)的應(yīng)用層控制
直流電源到底能不能驅(qū)動(dòng)交流燈泡發(fā)光?

評(píng)論