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