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內核模塊中定義和使用參數變得簡單。在實際開發中,根據需要合理地使用這些宏,可以提高模塊的靈活性和可配置性。