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

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

[c-sharp] view plaincopy
  1. EXPORT_SYMBOL(符号名);
  2. EXPORT_SYMBOL_GPL(符号名)

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

代码演示:

[c-sharp] view plaincopy
  1. //hello.c文件,定义2个函数,用于导出
  2. #include <linux/init.h>
  3. #include <linux/module.h>
  4. MODULE_LICENSE("Dual BSD/GPL");
  5. int add_integar(int a,int b)
  6. {
  7. return a + b;
  8. }
  9. 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. printk("%d/n",a);
  27. printk("%d/n",b);
  28. return 0;
  29. }

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

然后cat /proc/kallsyms | grep integer

显示:

[c-sharp] view plaincopy
  1. [root@localhost test]# cat /proc/kallsyms |grep integar
  2. e053d000 u add_integar  [test]
  3. e053d004 u sub_integar  [test]
  4. e053d02c r __ksymtab_sub_integar        [hello]
  5. e053d03c r __kstrtab_sub_integar        [hello]
  6. e053d034 r __ksymtab_add_integar        [hello]
  7. e053d048 r __kstrtab_add_integar        [hello]
  8. e053d000 T add_integar  [hello]
  9. e053d004 T sub_integar  [hello]

关于EXPORT_SYMBOL相关推荐

  1. EXPORT_SYMBOL的作用是什么

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

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

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

  3. linux export_symbol 变量,linux EXPORT_SYMBOL

    From http://blog.csdn.net/brucexu1978/article/details/7081748 2011-12-18 16:05 1480人阅读 评论(0) System. ...

  4. export_symbol的使用

    在内核模块中使用tasklist_lock来操作保护内核进程链表,由于tasklist_lock如果要在模块中使用就必须把它填充到内核符号表里面,就要使用export_symbol,tasklist_ ...

  5. linux symbol文件,LINUX EXPORT_SYMBOL_GPL及EXPORT_SYMBOL导出函数

    EXPORT_SYMBOL(),这个宏也是将函数导出让所有模块都可以使用,而EXPORT_SYMBOL_GPL()这个宏主要是给有GPL认证的模块使用. 2).EXPORT_SYMBOL标签内定义的函 ...

  6. driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)

    内核版本:2.6.38-11-generic 内核自己都大量利用内核符号表导出函数,那么应该导出呢,ldd3上面说只需要EXPORT_SYMBOL一类的宏导出即可,结果试了很久都不行,最后查看文档,算 ...

  7. 宏EXPORT_SYMBOL在内核中的作用

    Module运行在kernel space,不能直接调用应用程序库,只能调用内核函数. EXPORT_SYMBOL的作用是把内核函数的符号导出,也就是将函数的入口地址导出. Module在运行的时候会 ...

  8. 谈EXPORT_SYMBOL使用

    [转载]谈EXPORT_SYMBOL使用 转自:http://www.cnblogs.com/GT_Andy/archive/2011/06/23/2088127.html EXPORT_SYMBOL ...

  9. EXPORT_SYMBOL使用

    EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的. 2.6就必须用EXP ...

最新文章

  1. 字符串循环同构的最小表示法(转)
  2. 客户管理系统企业客户管理crm客户管理
  3. java jar中jar_java – jar中的jar
  4. wince java_Wince之旅——设备控制(重启网卡为例)
  5. Bzoj4199:[NOI2015]品酒大会
  6. 安装cocoaPod 的问题
  7. python闭包和函数调用区别_python – 函数闭包与可调用类
  8. 190816每日一句
  9. linux嵌入式开发从入门到精通
  10. 数据建模工具存在的价值
  11. Mac Finder不显示侧边栏
  12. python numpy的shape函数
  13. 如何获取视频文件的扩展名
  14. java.lang.IllegalStateException: response alrea...
  15. C语言入门----输出语句
  16. 报错Warning: ReactDOM.render is no longer supported in React 18.Use createRoot instead.Until you...
  17. 用 Python 简单做个 动态模拟太阳系运转 吧
  18. html中default是什么文件,Default是什么文件夹?Default文件夹可以删除吗?
  19. SLNA003020系列50MHz~4GHz低噪声放大器
  20. 基于SSM的文书处理及档案管理系统 java毕业设计

热门文章

  1. boost::math::find_location用法的测试程序
  2. boost::container模块实现多态向量的测试程序
  3. Boost:Boost概念的function_requires()的测试程序
  4. ITK:计算网格的法线
  5. ITK:通过镜像填充图像
  6. DCMTK:测试文件是否使用DICOM Part 10格式
  7. VTK:网格之CellEdges
  8. C++两个整数的总和是否为整数溢出的算法实现(附完整源码)
  9. OpenGL设置透视投影并渲染旋转的立方体
  10. c++Insertion Sort插入排序的实现算法(附完整源码)