如果希望给一个内核模块传递参数,则可以通过module_param()。
参数用moudle_param宏定义来声明,它定义在moduleparam.h。
下面是module_param宏的定义:
/* This is the fundamental function for registering boot/module
parameters. perm sets the visibility in sysfs: 000 means it's
not there, read bits mean it's readable, write bits mean it's
writable. */
#define __module_param_call(prefix, name, set, get, arg, perm) /
/* Default value instead of permissions? */ /
static int __param_perm_check_##name __attribute__((unused)) = /
BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2)); /
static char __param_str_##name[] = prefix #name; /
static struct kernel_param const __param_##name /
__attribute_used__ /
__attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) /
= { __param_str_##name, perm, set, get, arg }
#define module_param_call(name, set, get, arg, perm) /
__module_param_call(MODULE_PARAM_PREFIX, name, set, get, arg, perm)
/* Helper functions: type is byte, short, ushort, int, uint, long, ulong, charp, bool or invbool, or XXX if you define param_get_XXX, param_set_XXX and param_check_XXX. */
#define module_param_named(name, value, type, perm) /
param_check_##type(name, &(value)); /
module_param_call(name, param_set_##type, param_get_##type, &value, perm); /
__MODULE_PARM_TYPE(name, #type)
#define module_param(name, type, perm) /
module_param_named(name, name, type, perm)
module_param使用了3个参数:变量名,它的类型,以及一个权限掩码。这个宏定义应当放在任何函数之外,典型的是出现在源文件的前面,定义如:
static int swap_xy = 0;
static int rotate = 0;
module_param(swap_xy, int, S_IRUGO);
module_param(rotate, int, S_IRUGO);
模块参数支持许多类型:
bool
invbool一个布尔型(true或者false)值。
charp一个字符指针值。内存为用户提供的字串分配,指针因此设置。
int
long
short
uint
ulong
ushort基本的变长整型值。以u开头的是无符号值。
最后的module_param字段是一个权限值,应当使用<linux/stat.h>中定义的值。这个值控制谁可以存取这些模块参数在sysfs中的表示。如果perm被设为0,就没有sysfs项。否则,出现在/sys/module下面,并带有给定的权限。使用S_IRUGO作为参数可以被所有人读取,但是不能改变。S_IRUGO|S_IWUSR允许root来改变参数。注意,如果一个参数被sysfs修改,你的模块看到的参数值也改变了,但是你的模块没有任何其他的通知。因此你应当不要使模块参数可写。
分享到:
相关推荐
module_param使用测试完整例程(含Makefile),更多详情,见文章: https://dingdong.blog.csdn.net/article/details/106355202
module_param内核函数的意思
应用范围 在使用Loadrunner进行性能测试时,经常遇到一种情况,需要通过web页面修改某事务的状态。... 参数说明:ParamName:存放得到的动态内容的参数名称listofAttributes:其它属性,包括:Notfound,LB,RB,RelFra
这是我在使用LoadRunner过程中总结的,上传上来供需要的人使用,希望能对你有所帮助,(*^__^*) 嘻嘻…… 坚决支持资源共享
DV_vs_HDR10_PARAM.pdf
1. 模块参数 在驱动定义变量 static int num = 0; //当加载模块不指定num的值时则为0 module_param(变量名, 类型, 权限);类型: byte, int, uint, short, ushort, long, ulong, bool, charp,权限不能有写的权限 ...
assert_param-转载
STM32中assert_param的使用,综合网上多种说法,看完不一样的感觉。
本文是关于assert_param的疑惑。
结构体struct module在内核中代表一个内核模块,通过insmod(实际执行init_module系统调用)把自己编写的内核模块插入内核时,模块便与一个struct module结构体相关联,并成为内核的一部分。下面是结构体struct module...
自然语言转SQL任务 https://github.com/guotong1988/NL2SQL-RULE 用的数据
S2P模型参数稳定性评估计算器,方便稳定性设计
NULL 博文链接:https://lindows.iteye.com/blog/1273992
9_display_param.cfg
6_display_param.cfg
在驱动的模块中声明一下你要传递的参数名称,类型和权限 module_param(变量的名称,类型,权限); #include #include static char *p_name = Usr; module_param(p_name, charp, S_IRUGO); MODULE_PARM_DESC(p_name...