内存管理器(十四)内核模块常用标识EXPORT_SYMBOL
2015-11-10 22:34
537 查看
内存管理器(十四)内核模块常用标识EXPORT_SYMBOL
前言
最近在看slab 的源码,发现了这个标识EXPORT_SYMBOL 。不是很理解,后来查了资料才明白了这个标识的作用是用来引用不同模块之间函数的标记。__START
简要说明下吧。有函数fun1 在模块mod1 中,mod2模块中也有这个函数,但是mod2怎么引用这个函数呢?这个标识就是解决这个问题的。首先在模块mod1中fun1下边的使用这个符号EXPORT_SYMBOL(fun1); 然后在模块2mod2 中extern 引用这个函数,模块2就可以适用了。
代码如下:
[c]
#include<linux/module.h>
#include<linux/slab.h>
#include<linux/mm.h>
#include<linux/list.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zmrlinux");
MODULE_DESCRIPTION("some thing about EXPORT_SYMBOLY");
static int test1(void){ /*测试函数,在模块2中会被引用到*/
printk("HI i am in test1\n");
return 0;
}
EXPORT_SYMBOL(test1); /*函数引用*/
static int __init test_module(void){
printk("i am the first module\n");
test1();
return 0;
}
static void __exit test_out(void){
printk("module1 is goon\n");
}
module_init(test_module);
module_exit(test_out);
[/c]
[c]
#include<linux/module.h>
#include<linux/list.h>
#include<linux/types.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("zmrlinux");
MODULE_DESCRIPTION("something about SYMOBLE");
extern int test1(void); /*模块2引用模块1 的函数*/
static int __init TEST(void){
printk("i am the second mod\n");
test1();
return 0;
}
static void __exit TEST_out(void){
printk("do nothing\n");
}
module_init(TEST);
module_exit(TEST_out);
[/c]
Makefile 这里只写一个,另一个类似
[c]
obj-m := mod2.o
CURRENT_PATH := ${shell pwd}
CURRENT_KERNEL_PATH := ${shell uname -r}
LINUX_KERNEL_PATH := /usr/src/kernels/$(CURRENT_KERNEL_PATH)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
rm *.o
[/c]
这个是预期的效果,完全符和我们说的效果。
查看原文:http://zmr.lezifang.cn/2015/11/10/%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%e5%99%a8%ef%bc%88%e5%8d%81%e5%9b%9b%ef%bc%89%e5%86%85%e6%a0%b8%e6%a8%a1%e5%9d%97%e5%b8%b8%e7%94%a8%e6%a0%87%e8%af%86export_symbol/
相关文章推荐
- iOS常见问题总结(三)
- 爬爬爬之路:UI(一) UIView UILabel
- servlet传值到JSP
- 串的KMP模式匹配算法(C语言优化)
- CENTOS6下PHP5.6的安装 oci8 pdo-oci
- 苹果开发证书相关BLOG与Delphi IOS环境安装(超详细)
- python控制语句
- [kuangbin带你飞]专题一 简单搜索L - Oil Deposits(HDU 1241)
- 新手福利
- JavaScript学习笔记大纲
- 【java开发系列】—— spring简单入门示例
- CF#201 div2 B Fixed Points(implementation)
- 百度定位工具类
- 简单最短路
- org.apache.commons.beanutils.BeanUtils;
- jdbc使用预编译的好处
- java正则表达式常用方法_me
- keras 中常用 Python操作
- iOS高德地图常见问题
- 什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?