将字符串数组作为参数传递给 linux 内核模块
Passing string array to linux kernel module as parameter
有什么方法可以将字符串数组传递给内核模块吗?
我想这样传递:
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");
module_param_array(array,charp,&number_of_elements,0644);
期望 array
是 char *
的数组。您只需要将 static char array[5][10];
替换为 static char *array[5];
一个普通的命令 shell 例如 /bin/sh 会将 "string1","string2","string3"
视为一个单独的参数(假设你没有乱用 shell 的 IFS
变量)。内核的模块参数解析器会将其视为单个参数:string1,string2,string3
并使用逗号将其拆分为三个以 null 结尾的字符串。您的 char *array[5]
内容将用指向这些以空字符结尾的字符串的指针填充,并且您的 number_of_elements
将设置为逗号分隔字符串的数量。
有什么方法可以将字符串数组传递给内核模块吗? 我想这样传递:
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");
module_param_array(array,charp,&number_of_elements,0644);
期望 array
是 char *
的数组。您只需要将 static char array[5][10];
替换为 static char *array[5];
一个普通的命令 shell 例如 /bin/sh 会将 "string1","string2","string3"
视为一个单独的参数(假设你没有乱用 shell 的 IFS
变量)。内核的模块参数解析器会将其视为单个参数:string1,string2,string3
并使用逗号将其拆分为三个以 null 结尾的字符串。您的 char *array[5]
内容将用指向这些以空字符结尾的字符串的指针填充,并且您的 number_of_elements
将设置为逗号分隔字符串的数量。