Linux内核模块间函数调用正确方法.doc

上传人:白大夫 文档编号:3255306 上传时间:2019-08-06 格式:DOC 页数:5 大小:24KB
返回 下载 相关 举报
Linux内核模块间函数调用正确方法.doc_第1页
第1页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《Linux内核模块间函数调用正确方法.doc》由会员分享,可在线阅读,更多相关《Linux内核模块间函数调用正确方法.doc(5页珍藏版)》请在三一文库上搜索。

1、Linux内核模块间函数调用正确方法模块之间发生调用关系是常有的事情,下面以两个模块A、B,B使用A模块提供的函数为例,讲解正确使用的方法。模块A中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL将要提供给B模块的函数导出;模块B中用extern 声明需要用到的A模块提供的函数。代码如下:模块A的代码 A_func.c#include #include #include #include / Print jiffiesvoid A_print_jiffies(void) printk(jiffies is : %llun, (u64)jiffies); return;EXPO

2、RT_SYMBOL(A_print_jiffies);static int _init A_init(void) printk(A_func module init!n); return 0;staTIc void _exit A_exit(void) printk(A_func module exit!n); return;module_init(A_init);module_exit(A_exit);MODULE_AUTHOR(XuHongzhiMacroSAN);MODULE_DESCRIPTION(Module A);MODULE_VERSION(0.1);MODULE_LICENSE

3、(GPL);123456789101112131415161718192021222324252627282930313233模块B的代码 B_func.c#include #include #include #include extern void A_print_jiffies(void);staTIc int _init B_init(void) printk(B_func module init!n); A_print_jiffies(); return 0;staTIc void _exit B_exit(void) printk(B_func module exit!n); ret

4、urn;module_init(B_init);module_exit(B_exit);MODULE_AUTHOR(XuHongzhiMacroSAN);MODULE_DESCRIPTION(Module B!);MODULE_VERSION(0.1);MODULE_LICENSE(GPL);12345678910111213141516171819202122232425262728模块A的Makefileobj-m := A_func.oKERNELDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)default:

5、$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean: rm -f *.o *.ko *.mod.c *.order *.symvers12345678模块B的Makefileobj-m := B_func.oKERNELDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean: rm -f *.o *.ko *.mod.c *.order *.symvers12345678接下来,

6、有3种方式使得模块B编译及加载不出现Warning或Failed.方法一:A模块在make之后,会产生一个Module.symvers文件,将该文件拷贝到B模块源文件目录中,然后执行make方法二:修改B模块的Makefile文件:添加KBUILD_EXTRA_SYMBOLS += /path_to_module_A/Module.symversexport KBUILD_EXTRA_SYMBOLSobj-m := xhz2_func.oKERNELDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)KBUILD_EXTR

7、A_SYMBOLS += /home/xhz/Project/Temp_Module/Module.symversexport KBUILD_EXTRA_SYMBOLSdefault: $(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean: rm -f *.o *.ko *.mod.c *.order *.symvers123456789101112方法三:修改Linux内核源码树中的Module.symers文件,将A模块编译产生的Module.symvers的内容添加在此文件中。(注意将空格替换为Tab,否则编译B时会报错)。个人推荐使用第二种方法,相比方法一省去拷贝文件的步骤。相比方法三,无须修改Linux内核源码树中的Module.symvers.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1