本文主要是介绍insmod 模块1调用模块2 提示找不到模块2里面函数的问题总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
源码:
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
所以总结到这里给自己长点记性。
这篇关于insmod 模块1调用模块2 提示找不到模块2里面函数的问题总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!