Доступ к драйверу Linux через sysfs

я делаю небольшой модуль ядра, чтобы обеспечить доступ пользователя к некоторым функциям режима ядра только чипа ARMv7 (в частности, управление кэшем). Я читаю через Драйверы Устройств Linux Корбе, Рубини и Хартман. В нем они описывают, как сделать полный драйвер+прибор+автобус. Я вообще не хочу создавать водителя автобуса. На самом деле "драйвер", который я делаю, на самом деле не должен соответствовать определению устройства вообще - он неявно сопоставляется с процессором платформы. Может ли кто-нибудь объяснить мне:

  1. куда в sysfs должны идти мои атрибуты? Должно ли это быть в моей записи модуля под /sysfs/modules/mymodule? /sys/devices/platform кажется многообещающим тоже, и так делает /sys/devices/system/cpu.
  2. если есть существующее место, где я должен положить мой kobject/атрибуты, как подключить его к нему? Как мне получить необходимое kset? Все примеры, которые я видел, создают kset а затем ссылка на него из kobject - Я не видел API для запроса существующего имени kset?

Извините, если это просто невозможно очевидно, или если есть какой-то действительно простой и легко обнаруженный пример где-то, что я не обнаружил по какой-то причине. Кто-нибудь может пролить свет на это?

1 ответов


я не много работал с sysfs, но я нашел простой пример, который очень похож на то, что вы делаете (естественно, он также под рукой). Взгляните на arch/arm/mach-omap1/pm.c, в частности idle_show/ файловой системы sysfs. Он регистрируется (используя sysfs_create_file()) как /sys/power/sleep_while_idle и использует глобальную /sys/power kobj (определена в include/linux/kobject.h). Есть несколько других глобальных kobj, которые вы могли бы использовать, хотя я не думаю, что они подходят для вашего водителя.

это собираетесь стать водителем платформы? Как водитель, который не подходит ни под один автобус, это кажется хорошим. Драйверы платформы получают свой собственный каталог под /sys/devices / platform и могут иметь атрибуты там. Взгляните на drivers/hwmon/coretemp.c, имеющего temp1_crit, temp1_crit_alarm, temp1_input, etc. в качестве атрибутов. Это выглядит довольно просто: создайте атрибуты (возможно, с __ATTR()?), перечислите их все в массиве, определите attribute_group, зарегистрировать его в sysfs_create_group() на