1、模块的声明
主要是通过一些宏,来增加模块的附加功能或者可读性
1.1、MODULE_LICENSE(“遵守的协议”)
申明该模块遵守的许可证协议,如:”GPL”、”GPL V2”等
1.2、MODULE_AUTHOR(“作者”)
申明模块的作者
1.3、MODULE_VERSION(“V1.0”)
申明模块的版本
2、模块的参数
在应用程序中
Int main(int argc,char **argv)
argc 表示命令行输入的参数的个数,argv中保存输入的参数
内核模块中也可以通过命令行输入参数。
参数怎么传入,传入后保存在哪里?
通过宏module_param指定保存模块参数的变量。模块参数用于在加载模块时传递参数给模块。
module_param(name,type,perm)
name:变量的名称
type:变量类型,bool:布尔型 int:整型 charp:字符串型
perm是访问权限。S_IRUGO:读权限 S_IWUSR:写权限
例:
int a=3;
char *st;
module_param(a,int,S_IRUGO);
module_param(a,int,S_IRUGO);
将a赋初值为3,而传入值为10,结果a输出为10.
3、符号导出
什么是符号导出,为什么要符号导出呢?
当我们在一个模块add.ko中创建了一个函数:比如add(int a,int b)。
然后,我在另一个模块alph.ko中想要调用add()这个函数。
这时我们就需要在add模块中使用符号导出。
EXPROT_SYMBOL(add);
而且在alph模块中要声明
extern add(int a,int b);