日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总线设备驱动模型

發(fā)布時(shí)間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总线设备驱动模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

總線設(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è)文件,showstore代表讀寫:

?

?

驅(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é)

以上是生活随笔為你收集整理的总线设备驱动模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。