如何配置/dev设备权限?S_IRUSR权限异常及权限位差异咨询
DEVICE_ATTR权限异常与权限宏区别解析
为什么/dev节点权限是crw-------?
首先要明确:DEVICE_ATTR 宏是用来在sysfs文件系统中创建属性文件的,它的权限参数只影响sysfs中的文件,和 /dev 下的设备节点权限没有直接关系。
你看到的 /dev 节点权限 crw-------(对应八进制0600),来源通常是这两种情况:
- 手动执行
mknod命令创建设备节点时,若未通过-m参数指定权限,默认会使用0600的权限; - 由udev/mdev自动创建设备节点时,若没有自定义规则,会采用默认策略(通常就是
0600),需要修改udev规则文件(如/etc/udev/rules.d/*.rules)中的MODE字段来调整权限。
如果你的目标是让/dev节点变成只读,要么在mknod时加-m 0400参数,要么在udev规则里设置MODE="0400"。
S_IRUSR与S_IRUGO的区别
这两个都是POSIX权限宏,定义在<linux/stat.h>中:
S_IRUSR:仅授予文件所有者读权限,对应八进制的0400;S_IRUGO:同时授予所有者、所属组、其他所有用户读权限,它是S_IRUSR | S_IRGRP | S_IROTH的组合,对应八进制的0444。
另外补充:如果是用DEVICE_ATTR设置sysfs属性的只读权限,若你只希望所有者可读,用S_IRUSR;若希望所有用户都能读,就用S_IRUGO。注意如果同时指定了store函数(即第四个参数不为NULL),内核会结合权限位判断是否允许写操作——比如权限位只有S_IRUSR时,即使有store函数,普通用户也无法写入该sysfs属性。
内容的提问来源于stack exchange,提问作者Its me
相关产品推荐
相关产品推荐

