第14課-總線設(shè)備驅(qū)動(dòng)模型_第1頁
第14課-總線設(shè)備驅(qū)動(dòng)模型_第2頁
第14課-總線設(shè)備驅(qū)動(dòng)模型_第3頁
第14課-總線設(shè)備驅(qū)動(dòng)模型_第4頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第14課 總線設(shè)備驅(qū)動(dòng)模型背景知識(shí)今天要講的東西讓我十分惶恐,講得不好還請(qǐng)?jiān)?。總線設(shè)備驅(qū)動(dòng)模型最初只是為了讓電源管理變得更加容易,但是隨著技術(shù)的發(fā)展不僅讓電源管理變得容易而且讓設(shè)備管理任務(wù)變得更加集中。你也可以說是無心插柳柳成蔭吧,就像當(dāng)年UNIX之父為了讓UNIX系統(tǒng)具有更好的移植性而把整個(gè)系統(tǒng)(最初是用匯編寫的)重新用一種新的語言改寫,這種語言就是你我現(xiàn)在正在使用的-C語言。既是UNIX之父,又是C語言之父,死的驚天動(dòng)地,他老人家走的時(shí)候卻沒多少人知道,我等只能長嘆一聲。哎,扯遠(yuǎn)了??偩€設(shè)備驅(qū)動(dòng)模型是驅(qū)動(dòng)的精髓,深入理解了這個(gè)模型的涵義你就會(huì)感嘆寫這部分內(nèi)核代碼的人有多牛了。:百問網(wǎng)科技

2、淘寶地址:其實(shí)韋老師在里面已經(jīng)把總線設(shè)備驅(qū)動(dòng)的概念講的很清楚了,只是不同的總線設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)方式不一樣,我在這里只是稍微提幾個(gè)重要。比如,從分類的角度來說所有這些設(shè)備按總線方式可以分為USB總線設(shè)備、PCI總線設(shè)備等等。每一類設(shè)備都有自己的總線,pci_bus_type、scsi_bus_type、 usb_bus_type等等。這些不同類的設(shè)備相差甚遠(yuǎn),那么它們的match方式也就不一樣了。記得韋老師在講輸入子系統(tǒng)的時(shí)候是通過比較彼此的名字來match的,而usb設(shè)備可就不是通過名字來match了,其他不同類的設(shè)備也會(huì)有不同的match方式。:百問網(wǎng)科技淘寶地址:寫面的話這個(gè)PPT參考了很多L

3、inux那些事兒中的內(nèi)容,在此書該書作者,該。非常喜歡該書的風(fēng)格,有時(shí)間有精力的同學(xué)可以看一看。不當(dāng),請(qǐng)聯(lián)系Q125707942。:百問網(wǎng)科技淘寶地址:幾個(gè)重要bus、device、driver三大數(shù)據(jù)結(jié)構(gòu);bus、device、driver三者的關(guān)系;總線設(shè)備驅(qū)動(dòng)模型帶來的好處。:百問網(wǎng)科技淘寶地址:bus:struct bus_typedevice:struct devicedriver:struct device_driver注:這里沒有貼出三個(gè)結(jié)構(gòu)體的代碼,請(qǐng)參考內(nèi)核源碼:百問網(wǎng)科技淘寶地址:只需要關(guān)注:struct bus_type 中:struct kset drivers 和st

4、ruct kset devi;struct device 中:struct bus_type * bus 和struct device_driver *driver;struct device_driver中:struct bus_type *bus和struct klist klist_devi。:百問網(wǎng)科技淘寶地址:bus_type 中的那兩個(gè)成員分別表示這個(gè)總線的兩條鏈表:設(shè)備鏈表、驅(qū)動(dòng)鏈表。通過兩個(gè)鏈表可以分別找到該總線下所有的設(shè)備和驅(qū)動(dòng)。device 中的那兩個(gè)成員分別表示該設(shè)備屬于哪個(gè)總線以及這個(gè)設(shè)備的驅(qū)動(dòng)是什么。一個(gè)設(shè)備綁定一個(gè)驅(qū)動(dòng)。device 中的那兩個(gè)成員分別表示該驅(qū)動(dòng)屬于

5、哪個(gè)總線以及這個(gè)驅(qū)動(dòng)支持哪些設(shè)備。驅(qū)動(dòng)支持的這些設(shè)備被加入到驅(qū)動(dòng)自己的鏈表中。:百問網(wǎng)科技淘寶地址:總線中的兩條鏈表如何形成?系統(tǒng)初始化的時(shí)候,會(huì)掃描連接了哪些設(shè)備,并為每一個(gè)設(shè)備建立起一個(gè)struct device 的變量,每一次有一個(gè)驅(qū)動(dòng)程序,就要準(zhǔn)備一個(gè)struct device_driver 結(jié)構(gòu)的變量。把這些變量統(tǒng)統(tǒng)加入相應(yīng)的鏈表,devicedevi鏈表,driverdrivers 鏈表。這樣通過總線就能找到每一個(gè)設(shè)備,每一個(gè)驅(qū)動(dòng)。的同學(xué)可以去研究一下subsys_initcall關(guān)于系統(tǒng)初始化有這個(gè)宏的來龍去脈,非常有意思,可以解開不少疑惑。:百問網(wǎng)科技淘寶地址:當(dāng)設(shè)備和驅(qū)動(dòng)分別

