解决 驱动创建设备节点时 权限为 root只读只写 的问题

上一篇做字符设备驱动时,创建的设备节点/dev/mycdev 为root用户root组,且权限为0600,这就导致一般的应用程序无法访问上网查询得知可通过udev自创规则来实现:创建设备节点时设置权限。

详情参考:http://blog.chinaunix.net/uid-23670869-id-2391638.html。


zhou@zhoupc:~$ cd /etc/udev/rules.d/

zhou@zhoupc:/etc/udev/rules.d$ ls
99-vmware-scsi-udev.rules  README

里面是一些以两位数字开头,以rules为后缀的规则文件,数字小的规则文件先执行。必须以sudo创建规则文件。

zhou@zhoupc:/etc/udev/rules.d$ sudo vim  99-my-udev.rules 

里面写入

KERNEL=="mycdev",MODE="0666"

其中 ==  号表示匹配,= 号表示赋值。KERNEL表示内核中看到的设备名称,也就是你在驱动里面设置的DEV_NAME。MODE表示要设置的权限。结合起来整句话就是,如果发现一个新的设备叫做“mycdev”的话,就把它的节点权限设置为“0666”。这样其他程序就能以普通权限来访问了。

KERNEL匹配的字符串可以是 sd* 这种类型的,代表匹配sd开头的设备。

配置前:

zhou@zhoupc:/etc/udev/rules.d$ ls
!  99-my-udev.rules.old  99-vmware-scsi-udev.rules  README

改后缀名后就不生效了。

zhou@zhoupc:~/lnxdrv$ sudo insmod mycdev.ko

zhou@zhoupc:~/lnxdrv$ ll /dev/mycdev 
crw------- 1 root root 250, 0  9月 10 21:19 /dev/mycdev
 

可以看到只有root用户可以RW

zhou@zhoupc:~/lnxdrv$ ./mycdevtst 
open error: Permission denied

这时普通程序尝试open /dev/mycdev时产生权限错误

zhou@zhoupc:/etc/udev/rules.d$ ls
!  99-my-udev.rules  99-vmware-scsi-udev.rules  README

加入规则

zhou@zhoupc:~/lnxdrv$ sudo insmod mycdev.ko 

zhou@zhoupc:~/lnxdrv$ ll /dev/mycdev 
crw-rw-rw- 1 root root 250, 0  9月 10 21:24 /dev/mycdev

可以看到权限已经变为其他用户RW

zhou@zhoupc:~/lnxdrv$ ./mycdevtst 
old data is 0
new data is 1
ioctl : new data is 90

普通权限也可以访问了


但是我还是觉得有缺点,毕竟还得手动添加规则,可能还不如直接在驱动里面更改权限来得快。

下一篇想用一个暴力点的办法解决,在网上实在找不到好点的解决办法




你可能感兴趣的:(解决 驱动创建设备节点时 权限为 root只读只写 的问题)