(一)裝置結構模型_低階部分(Kobject、Kset、Ktype)
阿新 • • 發佈:2019-01-01
低階部分(Kobject、Kset、Ktype)
深入,並且廣泛
-沉默犀牛
我打算把裝置結構模型分為兩部分來寫,這也是在LDD3中的講解順序:
1.低階部分,分析Kobject、Kset、Ktype
2.高階部分,分析匯流排、裝置、驅動如何聯絡
首先以一張圖介紹一下Kobject、kset、ktype的關係:
Kobject、Kset、Ktype三種結構體的詳細註釋都已經陳列在圖中,以下對三個結構體的功能做一些描述,如有錯誤,敬請指出:
1.kobject這個資料結構的誕生是為了方便核心管理大量的裝置的,如何幫助管理呢? kobject: “如果有裝置用我,那我的引用計數+1;如果沒有人有用我,也就是我的引用計數為0的時候,那我就被釋放掉” 2.kset是(嵌入相同型別結構的)kobject的集合,parent是kobject的父節點 3.ktype負責把(引用計數為0的)kobject釋放掉,也負責給kobject附屬性及其操作方法
sysfs就是根據kobject來生成的,以下結合sysfs,來解釋上述三點描述:
1.kobject不會單獨使用,而是內嵌於其他大型結構體中,比如struct device 、struct device_driver等 2.sysfs中的層級目錄,就是根據kobject中的kset和parent來形成父-子目錄層級的 3.只有(引用計數不為0的)kobject才能出現在sysfs中,這裡我曾經有個疑問,比如sysfs中目錄分為3級,第3級(即最底級)的 檔案對應著它們各自的kobject(下稱為3-kobject),那第3級的目錄(也就是第2級)應該是3-kobject的kset或者parent, 為什麼它們也會出現在sysfs中呢?仔細一看才知道parent本身就是kobject結構體,而kset內部也包含這kobject結構體,這樣 它們就理所應當出現在sysfs中了 4.接著上面的例子,3級目錄對應著它們的kobject,這些kobject還是可以進去的,可以看到一些檔案一樣的東西,這些檔案就是 3-kobject->ktype中的default_attrs,對這些檔案還可以執行 cat、echo命令,當我執行這些命令的時候,真正起作用的就 是3-kobject->ktype中的sysfs_ops中的函式。
以上的描述,講清楚了 kobject的作用,和sysfs如何與這三個結構體對應。