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

news/2025/11/21 13:37:33/文章来源:https://www.cnblogs.com/topeet/p/19252462

【迅为工业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 所示。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚幻基础:行为树 - 指南

虚幻基础:行为树 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

集成Win10+Win11优化工具 Windows Manager v2.2.1 绿色便携版!C盘经常红温清理方法

简介 Windows Manager中文激活版(Windows优化大师)是一款集Windows10/11所有功能于一身的Win10/11系统优化工具,这款系统优化软件提供40多个实用程序来优化,调整,清理,加速和修复Windows 10/11,可以让系统运行流畅,解决…

C语言`FILE`结构体 与 Python文件对象 的对比

对比维度 C语言FILE结构体 Python文件对象 为什么本质不同?模式字符串 "r", "w", "a", "r+", "w+", "a+", "rb", "wb", "ab&…

2025质量可靠的义乌刺绣工厂推荐下,厂家品质深度分析

2025质量可靠的义乌刺绣工厂推荐下,厂家品质深度分析。义乌及周边地区的刺绣工厂中,“质量可靠” 是商家合作的核心诉求。这不仅体现在产品的耐用性上,更涵盖工艺稳定性、材质安全性与品控严谨性。以下推荐的六家工…

2025 11月十大靠谱启闭机品牌盘点推荐,螺杆启闭机、卷扬启闭机、手动启闭机、手电两用启闭机 优势及应用分析

启闭机作为水利工程的核心设备,直接关系到工程安全与运行效率。选择时需优先明确需求:按类型可聚焦螺杆启闭机、卷扬启闭机、手动启闭机、手电两用启闭机等核心品类,按配套需求可搭配铸铁启闭机闸门、启闭机拍门等产…

推荐几家靠谱的刺绣厂家电话,2025刺绣厂家实力解析

推荐几家靠谱的刺绣厂家电话,2025刺绣厂家实力解析。在刺绣行业中,“靠谱” 体现在工艺扎实、服务规范与信誉良好等多个方面。以下推荐的六家刺绣厂家均经过市场验证,其中浦江县俊贤刺绣有限公司以突出的工艺优势位…

虚拟机共享文件夹实现自动挂载

1. sudo vim /etc/fstab编辑文件 2. 添加 ".host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,defaults 0 0" 3. sudo mount -a重新挂载

目标检测算法——R-CNN系列

R-CNN 系列算法是深度学习目标检测领域发展的关键历程,标志着该领域从传统方法转向深度学习的转变。 以下是 R-CNN、Fast R-CNN 和 Faster R-CNN 三个核心模型的总结和对比,以及对 Mask R-CNN 的简单提及:🚀 R-CN…

如何助力质量人员提高工作效率与绩效—供应商质量评审

引言:破解多行业适配的数字化难题‌ 在质量管理数字化浪潮中,一个核心问题持续引发行业深思:‌如何通过单一SaaS产品满足千差万别的行业需求?‌ 云质QMS面对来自健身器材、化工、汽车、新能源电池等截然不同的制造…

每周读书与学习-JMeter性能测试脚本编写实战(一)-如何实现用户需先登录,然后再请求别的接口

每周读书与学习是由清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》一书的作者推出,分享作者多年的IT从业经历,希望对很多计算机科学技术IT类专业毕业生以及IT从业者有所帮助。 在前面的学习中,介绍了…

详细介绍:【iOS】自动引用计数(一)

详细介绍:【iOS】自动引用计数(一)2025-11-21 13:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !i…

时序数据库选型指南:为什么TDengine正在成为行业标准

在物联网(IoT)、工业互联网(IIoT)、IT运维和金融科技等领域,时序数据正以前所未有的速度增长。面对海量的设备指标、传感器数据和监控日志,选择一个合适的时序数据库(Time-Series Database, TSDB)已成为系统架…

专业的技术文档 | Apache Pulsar 如何满足金融级的容灾场景

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

通用型质量管理SaaS平台的构建逻辑与市场实践‌

一、行业需求的碎片化现实‌ 2018年末中国规模以上企业(年主营业务收入≥2000万元)达37万家,按《国民经济行业分类与代码》划分为1380个细分领域,单个行业的平均企业数量仅约270家,且并非所有企业都会采购质量管理…

SBDAF60V3-ASEMI可直接替代安世PMEG6030EP

SBDAF60V3-ASEMI可直接替代安世PMEG6030EP编辑:ll SBDAF60V3-ASEMI可直接替代安世PMEG6030EP 型号:SBDAF60V3 品牌:ASEMI 封装:SMAF 正向电流:3A 反向电压:60V 正向压降:0.55V~0.95V 引线数量:2 芯片个数:1 芯…

Ubuntu 框架使用 Docker 部署 Jenkins 详细教程

Ubuntu 框架使用 Docker 部署 Jenkins 详细教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

function sql的错误处理方法

在处理SQL错误时,可以采用以下方法:使用try-catch语句:在可能抛出异常的代码块中使用try-catch语句,可以捕获并处理异常。在catch语句中,可以根据异常类型进行相应的处理,例如记录日志、显示错误信息等。 使用数…

function sql的示例代码有哪些

以下是一些常见的 SQL 示例代码:创建数据库:CREATE DATAbase database_name;创建数据表:CREATE TABLE table_name (column1 data_type,column2 data_type,... );插入数据:INSERT INTO table_name (column1, column…

【CI130x 离在线】 C++一个类中调用另一个类的方法

有几种解决方案,根据你的具体需求选择: 方案1:传递CISerialPort对象引用(推荐) 在需要使用CheckConnection()的类中持有CISerialPort的引用:cpp// 在需要使用CheckConnection的类中 class MyOtherClass { privat…

ERP/MES与QMS的协同价值:为什么企业需要专业质量管理系统的深度解析

一、质量困局:ERP/MES的局限性 当宝马汽车80%的客户投诉源于供应商来料质量问题时,这暴露出一个行业共性:ERP/MES系统虽已普及,但质量管控仍存在严重短板。以某汽车零部件企业为例,其SAP ERP质量模块仅能实现数据…