Hello, I want my kernel module to dynamically add sysfs files for its corresponding device. Without going into detail, the attribute file will be named something like: /sys/class/myclass/mydev0/fileX where 'X' is an integer ranging from 1-256. I did not see anything in the api to allow this. I suppose I could just dynamically allocate an attribute, give it the unique name by tacking on my own integer, and pass that off to device_create_file(). However, I have not seen anywhere in the codebase where another module does this; I assume it is not allowed (or there is a better solution). The other solution (instead of sysfs) would be to add an ioctl, but this means the userland application must know the specific 'file' id to query. In the sysfs version above, the userland application can just grab the directory listing of /sys/class/myclaass/mydev0/ and see how many 'file' instances exist. -Matt
Hi, Take a look in: http://lxr.free-electrons.com/source/Documentation/filesystems/sysfs.txt You should consider the sysfs API like sysfs_create_dir(), sysfs_create_group(), sysfs_create_file() Best Regards, Rami Rosen http://ramirose.wix.com/ramirosen
On Wed, 24 Apr 2013, Matt Davis wrote:
Hello, I want my kernel module to dynamically add sysfs files for its corresponding device. Without going into detail, the attribute file will be named something like: /sys/class/myclass/mydev0/fileX where 'X' is an integer ranging from 1-256. I did not see anything in the api to allow this. I suppose I could just dynamically allocate an attribute, give it the unique name by tacking on my own integer, and pass that off to device_create_file(). However, I have not seen anywhere in the codebase where another module does this; I assume it is not allowed (or there is a better solution).
The other solution (instead of sysfs) would be to add an ioctl, but this means the userland application must know the specific 'file' id to query. In the sysfs version above, the userland application can just grab the directory listing of /sys/class/myclaass/mydev0/ and see how many 'file' instances exist.
-Matt
Hmm, the following led some places on my system: $ shopt -s extglob $ find /sys/!(module|kernel) -name "*[0-9]" ... /sys/firmware/acpi/interrupts/gpe00 /sys/firmware/acpi/interrupts/gpe01 /sys/firmware/acpi/interrupts/gpe02 /sys/firmware/acpi/interrupts/gpe03 /sys/firmware/acpi/interrupts/gpe04 /sys/firmware/acpi/interrupts/gpe05 ...
From a quick grep, the source _may_ be somewhere around
drivers/acpi/sysfs.c: 658 sprintf(buffer, "gpe%02X", i); Hope this helps you further. Regards, Tobi
participants (3)
-
Matt Davis -
Rami Rosen -
Tobias Boege