设备初始化和总线初始化类似,需要建立devices_kset和/sys/devices目录。
不同点是设备初始化还会建立/sys/dev、/sys/dev/block和/sys/dev/char目录
代码如下,kset_create_and_add()的分析见上篇文章,
kobject_create_and_add比较简单这里不再分析了,只讲下第二个参数,
如果是NULL,表示在/sys下建立目录;不为空,则会在相应目录下建立目录。
这篇文章和上篇文章分别介绍了总线和设备的初始化,下篇文章会分析具体的platform总线和设备,会分析
bus_register()函数和device_register()函数,并画出对应的结构图。
不同点是设备初始化还会建立/sys/dev、/sys/dev/block和/sys/dev/char目录
代码如下,kset_create_and_add()的分析见上篇文章,
kobject_create_and_add比较简单这里不再分析了,只讲下第二个参数,
如果是NULL,表示在/sys下建立目录;不为空,则会在相应目录下建立目录。
本例是在/sys/dev下建立两个目录,因为第二个参数dev_kobj代表/sys/dev目录。
int __init devices_init(void)
{
devices_kset = kset_create_and_add("devices", &device_uevent_ops, NULL);
if (!devices_kset)
return -ENOMEM;
dev_kobj = kobject_create_and_add("dev", NULL);
if (!dev_kobj)
goto dev_kobj_err;
sysfs_dev_block_kobj = kobject_create_and_add("block", dev_kobj);
if (!sysfs_dev_block_kobj)
goto block_kobj_err;
sysfs_dev_char_kobj = kobject_create_and_add("char", dev_kobj);
if (!sysfs_dev_char_kobj)
goto char_kobj_err;
return 0;
char_kobj_err:
kobject_put(sysfs_dev_block_kobj);
block_kobj_err:
kobject_put(dev_kobj);
dev_kobj_err:
kset_unregister(devices_kset);
return -ENOMEM;
}
这篇文章和上篇文章分别介绍了总线和设备的初始化,下篇文章会分析具体的platform总线和设备,会分析
bus_register()函数和device_register()函数,并画出对应的结构图。
建立devices目录之后的数据框图如下: