device_create创建设备节点分析

来源:互联网 发布:国内云计算市场份额 编辑:程序博客网 时间:2024/05/17 22:09

在驱动中经常可以看到类似下面的话:

adb_dev_class = class_create(THIS_MODULE, "adb");device_create(adb_dev_class, NULL, MKDEV(ADB_MAJOR, 0), NULL, "adb");
那么device_create调用什么函数创建设备节点,继续分析

struct device *device_create(struct class *class, struct device *parent,     dev_t devt, void *drvdata, const char *fmt, ...){va_list vargs;struct device *dev;va_start(vargs, fmt);dev = device_create_vargs(class, parent, devt, drvdata, fmt, vargs);va_end(vargs);return dev;}
分析device_create_vargs函数

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_create,也是利用device_register来创建设备节点。如果继续分析device_register的话可以得出,device_register调用device_add中的kobject_add来在sys目录下创建。sys和proc一样是虚拟文件系统,在2.6之后的内核,引入的用户空间mdev机制,会根据sys下的文件来创建设备节点。



阅读全文
0 0
原创粉丝点击