模块名称:params.ko
#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/kernel.h>
#include <linux/stat.h>
MODULE_LICENSE("Dual BSD/GPL");
static char *mystring = "this is my char string";
module_param(mystring, charp, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(mystring, "A char string");
static int __init params_init(void)
{
printk("驱动已加载\n");
printk(" 我的字符串(mystring): %s\n", mystring);
return 0;
}
static void __exit params_exit(void)
{
printk("驱动已卸载\n");
}
module_init(params_init);
module_exit(params_exit);
这是一个Linux内核模块,它定义了一个静态字符指针变量`mystring`,并使用`module_param()`函数将其注册为可由用户空间修改的内核参数。驱动程序提供了两个函数:`params_init()`和`params_exit()`,分别在加载和卸载模块时被调用。这个驱动程序还使用了一些Linux内核头文件库和`printk()`函数用于输出信息。当我使用默认设置时,在加载驱动程序时可以看到"this is my char string"。但是,如果我使用命令行传递带有空格的字符串,则会出现以下错误:
Ex1:
# insmod ./params.ko mystring="Hello World"
insmod: error inserting './params.ko': -1 Unknown symbol in module
dmesg显示了以下信息:
params: Unknown parameter 'World'
Ex2:
# insmod ./params.ko mystring="HelloWorld"
如果我使用没有空格的“HelloWorld”,则不会出现问题来显示字符串。
我还尝试使用\或''来查看是否可以忽略空格以避免该空间,但失败了。
想请教任何知道如何将包含空格的字符串传递给内核模块的人?
谢谢并感谢您的帮助。
# insmod: error inserting './params.ko': -1 Unknown symbol in module
dmesg输出:params: Unknown parameter 'World'
- rickhau