GE002 — Garvis с параметрами
В этом упражнении мы создаём улучшенную версию драйвера garvis_greet,
добавляя в него параметр, который можно передавать при загрузке модуля.
Это важный этап: теперь мы можем настраивать поведение драйвера без перекомпиляции!
Цель
Научиться использовать module_param(), чтобы задать параметры модуля;
Познакомиться с тем, как эти параметры становятся доступными в sysfs;
Углубить понимание взаимодействия ядра с пользователем через виртуальные файлы.
Исходный код модуля
Создайте файл с именем: garvis_greet_with_params.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/moduleparam.h>
#include <linux/stat.h>
static int num = 1;
module_param(num, int, S_IRUGO);
MODULE_PARM_DESC(num, "Число приветствий от Гарвиса");
static int __init garvis_hello_init(void)
{
pr_info("Garvis приветствует вас из ядра Linux! (%d)\n", num);
return 0;
}
static void __exit garvis_hello_exit(void)
{
pr_info("Garvis с параметрами уходит: До встречи!\n");
}
module_init(garvis_hello_init);
module_exit(garvis_hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("DJ KonTakt");
MODULE_DESCRIPTION("Простейший драйвер с параметром");
Makefile
Убедитесь, что ваш Makefile содержит строку:
obj-m := garvis_greet_with_params.o
Компиляция и установка
make -C /path/to/linux M=$(pwd) modules
Загрузка драйвера:
sudo insmod garvis_greet_with_params.ko num=5
Проверка значения параметра:
cat /sys/module/garvis_greet_with_params/parameters/num
Удаление:
sudo rmmod garvis_greet_with_params
Ожидаемый вывод (dmesg)
Garvis приветствует вас из ядра Linux! (5)
Garvis с параметрами уходит: До встречи!
Разъяснения для новичков
module_param— это макрос, который создаёт переменную-параметр;S_IRUGOозначает: все пользователи могут читать значение через sysfs;После загрузки, Linux автоматически создаёт файл /sys/module/garvis_greet_with_params/parameters/num, где можно прочитать значение;
Этот механизм часто используется в драйверах, чтобы позволить пользователю задать, например, ID устройства, число повторов, скорость, и т.д.
Советы для профессионалов
Вы можете использовать и другие типы: bool, charp, long и массивы;
Также можно комбинировать параметры с функцией param_set_* / param_get_* для продвинутой логики;
Параметры влияют только на загружаемый модуль, не влияют на уже работающий код после insmod.
Видео: Garvis с параметром
Это видео — пошаговое руководство по созданию первого параметризуемого драйвера Linux. Вы увидите:
где и как объявить параметр;
как проверить его в dmesg и sysfs;
как передать новое значение при insmod.
Подходит как для новичков, так и для программистов, которые хотят практиковаться на Raspberry Pi.
Если готов, я могу также помочь создать .demo скрипт или ge003_*.rst — следующий шаг?