В прошлый раз мы написали, собрали и проверили наш первый модель ядра.
Мы уже умеем регистрировать модуль и выводить из него сообщения.
Теперь давайте рассмотрим как передавать параметры в модуль ядра Linux.
Makefile будем использовать из предыдущей статьи.
В модуль ядра Linux можно передать параметр через командную строку при его запуске. Для того, чтобы это сработало нужно воспользоваться макросом module_param, который объявлен в файле moduleparam.h.
#include <linux/init.h> #include <linux/module.h> #include <linux/moduleparam.h> #include "blablamod.h" static int int_param; static char *str_param;
Ему нужно передать переменную в которую нужно положить данные, её тип и права. Права влияют прежде всего на видимость в файловой системе sysfs. Вы можете передать в ядро параметры типа int, short, charp.
/** * module_param - typesafe helper for a module/cmdline parameter * @value: the variable to alter, and exposed parameter name. * @type: the type of the parameter * @perm: visibility in sysfs. **/ module_param(int_param, int, 0); module_param(str_param, charp, 0);
Таким образом мы задали два параметра. Один целочисленный int, а другой — строковый.
Теперь дело за уже известными нам функциями загрузки и окончания работы модуля.
static int __init blablamod_init( void ) { printk(KERN_NOTICE "BlablaModule loaded!\n" ); printk(KERN_NOTICE "int_param=%i\n", int_param); printk(KERN_NOTICE "str_param=%s\n", str_param); return 0; } static void __exit blablamod_exit( void ) { printk(KERN_NOTICE "BlablaModule unloaded!\n" ); } module_init( blablamod_init ); module_exit( blablamod_exit );
Собираем командой make.
Пробуем запустить без указания параметров.
sudo insmod blablamod.ko
Смотрим вывод.
$ dmesg [ 5273.475539] BlablaModule loaded! [ 5273.475546] int_param=0 [ 5273.475550] str_param=(null)
Завершаем модуль и вызываем его с параметрами.
sudo rmmod blablamod sudo insmod blablamod.ko int_param=100 str_param="blablastring"
Опять смотрим вывод.
$ dmesg [ 5149.029678] BlablaModule loaded! [ 5149.029683] int_param=100 [ 5149.029686] str_param=blablastring
Код на GitHub