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