Я изучаю, как использовать sysfs в моих Linux-модулях, но мне сложно найти текущую документацию по этим темам. Linux Device Drivers 3rd Edition Книга, которую я использую, скорее всего устарела в этой области (например, структура class_device
полностью исчезнуть в текущих версиях Linux).
Я просто пытаюсь получить атрибут для отображения в соответствующем классе sysfs для моего модуля, что позволит мне прочитать значение переменной модуля из пространства ядра.
В моем коде у меня есть класс, который позволяет udev создавать устройство node в /dev/foo для моего модуля:
dev_t foo_dev;
alloc_chrdev_region(&foo_dev, 0, 1, "bar");
struct class *bar = class_create(THIS_MODULE, "bar");
device_create(bar, NULL, foo_dev, NULL, "foo");
struct cdev foo_dev_file;
cdev_init(&foo_dev_file, &fops); /* fops defined earlier */
cdev_add(&foo_dev_file, foo_dev, 1);
Когда я вставляю модуль, я получаю каталог классов sysfs, созданный и заполненный некоторыми атрибутами по умолчанию в /sys/class/bar/foo/. Как создать атрибуты, которые отображаются в этом новом каталоге?
У меня есть концепции довольно хорошо, я считаю, - создайте структуру атрибутов, определите функции sysfs_ops
и т.д. - моя проблема в том, что я не знаю, какую конкретную структуру ядра использовать (class_attribute
?), а также как сделать эти атрибуты появляться под правой sysfs.
Будет ли кто-нибудь указывать мне учебник или статью, описывающие процесс для текущих ядер Linux?