個人對kobject的一點研究 4

2021-05-27 03:22:43 字數 2670 閱讀 4731

現在到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天,第三個人需...