Доступ к драйверу Linux через sysfs
я делаю небольшой модуль ядра, чтобы обеспечить доступ пользователя к некоторым функциям режима ядра только чипа ARMv7 (в частности, управление кэшем). Я читаю через Драйверы Устройств Linux Корбе, Рубини и Хартман. В нем они описывают, как сделать полный драйвер+прибор+автобус. Я вообще не хочу создавать водителя автобуса. На самом деле "драйвер", который я делаю, на самом деле не должен соответствовать определению устройства вообще - он неявно сопоставляется с процессором платформы. Может ли кто-нибудь объяснить мне:
- куда в sysfs должны идти мои атрибуты? Должно ли это быть в моей записи модуля под
/sysfs/modules/mymodule
?/sys/devices/platform
кажется многообещающим тоже, и так делает/sys/devices/system/cpu
. - если есть существующее место, где я должен положить мой
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()
на