版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Linux2.6內(nèi)核的一個重要特色是提供了統(tǒng)一的內(nèi)核設(shè)備模型。隨著技術(shù)的不斷進(jìn)步,系統(tǒng)的拓?fù)浣Y(jié)構(gòu)越來越復(fù)雜,對智能電源管理、熱插拔以及plugplay的支持要求也越來越高,2.4內(nèi)核已經(jīng)難以滿足這些需求。為適應(yīng)這種形勢的需要,2.6內(nèi)核開發(fā)了全新的設(shè)備模型。1Sysfs文件系統(tǒng)Sysfs文件系統(tǒng)是一個類似于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)核中所有已注冊的設(shè)備驅(qū)動程序Class目錄:系統(tǒng)中的設(shè)備類型(如網(wǎng)卡設(shè)備,聲卡設(shè)備等)2內(nèi)核對象機(jī)制關(guān)鍵數(shù)據(jù)結(jié)構(gòu)2.1kobject內(nèi)核對象Kobject是Linux2.6引入的新的設(shè)備管理機(jī)制,在內(nèi)核中由structkobject表示。通過這個數(shù)據(jù)結(jié)構(gòu)使所有設(shè)備在底層都
3、具有統(tǒng)一的接口,kobject提供基本的對象管理,是構(gòu)成Linux2.6設(shè)備模型的核心結(jié)構(gòu),它與sysfs文件系統(tǒng)緊密關(guān)聯(lián),每個在內(nèi)核中注冊的kobject對象都對應(yīng)于sysfs文件系統(tǒng)中的一個目錄。Kobject結(jié)構(gòu)定義為:structkobjectk_name指向設(shè)備名稱的指針name[KOBJ_NAME_LEN]設(shè)備名稱structkrefkref對象引用計(jì)數(shù)structlist_headentry掛接到所在kset中去的單元st
4、ructkobjectparent指向父對象的指針structksetkset所屬kset的指針structkobj_typektype指向其對象類型描述符的指針structdentrydentrysysfs文件系統(tǒng)中與該對象對應(yīng)的文件節(jié)點(diǎn)路徑指針其中的kref域表示該對象引用的計(jì)數(shù),內(nèi)核通過kref實(shí)現(xiàn)對象引用計(jì)數(shù)管理,內(nèi)核提供兩個函數(shù)kobject_get()、kobject_put()分別用于增加和減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)為0時,
5、所有該對象使用的資源將被釋放。Ktype域是一個指向kobj_type結(jié)構(gòu)的指針,表示該對象的類型。Kobj_type數(shù)據(jù)結(jié)構(gòu)包含三個域:一個release方法用于釋放kobject占用的資源;一個sysfs_ops指針指向sysfs操作表和一個sysfs文件系統(tǒng)缺省屬性列表。Sysfs操作表包括兩個函數(shù)ste()和show()。當(dāng)用戶態(tài)讀取屬性時,show()函數(shù)被調(diào)用,該函數(shù)編碼指定屬性值存入buffer中返回給用戶態(tài);而ste()
6、函數(shù)用于存儲用戶態(tài)傳入的屬性值。2.2kset內(nèi)核對象集合Kobject通常通過kset組織成層次化的結(jié)構(gòu),kset是具有相同類型的kobject的集合,在內(nèi)核中用kset數(shù)據(jù)結(jié)構(gòu)表示,定義為:structksetstructsubsystemsubsys所在的subsystem的指針structkobj_typektype指向該kset對象類型描述符的指針structlist_headlist用于連接該kset中所有kobject的鏈
7、表頭從Linux設(shè)備層次(hierarchy)中刪除kobj對象。voidkobject_unregister(structkobjectkobj);kobject注銷函數(shù)。與kobject_register()相反,它首先調(diào)用kobject_del從設(shè)備層次中刪除該對象,再調(diào)用kobject_put()減少該對象的引用計(jì)數(shù),如果引用計(jì)數(shù)降為0,則釋放該kobject對象。3.2kset相關(guān)函數(shù)與kobject相似,kset_init(
8、)完成指定kset的初始化,kset_get()和kset_put()分別增加和減少kset對象的引用計(jì)數(shù)。Kset_add()和kset_del()函數(shù)分別實(shí)現(xiàn)將指定keset對象加入設(shè)備層次和從其中刪除;kset_register()函數(shù)完成kset的注冊而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)核對象機(jī)制的基礎(chǔ)上,L
10、inux的設(shè)備模型建立在幾個關(guān)鍵組件的基礎(chǔ)上,下面我們詳細(xì)闡述這些組件。4.1devices系統(tǒng)中的任一設(shè)備在設(shè)備模型中都由一個device對象描述,其對應(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對象掛接到全局設(shè)備鏈表中,所有的device對象都包含在devices_subsys中,并組織成層次結(jié)構(gòu)。Node域?qū)⒃搶ο髵旖拥狡湫值軐ο蟮逆?/p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(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)題庫
- 數(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) -范本
評論
0/150
提交評論