快速业务通道

linux内核导出函数示例

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-02

在linux内核中导出函数:

hello.c

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

MODULE_LICENSE("Dual BSD/GPL");
int add_integar(int a,int b)
{
return (a b);
}

int sub_integar(int a,int b)
{
return (a - b);
}

EXPORT_SYMBOL(add_integar);
EXPORT_SYMBOL(sub_integar);

/*

int init_module(void)
{
printk(KERN_INFO"Loading the module ...KKn");
return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO"Unloading the module...KK...n");

return ;
}

*/

对应Makefile文件:

obj-m = hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

测试程序:

test.c

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

MODULE_LICENSE("Dual BSD/GPL");
MODULE_LICENSE("GPL");

extern int add_integar(int a,int b);
extern int sub_integar(int a,int b);


int result(void)
{
int a = 0,b = 0;
a = add_integar(1,1);
b= sub_integar(1,1);

printk("ADD:%dn",a);
printk("SUB:%dn",b);

return 0;
}


int init_module(void)
{
printk(KERN_INFO"Loading the module ...KKn");
result();
return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO"Unloading the module...KK...n");

return ;
}

对应的Makefile

obj-m =testhello.o

KBUILD_EXTRA_SYMBOLS = /root/Module.symvers
#export KBUILD_EXTRA_SYMBOLS


all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

在linux2.6.26之后内核有Bug,

在编译时会找不到导出函数,出现undefined错误

在运行时出现unknown symbol错误.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号