EXPORT_SYMBOL的作用浅析
在查看内核驱动代码的时候会经常看到在一些函数后面总会跟EXPORT_SYMBOL()这样的宏定义,通过网上查阅,它的作用大致总结如下:
1、定义说明
把内核函数的符号导出,也可以理解成将函数名作为符号导出;符号的意思就是函数的入口地址,或者说是把这些符号和对应的地址保存起来的,在内核运行的过程中,可以找到这些符号对应的地址的。
2、相关处理
(1)、对编译所得的.ko进行strip -S,处理掉调试信息,这样可以大大缩小ko文件的大小;
(2)、使用KBUILD_EXTRA_SYMBOLS
主要使用于下面这样的场合:
有两个我们自己的模块,其中Module B使用了Module A中的export的函数,因此在Module B的Makefile文件中必须添加:
KBUILD_EXTRA_SYMBOLS += /path/to/ModuleA/Module.symvers
export KBUILD_EXTRA_SYMBOLS
这样在编译Module B时,才不会出现Warning,提示说func1这个符号找不到,而导致编译得到的ko加载时也会出错。
- // Module A (mod_a.c)
- #include<linux/init.h>
- #include<linux/module.h>
- #include<linux/kernel.h>
- static int func1(void)
- {
- printk("In Func: %s...\n",__func__);
- return 0;
- }
- // Export symbol func1
- EXPORT_SYMBOL(func1);
- static int __init hello_init(void)
- {
- printk("Module 1,Init!\n");
- return 0;
- }
- static void __exit hello_exit(void)
- {
- printk("Module 1,Exit!\n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
- // Module B (mod_b.c)
- #include<linux/init.h>
- #include<linux/kernel.h>
- #include<linux/module.h>
- static int func2(void)
- {
- extern int func1(void);
- func1();
- printk("In Func: %s...\n",__func__);
- return 0;
- }
- static int __init hello_init(void)
- {
- printk("Module 2,Init!\n");
- func2();
- return 0;
- }
- static void __exit hello_exit(void)
- {
- printk("Module 2,Exit!\n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
EXPORT_SYMBOL的作用浅析相关推荐
- EXPORT_SYMBOL的作用是什么
http://www.cnblogs.com/riskyer/p/3221805.html EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动 导入到 ...
- C++中双冒号::的作用浅析
转载自:https://www.jb51.net/article/142032.htm C++中双冒号::的作用浅析 更新时间:2018年06月14日 11:59:12 作者:yz930618 在 ...
- C语言中typeof作用,浅析C语言中typeof关键字用法
浅析C语言中typeof关键字用法 前言 C语言中 typeof 关键字是用来定义变量数据类型的.在linux内核源代码中广泛使用. 下面是Linux内核源代码中一个关于typeof实例: #defi ...
- oracle pga的作用,浅析Oracle中PGA和UGA两者间的区别
初学Oracle时,你可能会对Oracle中PGA和UGA两者间的区别产生疑问,这里就PGA和UGA两者间的区别发表下个人意见,在这里拿出来和大家分享一下. The Process Memory除SG ...
- 【转】linux/unix下 pid文件作用浅析
2019独角兽企业重金招聘Python工程师标准>>> 转自http://siwind.iteye.com/blog/1753517 在linux系统的目录/var/run下面一般我 ...
- oracle进程的作用,浅析Oracle10g新进程 MMON 和 MMNL的作用
在Oracle10g中,有两个后台进程是新增的,这里我想说的是MMON和MMNL. 在Oracle不同的文档中,对这两个进程的解释存在歧义. MMON 应该是 Memory Monitor 的缩写,但 ...
- fflush函数作用浅析
一.fflush函数:更新缓存区 头文件:#include <stdio.h> 函数定义:int fflush(FILE *stream); 函数说明:fflush()会强迫将缓冲区内的数 ...
- PHP在泥浆中作用,浅析PHP膨润土泥浆在钻孔灌注桩的实际应用
科技信息 2012 年 第 7 期SCIENCE & TECHNOLOGY INFORMATION 0 引言 钻孔灌注桩基础是将桥梁巨大的上部荷载传递给地基岩土体,因此而言承载力是控制工程安全 ...
- 宏EXPORT_SYMBOL在内核中的作用
Module运行在kernel space,不能直接调用应用程序库,只能调用内核函数. EXPORT_SYMBOL的作用是把内核函数的符号导出,也就是将函数的入口地址导出. Module在运行的时候会 ...
最新文章
- 恶犬秒变萌汪:东京大学开源“治愈系”GAN图片拼贴工具 | 技术头条
- 来客推商城V3多用户uni-app商城源码如何搭建?盈利模式怎么样的?
- Struts2-EL表达式为什么能获取值栈数据
- pythonopencv的配置_python配置与使用OpenCV
- 《现在的泪,都是当年脑子进的水》读书笔记
- 【Xcode】编辑与调试
- 求400以内的亲密对数c语言,东南大学C++编程练习
- capture 部分元器件编号_Capture新建元件符号文件
- 英特尔傲腾技术:部署更简单,内存提升游戏性能
- 4. 嵌入式OpenWRT入门基础篇-----设置OpenWRT系统为AP、中继模式
- 综合微软、AMiner两大学术图谱,清华大学唐杰博士如何将Open Academic Graph亿级数据精准匹配
- python dict.get 用法
- 金蝶K3案例教程存货核算后台配置
- 山东省计算机科学与技术排名,2016山东省大学各学科门类最佳专业排行榜|大学排行榜|最佳专业排行榜_新浪教育_新浪网...
- 期货开户趋势的本质是惯性
- 根据年份判断属相php,自动算出生肖属相的c程序编写程序,输入一个年份,判断该年属相.(提示switch-case......
- 照片后期制作计算机配置,追求色彩真实还原,图片后期处理电脑配置推荐
- 2023年英语二大作文押题猜想(达立易考)
- (心态篇)空杯心态,一个程序员的自我修炼
- Redis修行 — 基数统计:HyperLogLog