現在到bus_register了
註冊的引數platform_bus_type如下所示
struct bus_type platform_bus_type = ;
int bus_register(struct bus_type *bus)
//建立drivers目錄
priv->drivers_kset = kset_create_and_add("drivers", null,
&priv->subsys.kobj);
if (!priv->drivers_kset)
//初始化klist_devices和klist_drivers鍊錶
klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);
klist_init(&priv->klist_drivers, null, null);
//增加probe屬性檔案
retval = add_probe_files(bus);
if (retval)
goto bus_probe_files_fail;
//增加匯流排的屬性檔案
retval = bus_add_attrs(bus);
if (retval)
goto bus_attrs_fail;
pr_debug("bus: '%s': registered\n", bus->name);
return 0;
bus_attrs_fail:
remove_probe_files(bus);
bus_probe_files_fail:
kset_unregister(bus->p->drivers_kset);
bus_drivers_fail:
kset_unregister(bus->p->devices_kset);
bus_devices_fail:
bus_remove_file(bus, &bus_attr_uevent);
bus_uevent_fail:
kset_unregister(&bus->p->subsys);
kfree(bus->p);
out:
return retval;
}在kset_register-> kobject_add_internal中
//提取父物件,因為沒有設定父物件,所以為空
parent = kobject_get(kobj->parent);
//父容器存在則設定父物件,在上文中設定了父容器priv->subsys.kobj.kset = bus_kset
if (kobj->kset)
在retval = kset_register(&priv->subsys)完成之後platform在bus下的模型如下圖
有印象的話大家還記得在platform下面有兩個目錄devices和drivers吧~
現在就到這兩個目錄的註冊了
priv->devices_kset = kset_create_and_add("devices", null,&priv->subsys.kobj);
priv->drivers_kset = kset_create_and_add("drivers", null, &priv->subsys.kobj);
注意這兩條語句的頭部
priv->devices_kset = kset_create_and_add
priv->drivers_kset = kset_create_and_add
可以清楚的看到bus_type_private下的devices_kset, drivers_kset分別連線到了devices,drivers的kset上
現在來看kset_create_and_add("devices", null,&priv->subsys.kobj);
struct kset *kset_create_and_add(const char *name,
struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
//引數為"devices", null,&priv->subsys.kobj
return kset;
}在kset_create 中比較重要的操作為
kset->kobj.ktype = &kset_ktype //設定了ktype,為kset_ktype
kset->kobj.parent = parent_kobj; //設定了父物件,為priv->subsys.kobj,也就是platform_bus_type->p->subsys.kobj
kset->kobj.kset = null; //設定父容器為空
在kset_register中
//提取父物件
parent = kobject_get(kobj->parent); //在之前設定為了
//父容器存在則設定父物件,由於父容器為空,不執行以下**
if (kobj->kset)
至此, devices的模型就建立好了,drivers模型的建立和devices是一致的,只是名字不同而已,我就不複述了,建立好的模型如下
好了~ 到了這裡,bus,devices和platform的基礎模型就就建立好了,就等裝置來註冊了
個人對kobject的一點研究 5
在platform模型裝置的建立中,需要2個部分的註冊,驅動的註冊和裝置的註冊 platform device register test device platform driver register test driver 首先看platform device register 註冊引數為tes...
個人對kobject的一點研究 6
然後platform driver unregister,他的引數 test driver的結構如下 static struct platform driver test driver int platform driver register struct platform driver drv 從...
個人對專注力的一點看法
假設乙個人總共擁有10個點的注意力,那麼對於以下簡單的數學公式,可以幫助我們理解分散注意力對學習效率的影響。1.10 0 10 2.10 2 8 3.10 2 2 6 4.10 2 2 2 4 如果完成一項工作需要10個點的注意力,那麼對於第乙個人需要一天的時間,第二個人需要 1.25天,第三個人需...