一.devfs 裝置檔案系統(過時的系統).主要特點如下:
1.可以通過程式在裝置初始化時在/dev目錄下建立裝置檔案,解除安裝裝置時將它刪除。
2. 裝置驅動程式可以指定裝置名、所有者和許可權位,使用者空間程式仍可以修改所有者和許可權位。
3. 不再需要為裝置驅動程式分配主裝置號以及處理次裝置號,在程式中可以直接給register_chrdev()傳遞0 主裝置號以動態獲得可用的主裝置號,並在
devfs_register()中指定次裝置號。
驅動程式應呼叫下面這些函式來進行裝置檔案的建立和刪除工作。
/*建立裝置目錄*/
devfs_handle_t devfs_mk_dir(devfs_handle_t dir, const char *name, void*info);
/*建立裝置檔案*/
devfs_handle_t devfs_register(devfs_handle_t dir, const char *name,unsigned int flags, unsigned int major, unsigned int minor, umode_t mode, void*ops,void *info);
/*撤銷裝置檔案*/
void devfs_unregister(devfs_handle_t de);
二. udev 裝置檔案系統
udev 完全在使用者態工作,利用裝置加入或移除時核心所傳送的熱插拔事件(hotplugevent)來工作。在熱插拔時,裝置的詳細資訊會由核心輸出到位於/sys的sysfs檔案系統。
udev的裝置命名策略、許可權控制和事件處理都是在使用者態下完成的,它利用sysfs中的資訊來進行建立裝置檔案節點等工作.由於 udev根據系統中硬體裝置的狀態動態更新裝置檔案,進行裝置檔案的建立和刪除等,因此,在使用udev後,/dev目錄下就會只包含系統中真正存在的裝置了。
devfs 與udev的另乙個顯著區別在於:採用devfs,當乙個並不存在的/dev節點被開啟的時候,devfs能自動載入對應的驅動,而udev則不能。這是因為udev的設計者
認為linux 應該在裝置被發現的時候載入驅動模組,而不是當它被訪問的時候。udev的設計者認為devfs 所提供的開啟/dev 節點時自動載入驅動的功能對於乙個配置正確
的計算機是多餘的。系統中所有的裝置都應該產生熱插拔事件並載入恰當的驅動,而udev能注意到這點並且為它建立對應的裝置節點。
sysfs檔案系統
sysfs 被看成是與proc、devfs 和devpty 同類別的檔案系統,該檔案系統是乙個虛擬的檔案系統,它可以產生乙個包括所有系統硬體的層級檢視,與提供程序和狀態資訊的proc檔案系統十分類似
sysfs 把連線在系統上的裝置和匯流排組織成為乙個分級的檔案,它們可以由使用者空間訪問,向使用者空間匯出核心資料結構以及它們的屬性。sysfs的乙個目的就是展示設
備驅動模型中各元件的層次關係,其頂級目錄包括block、device、bus、drivers、class、power 和firmware。
1.block 目錄包含所有的塊裝置
2.devices 目錄包含系統所有的裝置並根據裝置掛接的匯流排型別組織成層次結構
3.bus 目錄包含系統中所有的匯流排型別
4.drivers 目錄包括核心中所有已註冊的裝置驅動程式.
5.class 目錄包含系統中的裝置型別(如網絡卡裝置、音效卡裝置、輸入裝置等)
裝置-匯流排-類-驅動 從不同分類方式來描述裝置
kobject核心物件
kobject是linux 2.6 引入的裝置管理機制,在核心中由kobject結構體表示,這個資料結構使所有裝置在底層都具有統一的介面。kobject提供了基本的物件管理能力,
是構成linux 2.6 裝置模型的核心結構,每個在核心中註冊的kobject 物件都對應於sysfs檔案系統中的乙個目錄。
kobject 結構體
1 struct kobject
2 ;核心通過kobject 的kref 成員實現物件引用計數管理,且提供兩個函式kobject_get()、kobject_put()分別用於增加和減少引用計數,當引用計數為0 時,所有該物件使用的資源將被釋放.
kobject的ktype成員是乙個指向kobj_type結構的指標,表示該物件的型別。
碼清單5.7 所示,kobj_type 資料結構包含3 個成員:用於釋放kobject 占用的資源的
1 struct kobj_type
2 ;release()函式、指向sysfs操作的sysfs_ops 指標和sysfs檔案系統預設屬性列表
kobj_type 結構體種的sysfs_ops 包括store()和show()兩個成員函式,用於實現屬性的讀寫,**清單5.8 給出了sysfs_ops結構體的定義。當從使用者空間讀取屬性時,
show()函式將被呼叫,該函式將指定屬性值存入buffer 中返回給使用者,而store()函式用於儲存使用者通過buffer 傳入的屬性值。和kobject不同的是,屬性在sysfs 中呈現為
乙個檔案,而kobject則呈現為sysfs中的目錄
.kset核心物件集合
kobject 通常通過kset 組織成層次化的結構,kset 是具有相同型別的kobject 的集合,在核心中用kset資料結構表示
裝置檔案系統(DevFS)
devfs裝置檔案系統是linux 2.4乙個全新的功能,它主要為了有效的管理 dev目錄而開發的。我能知道,unix linux中所有的目錄都是層次結構,唯獨 dev目錄是一維結構 沒有子目錄 這就直接影響著訪問的效率及管理的方便與否。另外,dev目錄下的節點並不是按實際需要建立的,因此,該目錄下...
udev裝置檔案系統
1.udev是2.6.13之後linux採用的裝置檔案系統,之前採用devfs裝置檔案系統,不是一種檔案系統,而是生成裝置檔案系節點的方法。主要功能在於管理 dev下的裝置節點,並匯出資訊到系統中的 sysfs,它利用sysfs的匯出資訊建立裝置節點。在嵌入式系統中,是用的是mdev.主要優點在於 ...
dev loop與裝置檔案系統
摘要 在進行測試的時候,我們往往需要新建一些磁碟分割槽或者裝置等,此時對硬碟進行重新劃分往往不太方面。這種情況下,我們可以通過偽裝置來實現迴圈掛載,從而達到目的。本文主要為你講解什麼是迴圈掛載,什麼是虛擬裝置,裝置和檔案系統有什麼關係。在類unix系統中,dev loop 或稱vnd vnode d...