版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux系統(tǒng)
設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)信安四班付梓焱設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第1頁(yè)。設(shè)備模型LinuxKernal2.5之前并沒(méi)有統(tǒng)一的模型表示總線、驅(qū)動(dòng)、設(shè)備之間的關(guān)系,隨著Linux支持的設(shè)備越來(lái)越多,有效管理的統(tǒng)一模型是必然的產(chǎn)物初衷:省電。有一個(gè)全局的設(shè)備表可以在休眠時(shí)方便地找到所有設(shè)備,掛起或者喚醒,實(shí)現(xiàn)動(dòng)態(tài)的電源管理高效地管理各種設(shè)備設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第2頁(yè)。Kobject結(jié)構(gòu)structkobject{constchar*name;structlist_headentry;structkobject*parent;structkset*kset;structkobj_type*ktype;structkernfs_node*sd;structkrefkref;組成設(shè)備模型的最小單元本身沒(méi)有特殊作用,但是可以嵌入更大的對(duì)象中如bus,devices,drivers等數(shù)據(jù)結(jié)構(gòu)中設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第3頁(yè)。Kobject結(jié)構(gòu)structkobject{constchar*name;structlist_headentry;structkobject*parent;structkset*kset;structkobj_type*ktype;structkernfs_node*sd;//sys文件信息structkrefkref;名稱(chēng)設(shè)備模型樹(shù)中對(duì)應(yīng)的父Object引用計(jì)數(shù)指向設(shè)備對(duì)應(yīng)的Kset設(shè)備類(lèi)型設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第4頁(yè)。structkobj_type*ktype;Ktype表示對(duì)象的類(lèi)型Structkobj_type{Void(*release)(structkobject*)Structsysfs_ops*sysfs_ops;Structattribute**default_attrs;}注銷(xiāo)函數(shù)指針用于釋放Kobject占用的資源指向如何讀寫(xiě)的函數(shù)指針Show()把指定的屬性值存入buffer中,返回給用戶空間Store()儲(chǔ)存用戶空間傳入的屬性值Kobject的屬性列表每個(gè)屬性在sysfs文件系統(tǒng)中表示成一個(gè)文件設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第5頁(yè)。structkrefkref;通過(guò)Kerf實(shí)現(xiàn)引用計(jì)數(shù)管理。提供兩個(gè)函數(shù)kobject_get()kobject_put()分別表示增加和減少引用計(jì)數(shù)當(dāng)引用計(jì)數(shù)為0時(shí),對(duì)該對(duì)象使用的資源進(jìn)行釋放,先調(diào)用Ktype中的release函數(shù),釋放資源,然后調(diào)用kobject_put函數(shù)減少對(duì)應(yīng)父Object的引用計(jì)數(shù)。設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第6頁(yè)。structkset*kset;Kset是具有相同類(lèi)型的Kobject的集合,Kobject表示葉子節(jié)點(diǎn),Kset表示非葉子節(jié)點(diǎn),形成樹(shù)狀的結(jié)構(gòu)創(chuàng)建Kobject之后,將該kobject放入Kset集合中,完成Kobject的初始化把kobject的kset指針指向目標(biāo)kset將kobject對(duì)象掛載到kset的list鏈中,增加父結(jié)構(gòu)中的引用計(jì)數(shù)Kset優(yōu)先權(quán)比Ktype高,Kobject先在Kset中尋找找到所屬的Ktype,然后將Kobject的Kobj_type指定成Kset中的Kobject除非沒(méi)有定義Kset,才會(huì)用kobj_type建立關(guān)系設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第7頁(yè)。structkset*kset;StructKset{Structkobj_type *kype;//設(shè)備類(lèi)型Structlist_head list;//指向該kset所有Kobject的鏈表Spinlock_t list_lock;//自旋鎖Structkobject kobj;//父Object,用于維護(hù)引用計(jì)數(shù)Structkset_uevent_ops *uevent_ops;}設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第8頁(yè)。KSetKsetKobjectKobjectKobjectKobject設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第9頁(yè)。總線BUS總線:處理器與一個(gè)或多個(gè)設(shè)備之間的通道。可以是物理的,也可以是虛擬的連接在總線上的設(shè)備也可以是虛擬的設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第10頁(yè)。structbus_type{constchar*name;/*總線類(lèi)型名稱(chēng)*/structmodule*owner;/*指向模塊的指針(如果有),此模塊負(fù)責(zé)操作這個(gè)總線*/structksetsubsys;/*與該總線相關(guān)的子系統(tǒng)*/structksetdrivers;/*總線驅(qū)動(dòng)程序的kset*/structksetdevices;/*掛在該總線的所有設(shè)備的kset*/structklistklist_devices;/*掛接在該總線的設(shè)備鏈表*/structklistklist_drivers;/*與該總線相關(guān)的驅(qū)動(dòng)程序鏈表*/structblocking_notifier_headbus_notifier;structbus_attribute*bus_attrs;/*總線屬性*/structdevice_attribute*dev_attrs;/*設(shè)備屬性,指向?yàn)槊總€(gè)加入總線的設(shè)備建立的默認(rèn)屬性鏈表*/structdriver_attribute*drv_attrs;/*驅(qū)動(dòng)程序?qū)傩?/structbus_attributedrivers_autoprobe_attr;/*驅(qū)動(dòng)自動(dòng)探測(cè)屬性*/structbus_attributedrivers_probe_attr;/*驅(qū)動(dòng)探測(cè)屬性*/int(*match)(structdevice*dev,structdevice_driver*drv);//驅(qū)動(dòng)匹配。設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第11頁(yè)。int(*uevent)(structdevice*dev,structkobj_uevent_env*env);//添加環(huán)境變量。int(*probe)(structdevice*dev);//驅(qū)動(dòng)匹配。int(*remove)(structdevice*dev);//設(shè)備移除時(shí)調(diào)用。void(*shutdown)(structdevice*dev);//關(guān)機(jī)時(shí)調(diào)用。int(*suspend)(structdevice*dev,pm_message_tstate);//掛起(投入休眠)時(shí)調(diào)用。int(*resume)(structdevice*dev);//恢復(fù)時(shí)調(diào)用。conststructdev_pm_ops*pm;//設(shè)備電源管理。structbus_type_private*p;//私有數(shù)據(jù)。完全由驅(qū)動(dòng)核心初始化并使用。
}設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第12頁(yè)。structdevice{structklistklist_children;structklist_nodeknode_parent;/*nodeinsiblinglist*/structklist_nodeknode_driver;structklist_nodeknode_bus;structdevice*parent;/*設(shè)備的"父"設(shè)備,該設(shè)備所屬的設(shè)備,通常一個(gè)父設(shè)備是某種總線或者主控制器.如果parent是NULL,則該設(shè)備是頂層設(shè)備,較少見(jiàn)*/structkobjectkobj;/*代表該設(shè)備并將其連接到結(jié)構(gòu)體系中的kobject;注意:作為通用的規(guī)則,device->kobj->parent應(yīng)等于device->parent->kobj*/charbus_id[BUS_ID_SIZE];/*在總線上唯一標(biāo)識(shí)該設(shè)備的字符串;例如:PCI設(shè)備使用標(biāo)準(zhǔn)的PCIID格式,包含:域,總線,設(shè)備,和功能號(hào).*/structdevice_type*type;unsignedis_registered:1;unsigneduevent_suppress:1;設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第13頁(yè)。structdevice_driver{ constchar *name; structbus_type *bus; structmodule *owner; constchar *mod_name; /*usedforbuilt-inmodules*/ boolsuppress_bind_attrs; /*disablesbind/unbindviasysfs*/ enumprobe_typeprobe_type; conststructof_device_id *of_match_table; conststructacpi_device_id *acpi_match_table;設(shè)備分配數(shù)據(jù)結(jié)構(gòu)全文共15頁(yè),當(dāng)前為第14頁(yè)。 int(*probe)(structdevice*dev); int(*remove)(structdevice*dev); void(*shutdown)
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新生兒復(fù)蘇培訓(xùn)制度
- 教職工績(jī)效考核細(xì)則制度
- 國(guó)際關(guān)系學(xué)院雙語(yǔ)教學(xué)課程建設(shè)項(xiàng)目申請(qǐng)表
- 罕見(jiàn)藥藥源性疾病的防控策略
- 2026安徽省面向中國(guó)農(nóng)業(yè)大學(xué)選調(diào)生招錄備考題庫(kù)有答案詳解
- 2026上半年海南事業(yè)單位聯(lián)考瓊海市招聘事業(yè)單位工作人員167人備考題庫(kù)(1號(hào))及一套參考答案詳解
- 2026年1月廣東廣州市幼兒師范學(xué)校附屬幼兒園招聘編外聘用制專(zhuān)任教師2人備考題庫(kù)及答案詳解(考點(diǎn)梳理)
- 罕見(jiàn)腫瘤的個(gè)體化治療療效預(yù)測(cè)模型構(gòu)建與個(gè)體化治療路徑
- 2026安徽蕪湖臻鑫智鎂科技有限公司招聘2人備考題庫(kù)完整參考答案詳解
- 設(shè)備租賃行業(yè)財(cái)務(wù)制度
- 光伏電站安全事故案例
- 2025年山東省濟(jì)寧市中考道德與法治試卷(含答案)
- 重癥肺炎患者護(hù)理要點(diǎn)回顧查房
- DBJ51T 037-2024 四川省綠色建筑設(shè)計(jì)標(biāo)準(zhǔn)
- 土壤碳庫(kù)動(dòng)態(tài)變化-洞察及研究
- 彩鋼瓦廠買(mǎi)賣(mài)合同協(xié)議書(shū)
- 水泵無(wú)人值守管理制度
- 醫(yī)院建設(shè)中的成本控制措施
- (高清版)DG∕TJ 08-2289-2019 全方位高壓噴射注漿技術(shù)標(biāo)準(zhǔn)
- 反恐應(yīng)急通信技術(shù)-全面剖析
- 控制圖的培訓(xùn)
評(píng)論
0/150
提交評(píng)論