- 论坛徽章:
- 0
|
有看到之前的一个帖子是这么回复
device_create和device_add的区别:
device_create() 创建一个设备并注册到内核驱动架构...
device_add() 注册一个设备到内核,,少了一个创建设备..
是不是说调用device_create会在/dev/目录下创建结点,device_add不会。
查看源码(2.6.30.4)
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
{
.....
dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs);
....
return dev;
}
struct device *device_create_vargs(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt,
va_list args)
{
struct device *dev = NULL;
int retval = -ENODEV;
if (class == NULL || IS_ERR(class))
goto error;
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (!dev) {
retval = -ENOMEM;
goto error;
}
dev->devt = devt;
dev->class = class;
dev->parent = parent;
dev->release = device_create_release;
dev_set_drvdata(dev, drvdata);
retval = kobject_set_name_vargs(&dev->kobj, fmt, args);
if (retval)
goto error;
retval = device_register(dev);
if (retval)
goto error;
return dev;
error:
put_device(dev);
return ERR_PTR(retval);
}
然后device_register会调用device_add。
我想知道,到底device_create相对于device_add多做了什么样的工作,才会让/dev下创建一个结点。
换句话说,就是udev是怎么工作的,如何自动添加设备结点。 |
|