关于linux驱动程序的学习
計(jì)算機(jī)總體的工作過(guò)程:
應(yīng)用程序 -->調(diào)用系統(tǒng)API -->系統(tǒng)調(diào)用驅(qū)動(dòng)程序中的方法 -->驅(qū)動(dòng)程序驅(qū)動(dòng)設(shè)備運(yùn)行
如何理解調(diào)用系統(tǒng)API?
其實(shí)也就是讀寫(xiě)文件,linux中所有東西都以文件的形式抽象化。文件我們可以分為兩種,普通文件和設(shè)備文件。
當(dāng)你要打開(kāi)普通文件時(shí),你會(huì)調(diào)用系統(tǒng)的open()這個(gè)API,然后就可以對(duì)普通文件進(jìn)行操作了。
當(dāng)你要打開(kāi)設(shè)備文件時(shí),你也是得調(diào)用系統(tǒng)的open()這個(gè)API,但是操作系統(tǒng)識(shí)別到你要操作的是設(shè)備文件,于是該設(shè)備的驅(qū)動(dòng)程序便會(huì)運(yùn)行起來(lái)了!
所以以上可以簡(jiǎn)化為:
應(yīng)用程序 -->系統(tǒng)調(diào)用驅(qū)動(dòng)程序中的方法 -->驅(qū)動(dòng)程序驅(qū)動(dòng)設(shè)備運(yùn)行
所以當(dāng)我們發(fā)明一個(gè)新硬件時(shí),我們得寫(xiě)出這個(gè)設(shè)備的驅(qū)動(dòng)程序,然后再寫(xiě)出這個(gè)設(shè)備的應(yīng)用程序。
為什么平時(shí)我們生活中很少感受到這兩種東西呢?比如我們買(mǎi)的打印機(jī)、麥克風(fēng)、監(jiān)控設(shè)備。
那是因?yàn)檫@些東西系統(tǒng)都已經(jīng)幫我們做好了,驅(qū)動(dòng)裝好了,應(yīng)用程序也有了,一般來(lái)說(shuō)驅(qū)動(dòng)更新的時(shí)候我們才會(huì)接觸到驅(qū)動(dòng)。
如何寫(xiě)驅(qū)動(dòng)程序?
1.
驅(qū)動(dòng)程序的目的在于向你的硬件設(shè)備發(fā)送該硬件設(shè)備支持的相關(guān)數(shù)據(jù)。
2.
驅(qū)動(dòng)程序中的方法相當(dāng)于一個(gè)接口,面向上層也就是應(yīng)用程序的調(diào)用。一般來(lái)說(shuō)函數(shù)名跟系統(tǒng)的API一樣,常見(jiàn)的功能函數(shù)有xxx_open()、xxx_wtire()
所以驅(qū)動(dòng)程序主要就是一個(gè)程序,里邊包含一些相關(guān)功能的函數(shù),等著被調(diào)用,感覺(jué)就是一個(gè)庫(kù)。
如何使用驅(qū)動(dòng)程序?
你把驅(qū)動(dòng)程序?qū)懞昧?#xff0c;先把它加載進(jìn)你的計(jì)算機(jī),也就是安裝一個(gè)模塊,然后就是向系統(tǒng)注冊(cè)了,注冊(cè)過(guò)程就是創(chuàng)建你這個(gè)驅(qū)動(dòng)程序的結(jié)構(gòu)體,包括包含的函數(shù)的指針,還有設(shè)備號(hào)列表。設(shè)備號(hào)列表就是說(shuō)明你這個(gè)驅(qū)動(dòng)程序支持哪些設(shè)備(每個(gè)設(shè)備都有設(shè)備號(hào))。
注冊(cè)完成后你還得創(chuàng)建一個(gè)設(shè)備文件,設(shè)備文件就是設(shè)備的抽象化,把你對(duì)硬件設(shè)備的讀寫(xiě)抽象成你對(duì)這個(gè)設(shè)備文件的讀寫(xiě)。也就是說(shuō),設(shè)備文件創(chuàng)建好后,你可以通過(guò)這個(gè)設(shè)備文件對(duì)設(shè)備進(jìn)行實(shí)際操作了。
設(shè)備文件如何跟設(shè)備還有驅(qū)動(dòng)程序聯(lián)系起來(lái)呢?
指定設(shè)備號(hào),創(chuàng)建一個(gè)設(shè)備文件時(shí)需要指定設(shè)備號(hào)。
當(dāng)一個(gè)驅(qū)動(dòng)程序出現(xiàn)在計(jì)算機(jī)時(shí),就要向計(jì)算機(jī)匯報(bào),然后進(jìn)行注冊(cè),當(dāng)一個(gè)硬件設(shè)備出現(xiàn)在計(jì)算機(jī)中時(shí),也要向計(jì)算機(jī)進(jìn)行匯報(bào),然后進(jìn)行注冊(cè)。同時(shí)計(jì)算機(jī)會(huì)匹配驅(qū)動(dòng)程序與硬件設(shè)備,匹配成功后,硬件設(shè)備就可以進(jìn)行工作了,就可以等著應(yīng)用程序進(jìn)行調(diào)用了。
應(yīng)用程序如何調(diào)用驅(qū)動(dòng)程序?
應(yīng)用程序不需要考慮調(diào)用驅(qū)動(dòng)程序,驅(qū)動(dòng)程序只是中間過(guò)程,應(yīng)用程序只需要考慮調(diào)用設(shè)備,也就是讀寫(xiě)設(shè)備文件就可以了!
剩下的就是操作硬件的代碼了,應(yīng)該就是寄存器的操作了,以后有時(shí)間再看。
純屬本人理解:如有錯(cuò)誤敬請(qǐng)指出!
參考:
在linux下寫(xiě)一個(gè)簡(jiǎn)單的驅(qū)動(dòng)程序
驅(qū)動(dòng)程序開(kāi)發(fā)的步驟
總結(jié)
以上是生活随笔為你收集整理的关于linux驱动程序的学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于How to do/What to
- 下一篇: 在linux中进程表示的是,Linux进