分类: LINUX
2014-02-16 17:03:29
在内核中,可以通过这两个宏将变量导出,供其他模块使用:
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