最近在学中断时,看到一个内核模块的例子中使用了module_param()这样一个宏来传递命令行输入的参数。一时好奇就细细搜罗了一下关于这个宏的详细用法,以后用得着的。
其实module_param这个宏的作用就类似用户态编程时通过mian()函数在命令行下传递参数一样。也就是说在内核模块中用module_param传递命令行下输入的参数。
这个函数定义在moduleparam.h中
#define (, , ) \
(, , , )
可以知道,module_param使用了3个参数:
name——变量名;
type——指代命令行参数的类型,模块支持的参数类型有很多,有byte, short, ushort, int, uint, long, ulong
charp(字符指针型),bool(一个布尔值,0/1,y/n,Y/N),invbool(颠倒了bool值,使得真值变成了false,false变成了true)
perm——指代操作权限,如果perm设为0,表示没有sysfs项,否则取值0444表示完全可读,取0644表示toot具有可写权限等等。也可以使得模块源文件内部的变量名和外部参数名是不相同的,这通过module_param_named
定义。在module_param_named()中,第一个name是外部可见的参数名,第二个name是源文件内部的全局变量,而
module_param()通过module_param_named()实现。
基本上就是这些了,可能不是很全面。最后写了一个小例子来体会一下:
加载:sudo insmod module_param.ko test_char=helianthus test_number=1并dmeg以后: