代码思想:在驱动模块四件套基础上--定义承接参数--接收参数--打印出来
只能传字符串类型(charp)和整数类型。
代码:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("LCH");
#include <linux/moduleparam.h>
static char *args_string;
int args_int;
module_param(args_string, charp, 0664);//承接变量名/变量类型/权限
module_param(args_int, int, 0664);
static int __init hello_init(void)
{
printk(KERN_EMERG "sendArgs\n");
printk(KERN_EMERG "args_string is %s\n",args_string);
printk(KERN_EMERG "args_int is %d\n",args_int);
return 0;
}
static void __exit hello_exit(void)
{
}
//
module_init(hello_init);
module_exit(hello_exit);
运行效果:
a.没有传参数时:
b.错误传参:
c.正确传参:承接变量名=“传入的参数”
问题及解决:
1.编译报错:
error: negative width in bit-field '<anonymous>'
原因:
module_param(args_string, charp, 0664);
module_param(args_int, int, 0664);
模块权限给的太高了,调低就行
将0666改成0664。
2.无法rmmod驱动模块
现象:
原因:
这是根文件系统缺了一些目录
mkdir /lib/modules
mkdir /lib/5.3.18
新建这两个文件夹就能解决了。
3.卸载模块报错段错误
现象:
原因:
代码有语法错误,在卸载模块时,不应用__init
而应该用__exit
完