linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。

模块可以使用如下宏导出符号到内核符号表:

view plaincopy to clipboardprint?
01.EXPORT_SYMBOL(符号名);  
02.EXPORT_SYMBOL_GPL(符号名) 
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名)

导出的符号可以被其他模块使用,不过使用之前一定要声明一下。EXPORT_SYMBOL_GPL()只适用于包含GPL许可权的模块。

代码演示:

view plaincopy to clipboardprint?
01.//hello.c文件,定义2个函数,用于导出 
02.#include <linux/init.h> 
03.#include <linux/module.h>  
04.MODULE_LICENSE("Dual BSD/GPL");  
05.int add_integar(int a,int b)  
06.{  
07.    return a + b;  
08.}  
09.int sub_integar(int a,int b)  
10.{  
11.    return a - b;  
12.}  
13.EXPORT_SYMBOL(add_integar);  
14.EXPORT_SYMBOL(sub_integar);  
15.//test.c 用于调用hello模块导出的函数 
16.#include <linux/init.h> 
17.#include <linux/module.h>  
18.MODULE_LICENSE("Dual BSD/GPL");  
19.extern int add_integar(int ,int); //声明要调用的函数  
20.extern int sub_integar(int ,int); //声明要调用的函数  
21.int result(void)  
22.{  
23.    int a,b;  
24.    a = add_integar(1,1);  
25.    b = sub_integar(1,1);  
26.      
27.    printk("%d\n",a);  
28.    printk("%d\n",b);  
29.      
30.    return 0;

31.}

//hello.c文件,定义2个函数,用于导出
#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);

//test.c 用于调用hello模块导出的函数
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
extern int add_integar(int ,int); //声明要调用的函数
extern int sub_integar(int ,int); //声明要调用的函数
int result(void)
{
 int a,b;
 a = add_integar(1,1);
 b = sub_integar(1,1);
 
 printk("%d\n",a);
 printk("%d\n",b);
 
 return 0;
}

make后,先加在hello模块,再加载test模块。

然后cat /proc/kallsyms | grep integer

显示:

view plaincopy to clipboardprint?
01.[root@localhost test]# cat /proc/kallsyms |grep integar  
02.e053d000 u add_integar  [test]  
03.e053d004 u sub_integar  [test]  
04.e053d02c r __ksymtab_sub_integar        [hello]  
05.e053d03c r __kstrtab_sub_integar        [hello]  
06.e053d034 r __ksymtab_add_integar        [hello]  
07.e053d048 r __kstrtab_add_integar        [hello]  
08.e053d000 T add_integar  [hello]  
09.e053d004 T sub_integar  [hello]

驱动中EXPORT_SYMBOL()的作用相关推荐

  1. Linux驱动编程中EXPORT_SYMBOL()介绍

    一.查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义. 二.那么EXPORT_SYMBOL的作用是什么?            EXPORT_SYMBOL标签内定义的函数或者 ...

  2. Linux字符设备驱动中container_of宏的作用

    Linux字符设备驱动中container_of宏的作用 首先看看这个宏的原型: container_of(ptr,type,member) 功能:根据一个结构体变量中的一个成员变量的指针来获取指向整 ...

  3. Linux设备驱动开发-linux驱动中的阻塞访问方式

    阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...

  4. Linux 设备驱动开发 —— 设备树在platform设备驱动中的使用

    关与设备树的概念,我们在Exynos4412 内核移植(六)-- 设备树解析 里面已经学习过,下面看一下设备树在设备驱动开发中起到的作用 Device Tree是一种描述硬件的数据结构,设备树源(De ...

  5. Linux 设备驱动中的 I/O模型(一)—— 阻塞和非阻塞I/O

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程--网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  6. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用

    文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...

  7. 丰度决定了细菌在复杂群落中的功能作用

    本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...

  8. EXPORT_SYMBOL的作用是什么

    http://www.cnblogs.com/riskyer/p/3221805.html EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动 导入到 ...

  9. 【整理】Linux驱动中,probe函数何时被调用

    声明:以下主要内容参考自: 关于struct device_driver结构中的probe探测函数的调用 http://blog.chinaunix.net/u2/71164/showart.php? ...

最新文章

  1. shell用到的命令(2) —— break,continue,echo,eval,
  2. JavaScript学习与实践(8)
  3. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第4章-带有事件驱动控制的分数阶多智能体系统的一致性
  4. 这年头,老赖没得混了!大数据式追债,你见过吗?
  5. 半监督学习技术在金融文本分类上的实践
  6. 【Redis】2. Redis数据类型 String以及key的设置约定
  7. dataframe 如何选中某列的一行_如何用 Python 在笔记本上分析 100GB 数据?
  8. 最长上升子序列三种模板(n^2模板,二分模板,树状数组模板)
  9. python安装idle_怎么在windows下的Python开发工具IDLE里安装其他模块
  10. Java Swing中国象棋AI(人机和人人对战)
  11. c语言文件指针重新定向,C语言rewind()函数:将文件指针重新指向文件开头
  12. CPU中控制器的功能
  13. ROS,Ubuntu,noobs,raspbian和raspbeery pi3的关系
  14. The Butcher
  15. 三星堆的青铜机器人_三星堆出土世界同期最高、最完整的青铜立人像 他有两个未解之谜...
  16. 高数 | 【概念剖析】一元、二元微分,连续、可微、可偏导、偏导连续的超强通俗解析!
  17. wo de wen jian
  18. vb.net 简单的方法模拟三体(有行星)
  19. 关于数独游戏的实现(一)
  20. XXL-JOB配置笔记

热门文章

  1. 日语学习-多邻国-平假名4
  2. java代码鸟飞_180行原生js代码实现简易版飞行的小鸟游戏
  3. python对Excel数据进行读写操作
  4. linux内核那些事之Memory protection keys(硬件原理)
  5. [有限元] Ansys Workbench 在对称问题中使用 Symmetry Region
  6. span的取值与赋值(原生js与jquery) - 对比篇
  7. phpcmsV9框架:安装教程
  8. 二次元HTML导航页网站源码
  9. mysql 存储过程遍历_Mysql创建存储过程及遍历查询结果
  10. 紫色全屏渐变css3动画UI企业模板