1. 程式人生 > >(一)裝置結構模型_低階部分(Kobject、Kset、Ktype)

(一)裝置結構模型_低階部分(Kobject、Kset、Ktype)

低階部分(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如何與這三個結構體對應。