2011-10-12 4 views
7

Я создаю небольшой модуль ядра, чтобы предоставить доступ к пространству пользователя для некоторых функций только для ядра чипа ARMv7 (в частности, для управления кешем). Я читаю через драйверы устройств Linux от Corbet, Rubini и Hartman. В нем описывается, как сделать полный драйвер + устройство + шина. Я вообще не хочу создавать драйвер шины. Фактически, «драйвер», который я создаю, на самом деле не обязательно должен соответствовать определению устройства, он неявно соответствует процессору платформы. Может кто-нибудь объяснить мне:Доступ к Linux-драйверам через sysfs

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

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

ответ

8

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

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

Возможно, есть другие драйверы платформы, которые определяют атрибуты (поиск sysfs_create_group), если вам нужны другие примеры. Надеюсь это поможет!

+0

Я посмотрю на драйвер coretemp.c. Благодаря! –

+0

Обновление - модуль coretemp был идеальным шаблоном. Я получил некоторые атрибуты sysfs, которые работают довольно хорошо. Еще раз спасибо. –

Смежные вопросы