尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解

【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解
📅 发布时间:2026/6/21 5:45:05

【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解

【迅为工业RK3568稳定可靠】itop-3568开发板Linux驱动开发实战:RK3568内核模块符号导出详解

选择迅为iTOP-3568开发板,获取完整驱动开发套件与工业级稳定性保障


在复杂的Linux驱动开发中,模块化设计是提升代码可维护性和复用性的关键。内核模块符号导出 正是实现模块间通信的基础技术。本期将基于迅为RK3568开发板,深入讲解这一核心机制。

 


迅为提供的完整驱动开发套件,包含从基础教程到进阶实战的全套代码示例,助您快速掌握此类核心驱动开发技巧。

 

 

 

第5章 内核模块符号导出实验

本章节我们学习内核模块符号导出,什么是内核模块符号导出呢?内核模块之间是相互独 

立的,互相不能直接访问。将内核模块的符号(函数或变量)导出后,导出的符号(函数或变 

量)可以被其他模块使用。 

5.1 内核模块符号导出简介 

驱动程序编译生成的 ko 文件是相互独立的,即模块之间变量或者函数在正常情况下无法 

进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导 

出。 

内核模块符号导出指的是在内核模块中导出相应的函数和变量,符号导出所使用的宏为 E 

XPORT_SYMBOL(sym)和 EXPORT_SYMBOL_GPL(sym)。定义在 内核源码/include/linux/export.h 文 

件中(在 module.h 文件中已经对 export.h 进行引用,所以不需要单独引用 export.h 文件),详 

细定义如代码清单 5.1 所示:

 

EXPORT_SYMBOL(sym)和 EXPORT_SYMBOL_GPL(sym)两个宏使用方法相同,sym 参数表示要 

导出的函数或变量名称。 

宏 EXPORT_SYMBOL_GPL(sym)导出的内核模块符号只能被 GPL 许可的模块使用,因此绝 

大多数情况都是使用 EXPORT_SYMBOL(sym)宏进行内核模块符号导出。 

5.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),并将相应的参数值和函数 

返回值打印到串口终端上。 

代码清单 5.2 是 mathmodule.c 代码。 

代码清单 5.2

 

代码清单 5.2 定义了一个 int 类型的 num 变量和 add()数学函数,并使用 EXPORT_SYMBOL 

宏进行导出。 

代码清单 5.3 是 hello.c 代码。 

代码清单 5.3

 

代码清单 5.3 中程序使用了在代码清单 5.2 中定义的 int 类型的变量 num 和 add()函数,并 

在驱动入口函数中打印相应了 num 的参数值并对 add()函数进行了调用。 

5.3 运行测试 

5.3.1 编译驱动程序 

在 mathmodule.c 和 hello.c 的同一目录下创建 Makefile 文件,如图 5.1 所示。

Makefile 文件内容如代码清单 5.4 所示: 

代码清单 5.4

 

这里要注意的是在 hello.c 代码中使用了 mathmodule.c 所导出的符号,所以 mathmodule.c 

要在 hello.c 之前进行编译,即 Makefile 中第 3 行和第 4 行代码顺序不能交换。 

使用命令 make 编译驱动程序,编译成功后如图 5.2 所示:

 

 

编译完后会生成 hello.ko 和 mathmodule.ko 目标文件,如图 5.3 所示:

 

5.3.2 运行测试 

由于 hello.ko 依赖于 mathmodule.ko,所以 mathmodule.ko 需要先加载,分别使用以下命 

令进行模块的加载(加载顺序不能变): 

insmod mathmodule.ko 

insmod hello.ko 

打印信息如图 5.4 所示。

 

 

通过图 5.4 可以看出当 hello.ko 驱动加载的时候,在 mathmodule.ko 模块中定义的 num 参 

数值和在 hello.ko 中调用 add()函数的后的返回值都被打印了出来。说明 mathmodule.ko 中已经 

成功实现内核模块符号导出。 

可以输入以下命令进行驱动的卸载: 

rmmod hello.ko 

rmmod mathmodule.ko 

打印信息如图 5.5 所示。

 

相关新闻

  • 集成Win10+Win11优化工具 Windows Manager v2.2.1 绿色便携版!C盘经常红温清理方法
  • 推荐几家靠谱的刺绣厂家电话,2025刺绣厂家实力解析
  • 如何助力质量人员提高工作效率与绩效—供应商质量评审

最新新闻

  • 小程序安全通信机制深度解析:从签名算法到逆向分析实践
  • vLLM+llama-factory本地部署实战:生产级LLM落地操作手册
  • GLM-5.1开源实战:本地部署、量化推理与VS Code集成指南
  • 嵌入式开发板电压与时钟配置:从原理到实战排查指南
  • 终极FGO自动化战斗解决方案:Fate/Grand Automata深度使用指南
  • Hermes本地AI Agent架构升级实战:模块化、持久化与沙箱化

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号