版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Linux2.6內(nèi)核的一個(gè)重要特色是提供了統(tǒng)一的內(nèi)核設(shè)備模型。隨著技術(shù)的不斷進(jìn)步,系統(tǒng)的拓?fù)浣Y(jié)構(gòu)越來(lái)越復(fù)雜,對(duì)智能電源管理、熱插拔以及plugplay的支持要求也越來(lái)越高,2.4內(nèi)核已經(jīng)難以滿足這些需求。為適應(yīng)這種形勢(shì)的需要,2.6內(nèi)核開發(fā)了全新的設(shè)備模型。1Sysfs文件系統(tǒng)Sysfs文件系統(tǒng)是一個(gè)類似于proc文件系統(tǒng)的特殊文件系統(tǒng),用于將系統(tǒng)中的設(shè)備組織成層次結(jié)構(gòu),并向用戶模式程序提供詳細(xì)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)信息。其頂層目錄主要有:Bl
2、ock目錄:包含所有的塊設(shè)備Devices目錄:包含系統(tǒng)所有的設(shè)備,并根據(jù)設(shè)備掛接的總線類型組織成層次結(jié)構(gòu)Bus目錄:包含系統(tǒng)中所有的總線類型Drivers目錄:包括內(nèi)核中所有已注冊(cè)的設(shè)備驅(qū)動(dòng)程序Class目錄:系統(tǒng)中的設(shè)備類型(如網(wǎng)卡設(shè)備,聲卡設(shè)備等)2內(nèi)核對(duì)象機(jī)制關(guān)鍵數(shù)據(jù)結(jié)構(gòu)2.1kobject內(nèi)核對(duì)象Kobject是Linux2.6引入的新的設(shè)備管理機(jī)制,在內(nèi)核中由structkobject表示。通過(guò)這個(gè)數(shù)據(jù)結(jié)構(gòu)使所有設(shè)備在底層都
3、具有統(tǒng)一的接口,kobject提供基本的對(duì)象管理,是構(gòu)成Linux2.6設(shè)備模型的核心結(jié)構(gòu),它與sysfs文件系統(tǒng)緊密關(guān)聯(lián),每個(gè)在內(nèi)核中注冊(cè)的kobject對(duì)象都對(duì)應(yīng)于sysfs文件系統(tǒng)中的一個(gè)目錄。Kobject結(jié)構(gòu)定義為:structkobjectk_name指向設(shè)備名稱的指針name[KOBJ_NAME_LEN]設(shè)備名稱structkrefkref對(duì)象引用計(jì)數(shù)structlist_headentry掛接到所在kset中去的單元st
4、ructkobjectparent指向父對(duì)象的指針structksetkset所屬kset的指針structkobj_typektype指向其對(duì)象類型描述符的指針structdentrydentrysysfs文件系統(tǒng)中與該對(duì)象對(duì)應(yīng)的文件節(jié)點(diǎn)路徑指針其中的kref域表示該對(duì)象引用的計(jì)數(shù),內(nèi)核通過(guò)kref實(shí)現(xiàn)對(duì)象引用計(jì)數(shù)管理,內(nèi)核提供兩個(gè)函數(shù)kobject_get()、kobject_put()分別用于增加和減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)為0時(shí),
5、所有該對(duì)象使用的資源將被釋放。Ktype域是一個(gè)指向kobj_type結(jié)構(gòu)的指針,表示該對(duì)象的類型。Kobj_type數(shù)據(jù)結(jié)構(gòu)包含三個(gè)域:一個(gè)release方法用于釋放kobject占用的資源;一個(gè)sysfs_ops指針指向sysfs操作表和一個(gè)sysfs文件系統(tǒng)缺省屬性列表。Sysfs操作表包括兩個(gè)函數(shù)ste()和show()。當(dāng)用戶態(tài)讀取屬性時(shí),show()函數(shù)被調(diào)用,該函數(shù)編碼指定屬性值存入buffer中返回給用戶態(tài);而ste()
6、函數(shù)用于存儲(chǔ)用戶態(tài)傳入的屬性值。2.2kset內(nèi)核對(duì)象集合Kobject通常通過(guò)kset組織成層次化的結(jié)構(gòu),kset是具有相同類型的kobject的集合,在內(nèi)核中用kset數(shù)據(jù)結(jié)構(gòu)表示,定義為:structksetstructsubsystemsubsys所在的subsystem的指針structkobj_typektype指向該kset對(duì)象類型描述符的指針structlist_headlist用于連接該kset中所有kobject的鏈
7、表頭從Linux設(shè)備層次(hierarchy)中刪除kobj對(duì)象。voidkobject_unregister(structkobjectkobj);kobject注銷函數(shù)。與kobject_register()相反,它首先調(diào)用kobject_del從設(shè)備層次中刪除該對(duì)象,再調(diào)用kobject_put()減少該對(duì)象的引用計(jì)數(shù),如果引用計(jì)數(shù)降為0,則釋放該kobject對(duì)象。3.2kset相關(guān)函數(shù)與kobject相似,kset_init(
8、)完成指定kset的初始化,kset_get()和kset_put()分別增加和減少kset對(duì)象的引用計(jì)數(shù)。Kset_add()和kset_del()函數(shù)分別實(shí)現(xiàn)將指定keset對(duì)象加入設(shè)備層次和從其中刪除;kset_register()函數(shù)完成kset的注冊(cè)而kset_unregister()函數(shù)則完成kset的注銷。3.3subsystem相關(guān)函數(shù)subsystem有一組完成類似的函數(shù),分別是:voidsubsystem_init(
9、structsubsystemsubsys)intsubsystem_register(structsubsystemsubsys)voidsubsystem_unregister(structsubsystemsubsys)structsubsystemsubsys_get(structsubsystemsubsys)voidsubsys_put(structsubsystemsubsys)4設(shè)備模型組件在上述內(nèi)核對(duì)象機(jī)制的基礎(chǔ)上,L
10、inux的設(shè)備模型建立在幾個(gè)關(guān)鍵組件的基礎(chǔ)上,下面我們?cè)敿?xì)闡述這些組件。4.1devices系統(tǒng)中的任一設(shè)備在設(shè)備模型中都由一個(gè)device對(duì)象描述,其對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)structdevice定義為:structdevicestructlist_headg_liststructlist_headnodestructlist_headbus_liststructlist_headdriver_liststructlist_headchild
11、renstructdeviceparentstructkobjectkobjbus_id[BUS_ID_SIZE]structbus_typebusstructdevice_driverdrivervoiddriver_dataSeveralfieldsomittedg_list將該device對(duì)象掛接到全局設(shè)備鏈表中,所有的device對(duì)象都包含在devices_subsys中,并組織成層次結(jié)構(gòu)。Node域?qū)⒃搶?duì)象掛接到其兄弟對(duì)象的鏈
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)論文數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)教學(xué)探索
- 《數(shù)據(jù)結(jié)構(gòu)》大綱
- 數(shù)據(jù)結(jié)構(gòu)答案
- 數(shù)據(jù)結(jié)構(gòu)(六)
- 《數(shù)據(jù)結(jié)構(gòu)》教案
- 《數(shù)據(jù)結(jié)構(gòu)》講義
- 數(shù)據(jù)結(jié)構(gòu)范本
- 數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)
- 數(shù)據(jù)結(jié)構(gòu)例題
- 數(shù)據(jù)結(jié)構(gòu)ab
- 數(shù)據(jù)結(jié)構(gòu)機(jī)考
- 數(shù)據(jù)結(jié)構(gòu)題庫(kù)
- 數(shù)據(jù)結(jié)構(gòu)復(fù)習(xí)
- 數(shù)據(jù)結(jié)構(gòu)作業(yè)
- 《數(shù)據(jù)結(jié)構(gòu)》講義
- 數(shù)據(jù)結(jié)構(gòu)講義
- 數(shù)據(jù)結(jié)構(gòu)習(xí)題
- 數(shù)據(jù)結(jié)構(gòu) -范本
評(píng)論
0/150
提交評(píng)論