关于内核中 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


 

你可能感兴趣的:(Module)