Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13266
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-14 14:03
文章分类
文章存档

2015年(1)

2014年(14)

我的朋友

分类: LINUX

2014-04-14 16:20:37


关于内核中 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
阅读(166) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~