This was originally asked on Stack Overflow, but it was closed for being off-topic. Hopefully this is the right forum for the question.
I'm writing a character device driver that exposes class and device attributes under sysfs. I'm using udev to make the devices that appear in /dev read/writable by a certain group, but I can't figure out how to make the sysfs attributes writable by the same group without a shell script.
$ 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 I've tried using udevadm info to match the KERNEL and SUBSYSTEM keys of the sysfs path to no effect. I've also found the udev_event and get_ownership fields of struct class; I haven't had luck with the former and the latter works for device attributes, but I have to hard code my_group's gid which is not ideal.
Here's an example of trying to find the right match keys for the class:
$ 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)" But the udev rule KERNEL=="my_class", GROUP="my_group" doesn't work.
Does udev only work with devices under /dev, or is there a way to apply the rules to sysfs attributes?