关于内核中 EXPORT_SYMBOL 导出变量的实例
在内核中,可以通过这两个宏将变量导出,供其他模块使用:
EXPORT_SYMBOL();
EXPORT_SYMBOL_GPL();
实例:
hello.c:
/***********************************************************************@@ 函数名: hello.c@ 功能: 模块1,生成hello.ko,在这里定义了变量symbol_lxp@ 并用EXPORT_SYMBOL 将该变量导出@ 作者: xiangpingli@ 日期: 2012-08-28@************************************************************************/#include <linux/init.h>#include <linux/module.h>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 <linux/init.h>#include <linux/module.h>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