【迅为工业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,一经查实,立即删除!