关于EXPORT_SYMBOL
linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。
模块可以使用如下宏导出符号到内核符号表:
- EXPORT_SYMBOL(符号名);
- EXPORT_SYMBOL_GPL(符号名)
导出的符号可以被其他模块使用,不过使用之前一定要声明一下。EXPORT_SYMBOL_GPL()只适用于包含GPL许可权的模块。
代码演示:
- //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
显示:
- [root@localhost test]# cat /proc/kallsyms |grep integar
- e053d000 u add_integar [test]
- e053d004 u sub_integar [test]
- e053d02c r __ksymtab_sub_integar [hello]
- e053d03c r __kstrtab_sub_integar [hello]
- e053d034 r __ksymtab_add_integar [hello]
- e053d048 r __kstrtab_add_integar [hello]
- e053d000 T add_integar [hello]
- e053d004 T sub_integar [hello]
关于EXPORT_SYMBOL相关推荐
- EXPORT_SYMBOL的作用是什么
http://www.cnblogs.com/riskyer/p/3221805.html EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动 导入到 ...
- Linux驱动编程中EXPORT_SYMBOL()介绍
一.查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义. 二.那么EXPORT_SYMBOL的作用是什么? EXPORT_SYMBOL标签内定义的函数或者 ...
- linux export_symbol 变量,linux EXPORT_SYMBOL
From http://blog.csdn.net/brucexu1978/article/details/7081748 2011-12-18 16:05 1480人阅读 评论(0) System. ...
- export_symbol的使用
在内核模块中使用tasklist_lock来操作保护内核进程链表,由于tasklist_lock如果要在模块中使用就必须把它填充到内核符号表里面,就要使用export_symbol,tasklist_ ...
- linux symbol文件,LINUX EXPORT_SYMBOL_GPL及EXPORT_SYMBOL导出函数
EXPORT_SYMBOL(),这个宏也是将函数导出让所有模块都可以使用,而EXPORT_SYMBOL_GPL()这个宏主要是给有GPL认证的模块使用. 2).EXPORT_SYMBOL标签内定义的函 ...
- driver: linux2.6 内核模块导出函数实例(EXPORT_SYMBOL)
内核版本:2.6.38-11-generic 内核自己都大量利用内核符号表导出函数,那么应该导出呢,ldd3上面说只需要EXPORT_SYMBOL一类的宏导出即可,结果试了很久都不行,最后查看文档,算 ...
- 宏EXPORT_SYMBOL在内核中的作用
Module运行在kernel space,不能直接调用应用程序库,只能调用内核函数. EXPORT_SYMBOL的作用是把内核函数的符号导出,也就是将函数的入口地址导出. Module在运行的时候会 ...
- 谈EXPORT_SYMBOL使用
[转载]谈EXPORT_SYMBOL使用 转自:http://www.cnblogs.com/GT_Andy/archive/2011/06/23/2088127.html EXPORT_SYMBOL ...
- EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的. 2.6就必须用EXP ...
最新文章
- 字符串循环同构的最小表示法(转)
- 客户管理系统企业客户管理crm客户管理
- java jar中jar_java – jar中的jar
- wince java_Wince之旅——设备控制(重启网卡为例)
- Bzoj4199:[NOI2015]品酒大会
- 安装cocoaPod 的问题
- python闭包和函数调用区别_python – 函数闭包与可调用类
- 190816每日一句
- linux嵌入式开发从入门到精通
- 数据建模工具存在的价值
- Mac Finder不显示侧边栏
- python numpy的shape函数
- 如何获取视频文件的扩展名
- java.lang.IllegalStateException: response alrea...
- C语言入门----输出语句
- 报错Warning: ReactDOM.render is no longer supported in React 18.Use createRoot instead.Until you...
- 用 Python 简单做个 动态模拟太阳系运转 吧
- html中default是什么文件,Default是什么文件夹?Default文件夹可以删除吗?
- SLNA003020系列50MHz~4GHz低噪声放大器
- 基于SSM的文书处理及档案管理系统 java毕业设计
热门文章
- boost::math::find_location用法的测试程序
- boost::container模块实现多态向量的测试程序
- Boost:Boost概念的function_requires()的测试程序
- ITK:计算网格的法线
- ITK:通过镜像填充图像
- DCMTK:测试文件是否使用DICOM Part 10格式
- VTK:网格之CellEdges
- C++两个整数的总和是否为整数溢出的算法实现(附完整源码)
- OpenGL设置透视投影并渲染旋转的立方体
- c++Insertion Sort插入排序的实现算法(附完整源码)