Linux驱动程序的模块参数
来源:互联网 发布:上海交大网络空间安全 编辑:程序博客网 时间:2024/05/19 01:33
模块参数
模块参数就是用户在系统启动或挂载模块时指定的参数值,相对于驱动程序它是全局变量。
<include/module.h>
通过module_param()定义模块参数:
module_param(name, type, perm);
name – 即为参数名
Type – 参数的类型,可以是byte(存放在char型变量中)、short、ushort、int、uint、long、ulong、charp(char型指针)、bool、invbool(用户转换来的bool型)
perm – 指定模块在sysfs下对应文件的权限,所有者、组内、其他人
值得说明的是,module_param()并没有定义相关变量,在具体使用时,格式如下:
static int km_param = 0;module_param(km_param, bool, 0); // km_param是全局变量
有时,模块外部参数名称与模块内部变量名称不同,这时需要使用宏module_param_named():
module_param_ named (name, variable, type,perm);
variable – name是外部可见参数名,variable是内部全局变量名。使用格式如下:
static int max _param = 0;module_param_ named(max_km_param, max _param,int, 0);
有时,需要使用一个charp类型定义一个字串,内核将其copy到内存,charp就指向该字串:
static char *name;module_param(name, charp, 0);
另一种可行方法是,让内核直接copy字串到指定的字符数组,使用宏module_param_string():
module_param_string(name, string, len, perm);
name – 外部参数名
string – 对应模块内部参数名
len – 是string命名缓存区的长度
使用格式如下:
static char param_str[LEN];module_param_string(param_string, param_str,LEN, 0);
有时,需要接收逗号分隔的参数序列,这时使用宏module_param_array()存储在数组中:
module_param_array(name, type, nump, perm);
nump – 为一个整行指针,该整型存放数组项的个数
使用格式如下:
static int param_array[MAX_PARA];static int num_param;module_param_array(param_array, int, & num_param,0444);
需要注意的是,参数name指定的数组必须静态分配,因为内核在编译时需要确定数组大小,避免造成溢出。
同样,也可以使外部参数和模块内部参数不同,使用如下宏:
module_param_array_named(name, array, type,nump, perm);
使用同module_param_ named。
最后,可以描述下用户自己的参数:
static unsigned int cnt = 0;module_param(cnt, uint, 0644);MODULE_PARM_DESC(cnt, “The cnt counts theirq”);参考资料:
[1] Robert Love, Linux Kernel Development
- Linux驱动程序的模块参数
- Linux 驱动之模块参数--Linux设备驱动程序
- Linux设备驱动程序学习笔记2——带参数的模块加载和卸载
- Linux设备驱动程序学习笔记2——带参数的模块加载和卸载
- 第二章 第三节 Linux设备驱动程序之--模块参数
- 【Linux设备驱动程序(第三版)】----模块参数
- 第二章 第三节 Linux设备驱动程序之--模块参数
- linux内核模块和驱动程序的编写
- LINUX是如何make驱动程序模块的
- LINUX是如何make驱动程序模块的?
- 最简单的嵌入式Linux驱动程序模块
- 最简单的嵌入式Linux驱动程序模块
- 一个完整的Linux测试模块驱动程序
- 最简单的嵌入式Linux驱动程序模块
- linux内核模块和驱动程序的编写
- linux内核模块和驱动程序
- Linux驱动程序模块编译流程
- linux内核模块和驱动程序的编写之初探
- circumgyrate the string 2137
- android编译环境搭建后ubuntu12.04黑屏不能进系统( libgl1-mesa-glx:i386)
- 使用MySQL全文索引
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- 大数据究竟是什么?
- Linux驱动程序的模块参数
- asp.net获取当前时间
- apache kafka系列之-监控指标
- android CMWAP, CMNET有何区别
- thrift_demo
- 【HTTP协议】HTTP请求、请求头、HTTP响应、状态吗、响应头、使用响应头编程
- dpkg error
- 微软——画图工具的BUG
- C语言内力修炼与软件工程