总线设备驱动模型
總線設(shè)備驅(qū)動(dòng)模型
一個(gè)總線設(shè)備驅(qū)動(dòng)包含三個(gè)元素:總線,驅(qū)動(dòng),設(shè)備。
總線是處理器和設(shè)備之間的同道,在設(shè)備模型中,所有的設(shè)備都通過總線相連,甚至是內(nèi)部的虛擬“platform”總線。
?
總線:
描述總線的數(shù)據(jù)結(jié)構(gòu)如下:
?
總線注冊和刪除使用:
?
下面介紹幾個(gè)比較重要的總線方法:
?
?
。
總線屬性Buf_attribute的結(jié)構(gòu)定義如下:
?
?
而總線設(shè)備和總線屬性的結(jié)合和解除如下:
?
?
設(shè)備:
Linux系統(tǒng)中的每一個(gè)總線設(shè)備由一個(gè)struct?device描述:
?
?
設(shè)備的注冊與注銷:
?
?
設(shè)備屬性由struct?device_attribute描述:
?
?
設(shè)備屬性的創(chuàng)建與刪除:
?
?
驅(qū)動(dòng):
驅(qū)動(dòng)程序由struct?device_driver描述:
?
?
驅(qū)動(dòng)注冊與注銷:
?
?
驅(qū)動(dòng)的屬性使用struct?driver_attribute來描述,其中attr代表一個(gè)文件,show和store代表讀寫:
?
?
驅(qū)動(dòng)屬性的創(chuàng)建與刪除:
?
?
?
注意:昨天一邊玩一邊學(xué),惡果深重,今天從新把代碼寫一遍。
?
1._init是告訴操作系統(tǒng),帶著這個(gè)標(biāo)示符的函數(shù),調(diào)用一次就可以從內(nèi)存中刪除了。
?
2.宏定義中的##號代表連接。
?
?
3.總線也是一種設(shè)備,所以注冊總線的時(shí)候也要注冊總線設(shè)備。
?
4.熱插拔:帶電插拔,比如沒有關(guān)機(jī)的情況下插拔硬件。
?
5.當(dāng)拔掉一個(gè)設(shè)備后會(huì)調(diào)用驅(qū)動(dòng)的remove函數(shù),當(dāng)驅(qū)動(dòng)連接一個(gè)設(shè)備的時(shí)候會(huì)調(diào)用prob函數(shù)。
?
6初始化總線,設(shè)備,驅(qū)動(dòng)的區(qū)別:
總線:????????????????
?
設(shè)備:
?
驅(qū)動(dòng):
?
?
Platform平臺驅(qū)動(dòng):
Platform總線是linux2.6內(nèi)核加入的一種虛擬總線,platform機(jī)制本身使用并不復(fù)雜,由兩部分組成:Platform_device和platform_driver。
Platform驅(qū)動(dòng)與傳統(tǒng)的設(shè)備驅(qū)動(dòng)模型相比,優(yōu)勢在于platform機(jī)制將設(shè)備本身的資源注冊進(jìn)內(nèi)核,有內(nèi)核統(tǒng)一管理,在驅(qū)動(dòng)程序使用這些資源時(shí)使用統(tǒng)一的接口,這樣提高了程序的可移植性。
通過platform機(jī)制開發(fā)底層設(shè)備驅(qū)動(dòng)的流程如圖:
?
?
平臺設(shè)備:
??掛到platform總線上的設(shè)備使用struct?Platform_device來描述:
?
struct?Platform_device使用如下函數(shù):
?
?
平臺設(shè)備的注冊如下:
?
?設(shè)備的資源描述結(jié)構(gòu)體如下:
?
??下面是設(shè)備資源的例子:
?
可以通過如下的方式獲取設(shè)備的資源:
?
????一個(gè)平臺設(shè)備內(nèi)核模塊的典型編寫方式如下:
?
?
平臺驅(qū)動(dòng):
平臺驅(qū)動(dòng)描述的數(shù)據(jù)結(jié)構(gòu)struct?platform_driver:
?
?
平臺驅(qū)動(dòng)注冊函數(shù):
?
下面是編寫平臺驅(qū)動(dòng)內(nèi)核模塊的一個(gè)例子:
?
?
中斷處理:
?
?
中斷的注冊:
注冊函數(shù)如下:
?
?
其中flags的可能值如下:
?
快速中斷和慢中斷:
?
?
共享中斷:
?
?
注意:
1.?共享中斷的dev_id是唯一的。
2.?共享中斷不能使用disable_irq(),否則會(huì)導(dǎo)致其他使用這個(gè)中斷的硬件設(shè)備也無法中斷。
?
?
?
?
使用完畢后應(yīng)該釋放中斷:
?
來自為知筆記(Wiz)
轉(zhuǎn)載于:https://www.cnblogs.com/dchipnau/p/5010059.html
總結(jié)
- 上一篇: 卖过的鞋子
- 下一篇: Calico在Docker中的搭建