什么是模块传参?
当我们在insmod时可以设置驱动模块中的变量值,就是模块传参
如:
insmod demodev.ko dolphin=10 bobcat=5
内核是如何实现模块传参的?
翻译一下,就是内核是怎么把我们insmod设置的值设置到我们内核模块中的。
背景:
其实背景就是和前面的符号导出一样,都是在insmod(模块加载入内核的过程中)
前面我们知道了,符号导出主要借用了_ksymtab Section以及kernel module这个结构体将内核与模块以及模块与模块之间联系起来了。
而我们这节符号传参就是靠__param Section来当作桥梁。
过程:
1.首先得从module_param这个宏说起,它得主要功能是:
1.检测参数有没有定义
2.生成kernel_param结构体变量(__param Section就是由它们构成的)
3.之后生成ELF文件,将参数放入__param Section中
2.根据上一节我们知道,sys_init_module最后一个传入参数就是用户空间传入参数的地址
1.sys_init_module将参数在用户空间的地址传给load_module函数
2.load_module,将参数从用户空间搬到内核空间
3.在HDR最后一次搬移过程中,获取到__param Section最终的位置,再将它们搬移过去