Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2476298
  • 博文数量: 293
  • 博客积分: 2660
  • 博客等级: 少校
  • 技术积分: 3632
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 17:50
文章分类

全部博文(293)

文章存档

2015年(13)

2014年(58)

2013年(73)

2012年(25)

2011年(30)

2010年(86)

2009年(8)

分类: LINUX

2014-02-16 17:03:29


关于内核中 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
阅读(1080) | 评论(0) | 转发(1) |
0

上一篇:Linux内核学习(2)

下一篇:openstack学习_1

给主人留下些什么吧!~~