linux設(shè)備管理機制_第1頁
linux設(shè)備管理機制_第2頁
linux設(shè)備管理機制_第3頁
linux設(shè)備管理機制_第4頁
linux設(shè)備管理機制_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、linux 設(shè)備模型簡介設(shè)備模型簡介設(shè)備模型概述(1)Linux 2.6內(nèi)核最初為了應(yīng)付電源管理的需要,提出了一個設(shè)備模型來管理所有的設(shè)備。在物理上,外設(shè)之間是有一種層次關(guān)系的,比如把一個U盤插到筆記本上,實際上這個U盤是接在一個USB Hub上,USB Hub又是接在USB 2.0 Host Controller (EHCI)上,最終EHCI又是一個掛在PCI Bus上的設(shè)備。這里的一個層次關(guān)系是:PCI-EHCI-USB Hub-USB Disk。如果操作系統(tǒng)要進(jìn)入休眠狀態(tài),首先要逐層通知所有的外設(shè)進(jìn)入休眠模式,然后整個系統(tǒng)才可以休眠。因此,需要有一個樹狀的結(jié)構(gòu)可以把所有的外設(shè)組織起來。這

2、就是最初建立Linux設(shè)備模型的目的。設(shè)備模型概述(2)Linux設(shè)備模型給我們帶來的便利遠(yuǎn)不止如此。既然已經(jīng)建立了一個組織所有設(shè)備和驅(qū)動的樹狀結(jié)構(gòu),用戶就可以通過這棵樹去遍歷所有的設(shè)備,建立設(shè)備和驅(qū)動程序之間的聯(lián)系,根據(jù)類型不同也可以對設(shè)備進(jìn)行歸類,這樣就可以更清晰的去“看”這顆枝繁葉茂的大樹。另外,Linux驅(qū)動模型把很多設(shè)備共有的一些操作抽象出來,大大減少了重復(fù)造輪子的可能。同時Linux設(shè)備模型提供了一些輔助的機制,比如引用計數(shù),讓開發(fā)者可以安全高效的開發(fā)驅(qū)動程序。達(dá)成了以上這些好處之后,我們還得到了一個非常方便的副產(chǎn)品,這就是sysfs-一個虛擬的文件系統(tǒng)。sysfs給用戶提供了一個

3、從用戶空間去訪問內(nèi)核設(shè)備的方法,它在Linux里的路徑是/sys。這個目錄并不是存儲在硬盤上的真實的文件系統(tǒng),只有在系統(tǒng)啟動之后才會建起來sysfs文件系統(tǒng) sysfs文件系統(tǒng)是一個類似于proc文件系統(tǒng)的特殊文件系統(tǒng),用于將系統(tǒng)中的設(shè)備組織成層次結(jié)構(gòu),并向用戶模式程序提供詳細(xì)的內(nèi)核數(shù)據(jù)結(jié)構(gòu)信息,從而時用戶空間程序可以設(shè)置內(nèi)核屬性 Linux 統(tǒng)一設(shè)備模型又是以兩種基本數(shù)據(jù)結(jié)構(gòu)進(jìn)行樹型和鏈表型結(jié)構(gòu)組織的: kobject與kset內(nèi)核kobject(1)sysfs是內(nèi)核提供給用戶的一個設(shè)備層次結(jié)構(gòu)的視圖,而內(nèi)核設(shè)備層次構(gòu)建的最基本單元就是kobject類似于C+中的基類,它嵌入于更大的對象的對

4、象中-所謂的容器-用來描述設(shè)備模型的組件。如bus,devices, drivers 都是典型的容器。這些容器就是通過kobject連接起來了,形成了一個樹狀結(jié)構(gòu)。這個樹狀結(jié)構(gòu)就與sysfs向?qū)?yīng)。內(nèi)核kobject(2)kobject主要提供三方面功能:1) 引用計數(shù)2) sysfs表示:每個在內(nèi)核中注冊的kobject都對應(yīng)于sysfs文件系統(tǒng)的一個目錄,目錄下的文件代表kobject的屬性3) 設(shè)備熱插拔內(nèi)核kobject(3)struct kobject const char*name;/名稱struct list_headentry;/同類kobjects的鏈表struct kobj

5、ect*parent;/父對象struct kset*kset;/所屬集合struct kobj_type*ktype;/對象類型struct sysfs_dirent*sd;/sysfs文件系統(tǒng)中與該對象對應(yīng)的文件節(jié)點路徑指針struct krefkref;/引用計數(shù)unsigned int state_initialized:1;unsigned int state_in_sysfs:1;unsigned int state_add_uevent_sent:1;unsigned int state_remove_uevent_sent:1;unsigned int uevent_suppr

6、ess:1;內(nèi)核kobject(4) 每個kobject都會有一個屬性kobj_typestruct kobj_typevoid (*release)(struct kobject *kobj); /釋放kobject和其他占用資源的函數(shù)struct sysfs_ops *sysfs_ops;/操作屬性的方法struct attribute *default_attrs; /屬性數(shù)組; struct attributeconst char *name;/屬性的名稱struct module *owner;/只用擁有該屬性的模塊,已經(jīng)不常使用mode_t mode;/屬性讀寫權(quán)限;struct

7、sysfs_opsssize_t (*show)(struct kobject *,struct attribute *,char *);/讀屬性操作函數(shù)ssize_t (*store)(struct kobject *,struct attribute *,const char *,size_t); /寫屬性操作函數(shù);內(nèi)核kobject(5)添加屬性文件:int sysfs_create_file(struct kobject *kobj,const struct attribute *attr);刪除屬性文件:void sysfs_remove_file(struct kobject *k

8、obj , const struct attribute *attr);內(nèi)核kobject(6)內(nèi)核ksetstruct kset struct list_head list;/*連接所包含的kobject對象的鏈表首地址*/ spinlock_t list_lock;/*用于避免競態(tài)的自旋鎖*/ struct kobject kobj; /*嵌入的kobject*/ struct kset_uevent_ops * uevent_ops; /*指向熱插拔操作表的指針*/;kobject通過kset組織成層次化結(jié)構(gòu),kset是具有相同類型的kobject的集合。所有屬于同一個ksets對象的parent都指向該ksets的kobject。kset最重要的是建立上層(sub-system)和下層的(k

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論