Передача строкового массива в модуль ядра Linux в качестве параметра - PullRequest
0 голосов
/ 21 марта 2019

есть ли способ передать массив строк в модуль ядра? Я хотел бы передать это так:

insmod mod.ko array="string1","string2","string3"

Мой код есть, но он не компилируется:

#include<linux/module.h>
#include<linux/moduleparam.h>

static int number_of_elements = 0;
static char array[5][10];
module_param_array(array,charp,&number_of_elements,0644);



static int __init mod_init(void)
{

    int i;
    for(i=0; i<number_of_elements;i++)
    {
        pr_notice("%s\n",array[i]);
    }

    return 0;
}

static void __exit mod_exit(void)
{
    pr_notice("End\n");
}

module_init(mod_init);
module_exit(mod_exit);

MODULE_AUTHOR("...");
MODULE_LICENSE("GPL");
MODULE_VERSION("1.0");

1 Ответ

0 голосов
/ 21 марта 2019

module_param_array(array,charp,&number_of_elements,0644); ожидает, что array будет массивом char *.Вам просто нужно заменить static char array[5][10]; на static char *array[5];

Обычная командная оболочка, такая как / bin / sh, будет обрабатывать "string1","string2","string3" как один параметр (при условии, что вы не возились с оболочкой IFS переменная).Синтаксический анализатор параметров модуля ядра будет видеть его как один параметр: string1,string2,string3 и использовать запятые, чтобы разделить его на три строки с нулевым символом в конце.Ваше содержимое char *array[5] будет заполнено указателями на эти строки с нулевым символом в конце, а для вашего number_of_elements будет задано количество строк, разделенных запятыми.

...