module_param
是Linux内核模块编程中用于定义模块参数的宏
- 使用
module_param
定义简单类型的参数:
#include#include 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#include 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#include 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内核模块中定义和使用参数变得简单。在实际开发中,根据需要合理地使用这些宏,可以提高模块的灵活性和可配置性。