关于内核中 EXPORT_SYMBOL 导出变量的实例
在内核中,可以通过这两个宏将变量导出,供其他模块使用:
EXPORT_SYMBOL();
EXPORT_SYMBOL_GPL();
实例:
hello.c:
/***********************************************************************
@
@ 函数名: hello.c
@ 功能: 模块1,生成hello.ko,在这里定义了变量symbol_lxp
@ 并用EXPORT_SYMBOL 将该变量导出
@ 作者: xiangpingli
@ 日期: 2012-08-28
@
************************************************************************/
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
int symbol_lxp = 123;
EXPORT_SYMBOL(symbol_lxp);
static int hello_init(void)
{
printk(KERN_ALERT "Hello, World!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world!\n");
}
module_init(hello_init);
module_exit(hello_exit);
hello2.c:
/***********************************************************************
@
@ 文件: hello2.c
@ 功能: 模块2,生成hello2.ko
@ 使用了从hello.ko导出的symbol_lxp变量
@ 作者: xiangpingli
@ 日期: 2012-08-28
@
************************************************************************/
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
extern int symbol_lxp;
static int hello2_init(void)
{
printk(KERN_ALERT "Hello2, World!\n");
printk("symbol_lxp defined in hello.ko: symbol_lxp = %d\n", symbol_lxp);
return 0;
}
static void hello2_exit(void)
{
printk(KERN_ALERT "Goodbye2, cruel world!\n");
}
module_init(hello2_init);
module_exit(hello2_exit);
运行结果:
在hello2.ko中可以使用hello.ko中导出的变量:
[root@(none)/mnt]#insmod hello.ko
Hello, World!
[root@(none)/mnt]#insmod hello2.ko
Hello2, World!
symbol_lxp defined in hello.ko: symbol_lxp = 123