源码:
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
所以总结到这里给自己长点记性。