6、向內(nèi)核以后,設(shè)備出現(xiàn)在總線的設(shè)備鏈表中,驅(qū)動(dòng)出現(xiàn)在總線的驅(qū)動(dòng)鏈表中。設(shè)備和驅(qū)動(dòng)如果只是單獨(dú)出現(xiàn)是沒有任何意義的,也就是說如果只有設(shè)備沒有相應(yīng)的驅(qū)動(dòng),這個(gè)設(shè)備對(duì)來說沒有意義;如果只有驅(qū)動(dòng)沒有設(shè)備,這個(gè)驅(qū)動(dòng)也起不了任何作用。那么驅(qū)動(dòng)和設(shè)備的關(guān)系又是怎么樣的呢,驅(qū)動(dòng)和設(shè)備怎么產(chǎn)生聯(lián)系呢?在熱插拔這個(gè)名詞出現(xiàn)之前,是先有設(shè)備后有驅(qū)動(dòng)的。每一個(gè)設(shè)備在系統(tǒng)上電啟動(dòng)之前就得插在它應(yīng)該在的位置,然后才能上電啟動(dòng)系統(tǒng)。然后系統(tǒng)開始初始化,總線開始掃描設(shè)備,每找到一個(gè)設(shè)備,就為其申請(qǐng)一個(gè)struct device 結(jié)構(gòu),并且掛入總線中的devi鏈表中來。:百問網(wǎng)科技淘寶地址:然后每一個(gè)驅(qū)動(dòng)程序開始初始化,開始de

7、vice_driver結(jié)構(gòu),然后它去總線的devi其struct鏈表中去尋找(遍歷),去尋找每一個(gè)還沒有綁定driver 的設(shè)備,即struct device 中的struct device_driver 指針仍為空的設(shè)備,然后它會(huì)去觀察 這種設(shè)備的特征, 看是否是他所支持的設(shè)備, 如果是, 那么 調(diào)用一個(gè)叫做device_bind_driver 的函數(shù),然后設(shè)備就有了驅(qū) 動(dòng)。于是設(shè)備把自己的device_driver成員指向那個(gè)驅(qū)動(dòng),而驅(qū) 動(dòng)則把這個(gè)設(shè)備加入到自己的鏈表。所謂你中有我,我中有你。在熱插拔出現(xiàn)之后,就無所謂誰先誰后了。因?yàn)樵O(shè)備可以在任何時(shí)刻出現(xiàn),驅(qū)動(dòng)可以在任何時(shí)刻被加載。一旦設(shè)

8、備出現(xiàn), 這個(gè)設(shè)備就會(huì)去總線的驅(qū)動(dòng)列表中尋找屬于自己的驅(qū)動(dòng);一旦 驅(qū)動(dòng)被加載,它就會(huì)去總線的設(shè)備列表中尋找被它支持的設(shè)備。:百問網(wǎng)科技淘寶地址:無法想象沒有熱插拔的日子廣大男同胞們?cè)撛趺椿?。難道你拿著U盤去同學(xué)那兒拷貝(什么自己想象)還得讓他把電腦先關(guān)掉讓你插上U盤再啟動(dòng)?萬一你拷的不是你想看的你還得另外拷一部,你同學(xué)沒被你煩死你自己都想把電腦砸了。哎,又扯遠(yuǎn)了。不同的設(shè)備在找到跟自己匹配的驅(qū)動(dòng)這個(gè)過程還不一樣。要搞清楚具體的一個(gè)設(shè)備走的這個(gè)過程還得回到內(nèi)核源碼 中。切記不可急于深入,否則鉆進(jìn)去就出不來了。:百問網(wǎng)科技淘寶地址:總線設(shè)備驅(qū)動(dòng)模型的意義不是一兩句話就能夠概括的。首先,總線設(shè)備模型是電源管理的基礎(chǔ),這里牽涉到suspend的一些概念不做深入;其次,總線設(shè)備模型將硬件與離開來,因此硬件的差異性對(duì)上層來說是看不到的,分需要做的就是告訴內(nèi)核設(shè)備跟別人的不同。很多具體的模型甚至提供了完整的讀寫等一些與設(shè)備交互的函數(shù)。這些工作的完成大大的減少了的工作量,驅(qū)動(dòng)要完成的工作越來越少,的人可以專注于應(yīng)用,這也就意味著開發(fā)周期的縮短,對(duì)于廠商來說周期的縮短意味著產(chǎn)品的更快上市也就意味著迅速搶占市場。因此用好內(nèi)核源碼。要充分利:百問網(wǎng)科技淘寶地址:后記我所講的內(nèi)容絕大部分來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論