专栏中心

EEPW首页 > 专栏 > RK3568驱动指南|第一篇 驱动基础-第6章 内核模块符号导出实验

RK3568驱动指南|第一篇 驱动基础-第6章 内核模块符号导出实验

发布人:红李亚 时间:2024-02-26 来源:工程师 发布文章
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
第6章 内核模块符号导出实验
在上一小节中,给大家讲解了驱动模块传参实验,使用insmod命令加载驱动时可以进行参数的传递,但是每一个内核模块之间是相互独立的,那模块间的符号传递要怎样进行呢,让我们带着疑问来进行本章节的学习吧!
6.1 内核模块符号导出简介
驱动程序编译生成的ko文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。
内核符号导出指的是在内核模块中导出相应的函数和变量,在加载模块时被记录在公共内核符号表中,以供其他模块调用。符号导出所使用的宏为EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)。它们定义在 “内核源码/include/linux/export.h”文件中(在module.h文件中已经对export.h进行引用,所以不需要单独引用export.h文件),详细定义如下(图6-1)所示:

EXPORT_SYMBOL(sym)和EXPORT_SYMBOL_GPL(sym)两个宏使用方法相同,而EXPORT_SYMBOL_GPL(sym)导出的模块只能被 GPL 许可的模块使用,所以绝大多数的情况都使用EXPORT_SYMBOL(sym)进行符号导出。sym为函数的唯一参数,表示要导出的函数或变量名称。

至此,关于内核模块符号导出函数就讲解完成了,在下一小节中将会编写两个驱动代码来进行内核模块符号导出实验。

6.2 实验程序的编写

本实验对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\03。

本章实验将编写Linux下的内核模块符号导出实例代码,总共有两个驱动程序,第一个驱动文件名为mathmodule.c,用来定义参数num和函数add(a,b),第二个驱动文件名为hello.c,会引用mathmodule.c驱动程序中的参数num和数学函数add(a,b),并将相应的参数值和函数返回值打印到串口终端上。

编写完成的mathmodule.c代码如下(图6-2)所示

以上代码定义了一个int类型的num变量和add()数学函数,并使用EXPORT_SYMBOL宏进行导出。

编写完成的hello.c代码如下(图6-3)所示:

程序导入了int类型的变量num和add()函数,并在驱动入口函数中打印相应了num的参数值并对add()函数进行了调用。

至此两个驱动代码就编写完成了,代码较为简单,实现了内核模块符号的导出和导出符号的使用,具体的驱动加载运行测试会在下个小节进行。

6.3 运行测试

6.3.1 编译驱动程序

在mathmodule.c和hello.c的同一目录下创建Makefile文件,Makefile文件内容如下(图6-4)所示:

对于Makefile的内容注释已在上图进行添加,这里要注意的是在hello.c代码中使用了mathmodule.c所导出的符号,所以mathmodule.c要在hello.c之前进行编译,即第3行和第4行顺序不能交换。保存退出之后,来到相应的文件目录下,如下图(图6-5)所示:

然后使用命令“make”进行驱动的编译,编译完成如下图(图6-6)所示:

编译完后会生成hello.ko和mathmodule.ko目标文件,如下图(图6-7)所示:

至此我们的驱动模块就编译成功了,下面进行驱动的加载运行测试。


可以看到 hello.ko驱动加载的时候,mathmodule.ko模块中定义的num参数值和调用sum()函数的后正确的返回值都被打印了出来。至此内核模块符号导出实验就完成了。

最后可以输入以下命令进行驱动的卸载,如下图(图6-9)所示:

注意:由于hello.ko文件使用了mathmodule.ko导出的符号,所以要先卸载hello.ko,卸载完成之后再卸载mathmodule.ko。

更多内容可以关注北京迅为电子


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: 开发板

相关推荐

国产FPGA SoC芯选择,米尔安路飞龙核心板重磅发布

莱迪思联手英伟达推出 Sensor Bridge 方案 加速边缘 AI 产品落地

在米尔FPGA上实现Tiny YOLO V4,助力AIoT应用

51单片机开发板

米尔-瑞萨RZ/G2L核心板开发板的系统启动时间优化应用笔记

米尔出席2025安路科技FPGA技术沙龙

当6 TOPS不再是极限:米尔RK3576 + Hailo-8,让高帧率摄像头真正“实时”

CY7C68013开发板原理图.rar

Microchip PIC24FJ256DA210开发板在图形显示上的应用

NEC MCU 78F0513D开发板使用教程

视频 2009-04-07

Jobs芯科EFR32xG24 Dev Kit开发板开箱视频

视频 2022-08-24

拆解:树莓派5 8 GB AI 套件

12路1080P高清视频流,米尔RK3576开发板重塑视频处理极限

ARM嵌入式系统开发板三星S3C44B0X的完整Protel电路图.rar

AN2131开发板原理图.rar

米尔出席openEuler Summit 2024,携全志T536和RK3562核心模组亮相

6TOPS算力驱动30亿参数LLM,米尔RK3576部署端侧多模态多轮对话

SL811HS开发板原理图.rar

Badge USB OCD 与 78F0513D 使用演示视频

视频 2009-05-20

利用PIC24F Curiosity开发板简化设计

视频 2018-01-18
更多 培训课堂
更多 焦点
更多 视频

技术专区