insmod 模块1调用模块2 提示找不到模块2里面函数的问题总结

来源:互联网 发布:ubuntu 系统更新 编辑:程序博客网 时间:2024/06/05 08:21

源码:

modules2.c

#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h>int print_console(int a){        printk("The value of a is : %d\n",a);        return 0;}//EXPORT_SYMBOL(print_console);int __init test_init(void){        printk("insmod ok\n");        return 0;        }void __exit test_exit(void){        printk("bye\n");}module_init(test_init);module_exit(test_exit);MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("ATHEROS");MODULE_DESCRIPTION("hello module test");MODULE_SUPPORTED_DEVICE("AR7241"); 

modules1.c

#include <linux/module.h>#include <linux/init.h>#include <linux/moduleparam.h>extern int print_console(int);static int b;module_param(b, int, S_IRUSR|S_IWUSR);MODULE_PARM_DESC(b,  "A number");int __init test_init(void){        printk("insmod OK \n");        print_console(b);        return 0;}void __init test_exit(void){        printk("bye\n");}module_init(test_init);module_exit(test_exit);MODULE_LICENSE("Dual BSD/GPL");MODULE_AUTHOR("ATHEROS");MODULE_DESCRIPTION("hello module test");MODULE_SUPPORTED_DEVICE("AR7241"); 

先insmod modules2.ko

然后insmod modules1.ko b=2

提示未定义的函数print_console 

所以在模块2里面定义了函数,就必须

EXPORT_SYMBOL(print_console);
使函数对所有内核公开,在2.6必须这么做,以前的老内核貌似不用。


第二,给模块传参数必须要 加b=2 例如insmod modules1.ko b=2

这点和c语言不一样,刚开始我直接insmod modules1.ko 2 结果报错Unknown parameter

所以总结到这里给自己长点记性。


0 0