设备初始化及/sys下devices等目录的建立

设备初始化和总线初始化类似,需要建立devices_kset和/sys/devices目录。
不同点是设备初始化还会建立/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目录之后的数据框图如下:

设备初始化及/sys下devices等目录的建立_第1张图片

你可能感兴趣的:(内核)