关于Linux内核态传递参数
来源:互联网 发布:免费qq机器人软件 编辑:程序博客网 时间:2024/05/22 19:51
在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param()
参数用 moudle_param 宏定义来声明, 它定义在 moduleparam.h.
module_param(name,type,perm);
module_param 使用了 3 个参数: 变量名, 它的类型, 以及一个权限掩码用来做一个辅助的 sysfs 入口(啥意思). 这个宏定义应当放在任何函数之外, 典型地是出现在源文件的前面.定义如:
static char *whom = "world";
static int howmany = 1;
module_param(howmany, int, S_IRUGO);
module_param(whom, charp, S_IRUGO);
模块参数支持许多类型:
- bool
- invbool
- 一个布尔型( true 或者 false)值(相关的变量应当是 int 类型). invbool 类型颠倒了值, 所以真值变成 false, 反之亦然.
- charp
- 一个字符指针值. 内存为用户提供的字串分配, 指针因此设置.
- int
- long
- short
- uint
- ulong
- ushort
- 基本的变长整型值. 以 u 开头的是无符号值.
- 数组参数, 用逗号间隔的列表提供的值, 模块加载者也支持. 声明一个数组参数, 使用:
- module_param_array(name,type,num,perm);
这里 name 是你的数组的名子(也是参数名),- type 是数组元素的类型,
- num 是一个整型变量,
- perm 是通常的权限值.
- 如果数组参数在加载时设置, num 被设置成提供的数的个数. 模块加载者拒绝比数组能放下的多的值.
perm参数的作用是什么?
最后的 module_param 字段是一个权限值; 你应当使用 <linux/stat.h> 中定义的值. 这个值控制谁可以存取这些模块参数在 sysfs 中的表示.如果 perm 被设为 0, 就根本没有 sysfs 项. 否则, 它出现在 /sys/module下面, 带有给定的权限. 使用 S_IRUGO 作为参数可以被所有人读取, 但是不能改变; S_IRUGO|S_IWUSR 允许 root 来改变参数. 注意, 如果一个参数被 sysfs 修改, 你的模块看到的参数值也改变了, 但是你的模块没有任何其他的通知. 你应当不要使模块参数可写, 除非你准备好检测这个改变并且因而作出反应.
怎么传入一个自定义的类型?
- 关于Linux内核态传递参数
- Linux内核参数传递Tag
- Linux内核参数传递Tag
- 为linux传递内核参数
- Linux内核模块传递参数
- linux 内核模块参数传递
- Linux内核启动参数传递
- BootLoader与Linux内核的参数传递
- Linux内核启动参数的传递
- Linux内核启动参数的传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- linux 给内核模块传递参数
- Linux 内核 给模块传递参数
- BootLoader与Linux内核的参数传递
- BootLoader与Linux内核的参数传递
- 正确使用gettext来翻译Wordpress主题
- 开始学习grails
- 用C#对Illustrator矢量图形软件进行编程之2
- PKU 1707 Sum of powers 解题报告
- XML序列化与反序列化 整理文档 - Kevin Cheng
- 关于Linux内核态传递参数
- 美警方调查“一夫多妻”宗教组织
- aaaaaaaaaaaaaaaaaaaaaaaaaa
- Net程序如何防止被注入整站通用
- gridview改变鼠标指定行背影色
- 配置jsp 环境(eclipse+myeclipse+tomcat)
- 尝试linux下c编程之进程与信号
- Code Complete 读书笔记(Chapter 14 Organizing Straight-line Code)
- grails的基本配置和中文编码注意事项