Dynamic Sysfs Attribute Files

Matt Davis mattdavis9 at gmail.com
Wed Apr 24 18:24:56 EDT 2013


> Date: Wed, 24 Apr 2013 15:39:42 +0200
> From: Tobias Boege <tobias at gambas-buch.de>
>
> 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.

Tobi,
That is exactly what I am looking for; that and the fact no one
explicitly flamed me for my idea.

-Matt



More information about the Kernelnewbies mailing list