导出和使用外部符号

模块A:定义并导出了两个函数(红色标注)

#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

static char *who= "who";
static int time= 1;
module_param(time, int, S_IRUGO);
module_param(who, charp, S_IRUGO);


static int hello_init(void)
{
return 0;
}


static int hello_exit(void)
{
return 0;
}


int add_intergar(int a,int b)//define add
{
return (a+b);
}


int dec_intergar(int a,int b)//define dec
{


return (a-b);
}


module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
EXPORT_SYMBOL(who);
EXPORT_SYMBOL(time);

EXPORT_SYMBOL(add_intergar);//导出
EXPORT_SYMBOL(dec_intergar);//导出


模块b:使用模块a中导出的符号(红色部分)

#include <linux/init.h>
#include <linux/module.h>
#include <linux/moduleparam.h>

extern int add_intergar(int a,int b);//外部声明
extern int dec_intergar(int a,int b);//外部声明

static int hello_init(void)
{
int i=0;
printk(KERN_EMERG"add symbol::::%d\n",add_intergar(2,5));//使用!
printk(KERN_EMERG"dec symbol::::%d\n",dec_intergar(2,5));

return 0;
}


static int hello_exit(void)
{
printk(KERN_EMERG"GOOBYE,WORLD\n");
return 0;
}


module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");


编译模块b的时候将编译模块a过程产生的Module.symvers文件cp到当前目录(看编译器配置,非必要),然后make,记得插入模块的顺序。

插入b的结果:

[root@localhost symbol_export]# 
Message from syslogd@ at Sat Nov 12 22:43:14 2011 ...
localhost kernel: add symbol::::7
Message from syslogd@ at Sat Nov 12 22:43:14 2011 ...
localhost kernel: dec symbol::::-3



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值