module_param 用于动态开启/关闭 驱动打印信息
1.定义模块参数的方法:
module_param(name, type, perm);
其中,name:表示参数的名字; type:表示参数的类型; perm:表示参数的访问权限;
type参数设定的类型和perm的访问权限具体数值数值请参考内核定义。
2、可以在insmod(装载模块)的时候为参数指定值,如果没有指定则使用默认值
static int num=10; module_param(num,int,S_IRUGO); static int hello_init(void) { printk("Hello module init./n"); printk("num=%d/n",num); return 0; } static void hello_exit(void) { printk("Goodbye module exit./n"); } module_init(hello_init); module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("a simple module"); MODULE_ALIAS("hello");
上面的num=10,则10是参数num的默认值。
保存为源文件hello.c, 编译生成hello.ko , 当我们使用insmod进行载入时, 使用
insmod hello.ko num=20
则可以 cat /sys/module/hello/parameters/num ,看到为 20
3、驱动的打印调试信息正常情况下我们并不希望看到,但是出现错误的情况下还是需要查看的,可使用以下方法:
static int num=0; module_param(num,int,S_IRUGO); /* 驱动运行中调用的操作 */ int fun_test() { if(num) { printk("This is a test!\n"); } } static int hello_init(void) { printk("Hello module init./n"); printk("num=%d/n",num); return 0; } static void hello_exit(void) { printk("Goodbye module exit./n"); } module_init(hello_init); module_exit(hello_exit); MODULE_LICENSE("Dual BSD/GPL"); MODULE_DESCRIPTION("a simple module"); MODULE_ALIAS("hello");
默认运行中不会出现打印信息“This is a test”。
查看 /sys/modules/hello/parameters/num参数,默认数值是0,
echo 1 > /sys/modules/hello/parameters/num #打开调试信息打印 echo 0 > /sys/modules/hello/parameters/num #关闭调试信息打印
以上操作即可以实现动态关闭/打开调试信息