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

下載本文檔

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

文檔簡介

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

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

3、inux那些事兒中的內(nèi)容,在此書該書作者,該。非常喜歡該書的風格,有時間有精力的同學可以看一看。不當,請聯(lián)系Q125707942。:百問網(wǎng)科技淘寶地址:幾個重要bus、device、driver三大數(shù)據(jù)結(jié)構(gòu);bus、device、driver三者的關(guān)系;總線設(shè)備驅(qū)動模型帶來的好處。:百問網(wǎng)科技淘寶地址:bus:struct bus_typedevice:struct devicedriver:struct device_driver注:這里沒有貼出三個結(jié)構(gòu)體的代碼,請參考內(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 中的那兩個成員分別表示這個總線的兩條鏈表:設(shè)備鏈表、驅(qū)動鏈表。通過兩個鏈表可以分別找到該總線下所有的設(shè)備和驅(qū)動。device 中的那兩個成員分別表示該設(shè)備屬于哪個總線以及這個設(shè)備的驅(qū)動是什么。一個設(shè)備綁定一個驅(qū)動。device 中的那兩個成員分別表示該驅(qū)動屬于

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

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

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

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

溫馨提示

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

評論

0/150

提交評論