这个问题最初是在Stack Overflow上提出的,但因偏离主题而被关闭。希望这是适合这个问题的论坛。
我正在编写一个字符设备驱动程序,该驱动程序公开 sysfs 下的类和设备属性。我正在使用 udev 使出现在/dev
某个组中的设备可读/可写,但我不知道如何在不使用 shell 脚本的情况下使 sysfs 属性可由同一组写入。
$ ls -l /dev/foobar
crw-rw---- 1 root my_group 241, 0 Jan 4 21:57 /dev/foobar # ownership applied by udev
$ ls -l /sys/class/my_class/wo_attribute
--w--w---- 1 root root 4096 Jan 4 22:02 wo_attribute # still in root group :/
$ ls -l /sys/class/my_class/my_device/rw_attribute
-rw-rw-r-- 1 root root 4096 Jan 4 22:13 rw_attribute # ditto
我尝试使用udevadm info
来匹配 sysfs 路径的 KERNEL 和 SUBSYSTEM 键,但没有效果。我还发现了udev_event
和get_ownership
字段struct class
;前者没有成功,而后者适用于设备属性,但我必须对my_group
的 gid 进行硬编码,这并不理想。
以下是尝试为该类别找到正确匹配键的示例:
$ udevadm info -a /sys/class/my_module
looking at device '/class/my_class':
KERNEL=="my_class"
SUBSYSTEM=="subsystem"
DRIVER==""
ATTR{wo_attribute}=="(not readable)"
looking at parent device '/class':
KERNELS=="class"
SUBSYSTEMS==""
DRIVERS==""
ATTRS{devcoredump/disabled}=="0"
ATTRS{drm/version}=="drm 1.1.0 20060810"
ATTRS{firmware/timeout}=="60"
ATTRS{gpio/export}=="(not readable)"
ATTRS{gpio/unexport}=="(not readable)"
ATTRS{my_class/wo_attribute}=="(not readable)"
但是 udev 规则KERNEL=="my_class", GROUP="my_group"
不起作用。
udev 是否仅适用于下的设备/dev
,或者是否有办法将规则应用于 sysfs 属性?