为什么struct cdev有kobject成员?

时间:2013-07-11 15:41:59

标签: linux linux-kernel linux-device-driver

struct cdevstruct kobject成员很奇怪,有没有人知道原因?

2 个答案:

答案 0 :(得分:2)

当kobjects嵌入其他结构中时,结构会接收kobject提供的标准化功能。最重要的是,结构的嵌入式kobject现在使结构成为对象层次结构的一部分。例如,cdev结构可通过父指针cdev->kobj.parent和列表cdev->kobj.entry

呈现在对象层次结构中

来源:Linux Kernel Development by Robert Love

答案 1 :(得分:2)

Sysfs是一个虚拟文件系统,它以分层模式描述系统可用的设备。这是通过使用struct kobj完成的。

struct kobject {
        char                    *k_name;
        char                    name[KOBJ_NAME_LEN];
        struct kref             kref;
        struct list_head        entry;
        struct kobject          *parent;
        struct kset             *kset;
        struct kobj_type        *ktype;
        struct dentry           *dentry;
};

对于任何驱动程序,需要将设备属性导出到sysfs  如果我们考虑像i2c_client spi_device(spi客户端)。我们在成员struct dev中有kobj将驱动程序属性导出到用户空间虚拟文件系统(Sysfs)。 Kobj结构成员处理所有操作,包括引用设备编号(主要/次要)和涉及打开,读/写,关闭等设备的文件操作。

在您的情况下cdev_init& cdev_add将在内部使用kobj执行上述操作。