module_param
是Linux内核模块编程中用于定义模块参数的宏
module_param
定义简单类型的参数:#include<linux/module.h>
#include<linux/kernel.h>
static int my_param = 0;
module_param(my_param, int, S_IRUGO);
MODULE_PARM_DESC(my_param, "A sample integer parameter");
这里,我们定义了一个名为my_param
的整数参数,并将其默认值设置为0。S_IRUGO
表示该参数可以被读取。MODULE_PARM_DESC
用于提供参数的描述信息。
module_param_array
定义数组类型的参数:#include<linux/module.h>
#include<linux/kernel.h>
static int my_params[3] = {0, 0, 0};
static int num_params = 3;
module_param_array(my_params, int, &num_params, S_IRUGO);
MODULE_PARM_DESC(my_params, "An array of sample integer parameters");
这里,我们定义了一个名为my_params
的整数数组参数,包含3个元素。num_params
变量用于存储数组的大小。module_param_array
宏的第四个参数同样表示该参数可以被读取。
当模块加载时,可以通过命令行参数传递给模块。例如,如果你的模块名为my_module
,可以使用以下命令加载模块并传递参数:
insmod my_module.ko my_param=42
在模块的init
函数中,可以访问这些参数:
#include<linux/module.h>
#include<linux/kernel.h>
static int my_param = 0;
module_param(my_param, int, S_IRUGO);
MODULE_PARM_DESC(my_param, "A sample integer parameter");
static int __init my_module_init(void) {
printk(KERN_INFO "my_param: %d\n", my_param);
return 0;
}
static void __exit my_module_exit(void) {
printk(KERN_INFO "my_module exit\n");
}
module_init(my_module_init);
module_exit(my_module_exit);
在这个例子中,当模块加载时,my_param
的值将被设置为传递的参数值(在本例中为42)。然后,在my_module_init
函数中,我们可以访问并打印这个值。
总之,module_param
和module_param_array
宏使得在Linux内核模块中定义和使用参数变得简单。在实际开发中,根据需要合理地使用这些宏,可以提高模块的灵活性和可配置性。