设备初始化缩水篇(一)

来源:互联网 发布:网络共享 编辑:程序博客网 时间:2024/04/25 22:19

之前的都是直接复制,稍微翻译了一下,不过代码太乱,没有头绪,这里简化一下看看能否有一点头绪


int __init devices_init(void)
{
        devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);

        dev_kobj = kobject_create_and_add("dev", NULL);

        sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);

        sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);

}


int __init buses_init(void)
{
        bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);

        system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);

}


int __init classes_init(void)
{
class_kset = kset_create_and_add("class", NULL, NULL);

}


int __init firmware_init(void)
{
firmware_kobj = kobject_create_and_add("firmware", NULL);

}


int __init hypervisor_init(void)
{
hypervisor_kobj = kobject_create_and_add("hypervisor", NULL);

}


struct kset *kset_create_and_add(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
{

        kset = kset_create(name, uevent_ops, parent_kobj);
        error = kset_register(kset);

}


static struct kset *kset_create(const char *name,
const struct kset_uevent_ops *uevent_ops,
struct kobject *parent_kobj)
{

        kset->kobj.ktype = &kset_ktype;
        return kset;
}


static struct kset *kset_create(const char *name,
                const struct kset_uevent_ops *uevent_ops,
                struct kobject *parent_kobj)
{
        retval = kobject_set_name(&kset->kobj, "%s", name);

}


int kset_register(struct kset *k)
{

        kset_init(k);
        err = kobject_add_internal(&k->kobj);
        kobject_uevent(&k->kobj, KOBJ_ADD);

}


static int kobject_add_internal(struct kobject *kobj)
{

        error = create_dir(kobj);

}


static int create_dir(struct kobject *kobj)

{

        error = sysfs_create_dir_ns(kobj, kobject_namespace(kobj));

}


int sysfs_create_dir_ns(struct kobject *kobj, const void *ns)

{

        kn = kernfs_create_dir_ns(parent, kobject_name(kobj), S_IRWXU | S_IRUGO | S_IXUGO, kobj, ns);

}


struct kernfs_node *kernfs_create_dir_ns(struct kernfs_node *parent,
const char *name, umode_t mode,
void *priv, const void *ns)
{

        rc = kernfs_add_one(&acxt, kn);

}


int kernfs_add_one(struct kernfs_addrm_cxt *acxt, struct kernfs_node *kn)

{

        ret = kernfs_link_sibling(kn);

}


static int kernfs_link_sibling(struct kernfs_node *kn)
{

        rb_link_node(&kn->rb, parent, node);

}


看刚开始那几个devices_kset 、bus_kset 、class_kset 的parent都是NULL,所以在/sys目录下生成了devices、bus和class三个文件夹,而system_kset的parent为&devices_kset->kobj,所以在devices目录下生成了system目录

0 0
原创粉丝点击