*/ #define __module_param_call(prefix, name, ops, arg, perm, level, flags) \ /* Default value instead of permissions? */ \ static const char __param_str_##name[] = prefix #name; \ static struct kernel_param __moduleparam_const __param_##name \ __used \ __section("__param...
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的实现是通过module_param_named(name, name, type, perm)的。 3.module_...
1.module_param.c /* * file name : module_param.c * author : tiger-John */ #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> MODULE_LICENSE("GPL"); static char *who; static int times; module_param(who,charp,0644); module_param(times,int,0644); static in...
1.module_param.c /* * file name : module_param.c * author : tiger-John */ #include<linux/init.h> #include<linux/module.h> #include<linux/kernel.h> MODULE_LICENSE("GPL"); static char *who; static int times; module_param(who,charp,0644); module_param(times,int,0644); static in...
module_param_cb->__module_param_call 可以看到, 最终定义了一个static struct kernel_param 的对象结构体,并通过__section__ ("__param")塞到了__param段里,这里面有一个很重要的成员ops,它来源于module_parm_named定义。 param_ops_##type的定义如下,它的定义形式是通过预处理连接符定义的。
实现内核模块传参,只需在内核模块程序中调用module_param系列宏即可,module_param系列宏位于“/include/linux/moduleparam.h”中定义,包括module_param_array、module_param_string、module_param_cb。 #define module_param(name,type, perm) module_param_named(name,name,type, perm) ...
module_param(whom,charp,S_IRUGO);</span> 只有使用这个宏才能使我们驱动里边的参数接受到外面的值。 内核支持的模块参数类型有下面几种: bool :布尔值(取ture 或 false ),关联的变量应该是int型。 invbool: 类型反转其值,也就是说,ture 值变成false , 而false 变成 ture. ...
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的实现是通过module_param_named(na...
#include<linux/module.h>#include<linux/kernel.h>#include<linux/moduleparam.h>int x,y;module_param(x,int,0644);module_param(y,int,0644);extern int calculate(int a,int b);static int __init init(void){ printk(KERN_ALERT "hello world! this is ModuleB.c"); printk(KERN_ALERT "\n%d...
将__module_param_call展开,可以看到是定义了结构体kernel_param,如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 Static struct kernel_param __moduleparam_const __param_use_acm __used __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *))) = { .name = MODULE...