=============================== GE002 — Garvis с параметрами =============================== В этом упражнении мы создаём улучшенную версию драйвера ``garvis_greet``, добавляя в него параметр, который можно передавать при загрузке модуля. Это важный этап: теперь мы можем **настраивать поведение драйвера без перекомпиляции**! Цель ==== - Научиться использовать `module_param()`, чтобы задать параметры модуля; - Познакомиться с тем, как эти параметры становятся доступными в `sysfs`; - Углубить понимание взаимодействия ядра с пользователем через виртуальные файлы. Исходный код модуля ===================== Создайте файл с именем: ``garvis_greet_with_params.c`` .. code-block:: c #include #include #include #include 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 содержит строку: .. code-block:: make obj-m := garvis_greet_with_params.o Компиляция и установка ======================= .. code-block:: bash make -C /path/to/linux M=$(pwd) modules Загрузка драйвера: .. code-block:: bash sudo insmod garvis_greet_with_params.ko num=5 Проверка значения параметра: .. code-block:: bash cat /sys/module/garvis_greet_with_params/parameters/num Удаление: .. code-block:: bash sudo rmmod garvis_greet_with_params Ожидаемый вывод (dmesg) ========================= .. code-block:: text 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` — следующий шаг?