Linux驱动编程中EXPORT_SYMBOL()介绍
一、查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义。
二、那么EXPORT_SYMBOL的作用是什么?
EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。
三、使用方法
1、在模块函数定义之后使用“EXPORT_SYMBOL(函数名)”来声明。
2、在调用该函数的另外一个模块中使用extern对之声明。
3、先加载定义该函数的模块,然后再加载调用该函数的模块,请注意这个先后顺序。
四、实例测试。
1、测试思路:在模块export_symbol_one中定义一个函数function_one(void);在另外一个模块export_symbol_two中定义一个函数function_two(void),function_two(void)里面会调用function_one(void)。
2、测试代码:
export_symbol_one.c
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
static int function_one(void)
{
printk("EXPORT_SYMBOL In Func: %s...\n",__func__);
return 0;
}
EXPORT_SYMBOL(function_one);
static int __init export_symbol_init(void)
{
printk("EXPORT_SYMBOL Module one,Init!\n");
return 0;
}
static void __exit export_symbol_exit(void)
{
printk("EXPORT_SYMBOL Module one,Exit!\n");
}
module_init(export_symbol_init);
module_exit(export_symbol_exit);
Makefile:
obj-m += export_symbol_one.o
KDIR := /home/weifanghai/Android_4.4_git/xunwei/kernel/iTop4412_Kernel_3.0
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o
export_symbol_two.c
#include<linux/init.h>
#include<linux/kernel.h>
#include<linux/module.h>
static int function_two(void)
{
extern int function_one(void);
function_one();
printk("EXPORT_SYMBOL In Func: %s...\n",__func__);
return 0;
}
static int __init export_symbol_init(void)
{
printk("EXPORT_SYMBOL Module two,Init!\n");
function_two();
return 0;
}
static void __exit export_symbol_exit(void)
{
printk("EXPORT_SYMBOL Module two,Exit!\n");
}
module_init(export_symbol_init);
module_exit(export_symbol_exit);
Makefile
obj-m += export_symbol_two.o
KDIR := /home/weifanghai/Android_4.4_git/xunwei/kernel/iTop4412_Kernel_3.0
PWD ?= $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o
3、依次加载两个模块:
[root@iTOP-4412]# insmod export_symbol_one.ko
[root@iTOP-4412]# insmod export_symbol_two.ko
4、运行结果效果图:
5、小结:从上面的打印信息看,模块export_symbol_two.ko里面的函数function_two(void)可以调用模块export_symbol_one.ko里面的函数function_one(void)。
---------------------
作者:海月汐辰
来源:CSDN
原文:https://blog.csdn.net/qq_37858386/article/details/78444168
Linux驱动编程中EXPORT_SYMBOL()介绍相关推荐
- Linux驱动编程 step-by-step
第三次看了LDD3了(虽然现在已经是kernel3.0但从这本书商还是能学到很多) 每次都有一些收获 现在终于能够写一写代码了 驱动程序的作用: 简单来说 驱动程序就是使计算机与设备通信的特殊的代码, ...
- Linux驱动调试中的Debugfs的使用简介
Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...
- Linux驱动调试中的Debugfs的使用简介 CONFIG_DEBUG_FS 的功能与配置
Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...
- Linux驱动编程 step-by-step (二) 简单字符设备驱动
简单字符设备驱动 1.主次设备号 主设备号标识设备连接的的驱动,此设备好由内核使用,标识在相应驱动下得对应的设备 在linux中设备号是一个32位的dev_t类型 typedef __u32 _ ...
- Linux驱动编程 step-by-step (二)
简单字符设备驱动 1.主次设备号 主设备号标识设备连接的的驱动,此设备好由内核使用,标识在相应驱动下得对应的设备 在linux中设备号是一个32位的dev_t类型 typedef __u32 _ ...
- 在Linux C编程中使用Unicode和UTF-8
在Linux C编程中使用Unicode和UTF-8 目前各种Linux发行版都支持UTF-8编码,当前系统的语言和字符编码设置保存在一些环境变量中,可以通过locale命令查看: $ locale ...
- Linux驱动编程视频教程
本视频教程主要介绍字符驱动.杂项设备.中断.调试驱动的基本方法以及驱动的移植等. Linux驱动编程视频教程: 链接:https://pan.baidu.com/s/1Yn5d4w9uudb4tGDT ...
- linux驱动编程——ch340x驱动移植
Linux驱动编程--ch340x驱动移植 主要概念: ch340x驱动移植 作为通用器件,厂商都有提供适配各种平台的驱动.linux一般会提供驱动源码. 一般所谓驱动移植,就是将厂商的驱 ...
- LINUX驱动模型中bus与platform_bus区别和异同
LINUX驱动模型中bus与platform_bus区别和异同 首先要明确的是platform_bus是BUS的一个字集,也就是说platform_bus是BUS定义的一个总线类型.可以看到pl ...
最新文章
- linux查看服务依赖关系,服务管理(1)
- 微软出资10亿美元研究AGI,意与谷歌竞争?
- 解决ubuntu(16.04版本)和windows电脑之间无法复制粘贴问题
- 200 计算机网络之物理层思维导图小结
- pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!
- 使用字符串切割,使手机号中间四位隐藏
- 无法使用此数据源,因为没有正确配置performancepoint services
- CFS调度器(1)-基本原理
- LaTeX数学符号表
- 口袋小精灵JAVA版下载_口袋小精灵200合一
- Matlab:i 和j其实是MATLAB内置函数(built-in function)
- 余世雄 - 与上司沟通的7个技巧
- 基于80C51单片机——中断小结
- 移动路由器做网站服务器,移动路由器上网方式选哪个?
- 项目依赖aar 以及 依赖嵌套aar
- Docker Swarm 维护模式
- 微软应用商店打不开代码: 0x80131500
- springBoot启动失败Caused by: java.lang.ClassNotFoundException: org.springframework.http.MediaType
- c语言 编程结束怎么表示,c语言开头(c语言编程开头和结束代码)
- 数据屏蔽:静态与动态
热门文章
- 访问 IIS 元数据库失败解决问题的方法
- 《基于Node.js实现简易聊天室系列之项目前期工作》
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15)
- tensorflow 之 tf.reshape 之 -1
- 考考大家的数学,计算以下计算公式的结果
- 关于sizeof表达式作为数组元素个数的编译
- 前端面试题整理(js)
- 玩转SmartQQ之登录
- sh里的变量 $0 $1 $$ $#
- WINCE6.0添加对viewrs(PDF,Word,Execel和PowerPoint)支持