例如:mknod /dev/en3 95
这样是创建一个设备节点,要创建多个的话:
mknod /dev/en3 95 0;\
mknod /dev/en3 95 1;\
这时候就会报错,在第二次创建的时候出现file exists。
6 个解决方案
#1
现在很多驱动都是自动创建节点的了。
LZ搜索下自动创建方面的内容, 把驱动注册部分的代码修改下,就不需要自动mknod了。
另 手动的话, mknod /dev/xx c 253 0 我一直使用的这样的方式,
c 代表字符型设备, 253 在/proc/devices中注册的主设备号, 0是第一个这样类型的设备。
LZ的方法没用过, 可以检查下mknod的写法。。
LZ搜索下自动创建方面的内容, 把驱动注册部分的代码修改下,就不需要自动mknod了。
另 手动的话, mknod /dev/xx c 253 0 我一直使用的这样的方式,
c 代表字符型设备, 253 在/proc/devices中注册的主设备号, 0是第一个这样类型的设备。
LZ的方法没用过, 可以检查下mknod的写法。。
#2
如果要同时创建多个同类型是设备你手动怎么创建?主设备一致,次级设备不一样
#3
326 raw_class = class_create(THIS_MODULE, "raw");
327 if (IS_ERR(raw_class)) {
328 printk(KERN_ERR "Error creating raw class.\n");
329 cdev_del(&raw_cdev);
330 ret = PTR_ERR(raw_class);
331 goto error_region;
332 }
333 raw_class->devnode = raw_devnode;
334 device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl");
335
这个linux内核中raw.c中自动创建设备文件节点的,你参考一下326行和334行
#4
另外raw_class的定义为:
static struct class *raw_class;
#5
我这么做过,但是还是没有在/dev/下创建成功设备文件,所以放弃打算手动创建...
#6
这两个函数应该是在_init里面使用的对吧?
#1
现在很多驱动都是自动创建节点的了。
LZ搜索下自动创建方面的内容, 把驱动注册部分的代码修改下,就不需要自动mknod了。
另 手动的话, mknod /dev/xx c 253 0 我一直使用的这样的方式,
c 代表字符型设备, 253 在/proc/devices中注册的主设备号, 0是第一个这样类型的设备。
LZ的方法没用过, 可以检查下mknod的写法。。
LZ搜索下自动创建方面的内容, 把驱动注册部分的代码修改下,就不需要自动mknod了。
另 手动的话, mknod /dev/xx c 253 0 我一直使用的这样的方式,
c 代表字符型设备, 253 在/proc/devices中注册的主设备号, 0是第一个这样类型的设备。
LZ的方法没用过, 可以检查下mknod的写法。。
#2
如果要同时创建多个同类型是设备你手动怎么创建?主设备一致,次级设备不一样
#3
326 raw_class = class_create(THIS_MODULE, "raw");
327 if (IS_ERR(raw_class)) {
328 printk(KERN_ERR "Error creating raw class.\n");
329 cdev_del(&raw_cdev);
330 ret = PTR_ERR(raw_class);
331 goto error_region;
332 }
333 raw_class->devnode = raw_devnode;
334 device_create(raw_class, NULL, MKDEV(RAW_MAJOR, 0), NULL, "rawctl");
335
这个linux内核中raw.c中自动创建设备文件节点的,你参考一下326行和334行
#4
另外raw_class的定义为:
static struct class *raw_class;
#5
我这么做过,但是还是没有在/dev/下创建成功设备文件,所以放弃打算手动创建...
#6
这两个函数应该是在_init里面使用的对吧?