Передача параметров в модуль ядра

В прошлый раз мы написали, собрали и проверили наш первый модель ядра.
Мы уже умеем регистрировать модуль и выводить из него сообщения.
Теперь давайте рассмотрим как передавать параметры в модуль ядра 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

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий