模块传参
#include <linux/module.h>#include <linux/moduleparam.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/stat.h>
#define DRIVER_AUTHOR "Foobar"#define DRIVER_DESC "A sample driver"
MODULE_LICENSE ("GPL");MODULE_AUTHOR (DRIVER_AUTHOR);MODULE_DESCRIPTION (DRIVER_DESC);MODULE_SUPPORTED_DEVICE ("TestDevice");
static short int myshort = 1;static int myint = 420;static long int mylong = 9999;static char *mystring = "blah";static int array[2]= {-1, -1};static int arr_argc = 0;
module_param (myshort, short, 0400);MODULE_PARM_DESC (myshort, "A short integer");
module_param (myint, int, 0400);MODULE_PARM_DESC (myint, "An integer");
module_param (mylong, long, 0000);MODULE_PARM_DESC (mylong, "A long integer");
module_param (mystring, charp, 0000);MODULE_PARM_DESC (mystring, "A character string");
module_param_array (array, int, &arr_argc, 0000);//module_param_array (array, int, arr_argc, 0000); //for kernel<2.6.10MODULE_PARM_DESC (array, "An array of integers");
static int __init hello_2_init (void){int i;
printk (KERN_INFO "myshort is a short integer: %hd\n", myshort);printk (KERN_INFO "myint is an integer: %d\n", myint);printk (KERN_INFO "mylong is a long integer: %ld\n", mylong);printk (KERN_INFO "mystring is a string: %s\n\n", mystring);
for (i=0; i<arr_argc; i++)printk (KERN_INFO "array[%d] = %d\n",i, array[i]);printk (KERN_INFO "Got %d arguments in array\n", arr_argc);
return 0;}
static void __exit hello_2_exit (void){printk (KERN_INFO "hello driver cleaned up\n");}
module_init (hello_2_init);module_exit (hello_2_exit);
- 定义变量
- 变量必须初始化,并使用static修饰
- 指定变量为模块参数
- module_param(变量名,变量类型,权限值);//如果传递字符串char *, 使用charp表示char *
- module_param_array(数组名, 数组元素类型, 数组大小(使用指针), 权限值);
- 为模块参数添加说明
- MODULE_PARM_DESC(变量名, 描述信息)
使用
insmod hello.ko 变量名=变量值 [,变量名=变量值 ]...
insmod hello.ko 数组名=元素1 [, 元素2]...
模块加载后, 在/sys/module下有对应的模块目录,模块目录下有有关模块的信息