linux驱动模块的参数传递和模块导出

接着上一篇,这一篇我们讲讲linux驱动模块的参数传递和模块导出。先上代码

linux驱动模块的参数传递和模块导出

 相比上一篇,这里我们多了两个参数value和name,我们可以在insmod内核的时候使用module_param这个宏来实现内核模块参数的传递,这点就类似于应用层我们写main函数一样,main函数也有两个参数argc和argv,只不过内核换了种方式传递参数而已,首先看module_param宏定义,module_param(name,type,perm),name:模块参数的名称,type:模块参数的数据类型,注意字符指针类型是charp,参数perm表示此参数在sysfs文件系统中所对应的文件节点的属性,其权限在include/linux/stat.h中有定义。它的值可以用宏定义也可以用数字表示(一般用0644)。

当我们不传参时,加载进内核打印如下值:

linux驱动模块的参数传递和模块导出

传参时,则如下:

linux驱动模块的参数传递和模块导出

好了,内核传参到此结束,下面说说内核模块的导出。

内核模块导出也是类似于应用层的函数间的调用,只不过内核的函数之间的调用需要用宏export_symbol来声明。先看代码

linux驱动模块的参数传递和模块导出

编写math.c

linux驱动模块的参数传递和模块导出

修改makefile

linux驱动模块的参数传递和模块导出

加载进内核,注意要先加载math.ko

linux驱动模块的参数传递和模块导出