如何给内核模块传递参数
2011-07-18 15:57
295 查看
在编写内核模块的时候,经常需要在加载内核模块的时候传递一些参数,Linux内核提供了简单便捷的方法向内核模块传递参数。以2.6内核为例,内核模块设置参数需要用到module_param()宏,定义如下:
var_name:参数对应的变量名称;
var_type:参数变量类型;
var_mode:访问权限,与文件的访问权限定义方法相同;
还有一个宏MODULE_PARM_DESC()可以对指定的参数进行说明。
内核模块的参数使用不是很复杂,下面来个简单的例子说明一下:
1~3行:老三样,内核模块的头文件;
8~10行:定义了一个名为p_int的int类型的变量,设置为内核模块参数并且进行了参数说明;
12~14行:同样的方法定义了p_pchar类型的一个参数,可以从命令行接收一个字符串;
16~21行:模块初始化函数,其中打印出了传入的内核模块参数。
这个程序中,内核模块参数p_pchar设置了默认值,防止没有传入参数的时候答应不正确。
下面是使用modinfo命令查看内核模块的信息:
从modinfo给出的信息可以看到内核模块的参数类型和描述。下面是执行结果:
执行结果可以看出来,向内核模块传递的参数可以正确的打印出来。
本文出自 “内核技术” 博客,请务必保留此出处http://freshpassport.blog.51cto.com/2359526/615725
module_param(var_name, var_type, var_mode);
var_name:参数对应的变量名称;
var_type:参数变量类型;
var_mode:访问权限,与文件的访问权限定义方法相同;
还有一个宏MODULE_PARM_DESC()可以对指定的参数进行说明。
内核模块的参数使用不是很复杂,下面来个简单的例子说明一下:
#include <linux/module.h> #include <linux/init.h> #include <linux/version.h> MODULE_LICENSE("GPL"); MODULE_AUTHOR("freshpassport@gmail.com"); static int p_int; module_param(p_int, int, 0644); MODULE_PARM_DESC(p_int, "int param!\n"); static char* p_pchar = "nothing parsed!"; module_param(p_pchar, charp, 0644); MODULE_PARM_DESC(p_pchar, "char* param!\n"); static int param_init(void) { printk(KERN_INFO "p_int = %d\n", p_int); printk(KERN_INFO "p_pchar = %s\n", p_pchar); return 0; } static void param_exit(void) { return; } module_init(param_init); module_exit(param_exit);
1~3行:老三样,内核模块的头文件;
8~10行:定义了一个名为p_int的int类型的变量,设置为内核模块参数并且进行了参数说明;
12~14行:同样的方法定义了p_pchar类型的一个参数,可以从命令行接收一个字符串;
16~21行:模块初始化函数,其中打印出了传入的内核模块参数。
这个程序中,内核模块参数p_pchar设置了默认值,防止没有传入参数的时候答应不正确。
下面是使用modinfo命令查看内核模块的信息:
root@iscsia:/media/sf_bbu_source/kmodule_test# modinfo ./module_param_test.ko filename: ./module_param_test.ko author: freshpassport@gmail.com license: GPL srcversion: AFC86EFD9F79A6C287089EB depends: vermagic: 2.6.38.2 SMP mod_unload modversions parm: p_int:int param! (int) parm: p_pchar:char* param! (charp)
从modinfo给出的信息可以看到内核模块的参数类型和描述。下面是执行结果:
root@iscsia:/media/sf_bbu_source/kmodule_test# insmod ./module_param_test.ko p_pchar="hello" p_int=123 root@iscsia:/media/sf_bbu_source/kmodule_test# rmmod module_param_test root@iscsia:/media/sf_bbu_source/kmodule_test# dmesg | tail -n 2 [ 6133.511086] p_int = 123 [ 6133.511092] p_pchar = hello
执行结果可以看出来,向内核模块传递的参数可以正确的打印出来。
本文出自 “内核技术” 博客,请务必保留此出处http://freshpassport.blog.51cto.com/2359526/615725
相关文章推荐
- uboot如何向内核传递参数
- insmod 内核模块参数传递
- ubuntu 内核模块编程+模块参数传递+模块符号表输出
- nginx上传模块nginx_upload_module和nginx_uploadprogress_module模块进度显示,如何传递GET参数等。
- 从命令行传递参数给内核模块 (MODULE_PARM)
- 从命令行传递参数给内核模块
- 内核模块 module_param()传递参数
- 使用module_param来向内核模块传递参数
- .Linux设备驱动程序学习(0)——设备驱动介绍& Hello, world!模块 内核参数传递
- 使用module_param来向内核模块传递参数
- 内核模块参数传递
- 内核之旅 --- 内核模块学习1---内核模块参数传递
- uboot向内核模块传递参数的方法
- 给内核模块传递参数
- 使用module_param来向内核模块传递参数
- 内核之旅 --- 内核模块学习1---内核模块参数传递
- 一个内核模块例子(实现调用其他模块中的方法,传递参数等)
- 内核子系统或设备驱动可以直接编译到内核,也可以编译成模块,如果编译到内核,可以使用前一节介绍的方法通过内核启动参数来向它们传递参数,如果编译成模块,则可以通过命令行在插入模块时传递参数,或者在运行时,
- module_param内核模块参数传递