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 — следующий шаг?