解决 驱动创建设备节点时 权限为 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

普通权限也可以访问了


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

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




  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值