RK3568驱动指南|第一篇 驱动基础-第5章 驱动模块传参实验

本文介绍了瑞芯微RK3568芯片的特性,特别是其在物联网领域的应用,并详细讲解了Linux内核驱动模块的参数传递方法,包括基本类型、数组和字符串参数的传递,以及通过`insmod`命令进行实际操作的示例。
摘要由CSDN通过智能技术生成
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。

第5章 驱动模块传参实验

经过前两章实验的实战操作,我们已经完成最简单的helloworld驱动实验和模块驱动实验,加载模块可以使用“insmod”函数,使用“insmod”函数进行模块加载时也能进行参数的传递。运用得当可以极大提升内核测试速度。本节就来学习一下如何进行驱动模块的传参。

5.1 驱动模块传参简介

驱动模块传参是一种可以随时向内核模块传递、修改参数的方法。例如可以传递串口驱动的波特率、数据位数、校验位、停止位等参数,进行功能的设置,以此节省编译模块的时间,大大提高调试速度。

Linux内核提供了 module_param(name, type, perm)、module_param_array(name, type, nump, perm)宏和module_param_string(name, string, len, perm)宏,分别进行基本类型、数组和字符串参数的传递。它们定义在 “内核源码/include/linux/moduleparam.h”文件中(在module.h文件中已经对export.h进行引用,所以不需要单独引用moduleparam.h文件),详细定义如下(图5-1)所示:

以上宏定义中的 module_param ()函数可以用来进行基本类型参数的传递,传入的三个参数定义如下:

  • name:模块参数的名称
  • type: 模块参数的数据类型
  • perm: 模块参数的访问权限
 
参数type可以取以下任意一种情况:
bool : 布尔型
inbool : 布尔反值
charp: 字符指针(相当于char *,不超过1024字节的字符串)
short:
短整型
ushort : 无符号短整型
int : 整型
uint : 无符号整型
long : 长整型
ulong: 无符号长整型。
参数perm表示该参数在sysfs文件系统中所对应的文件节点的属性,其权限定义在“内核源码/include/linux/stat.h”文件中。可以用宏定义和数字法两种方式来表示。详细宏定义如下(图5-2)所示:

如果要传递数组类型参数可以使用 module_param_array ()函数,相较于 module_param ()函数多了n_para参数,用来表示传递参数个数;n_para参数值会根据输入的参数个数而改变,n_para的最终值为传递的数组元素个数。

最后是 module_param_string(name, string, len, perm)函数,用来传递字符串类型的变量,四个参数的定义如下所示:

name:外部传入的参数名,即加载模块时的传入值

string:内部的变量名,即程序内定义的参数名

len:以string命名的buffer大小(可以小于buffer的大小,但是没有意义)

perm:模块参数的访问权限

至此,关于驱动模块传参所使用的函数就讲解完成了,在下一小节中将编写驱动模块传参函数代码。

5.2 实验程序的编写

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

本章实验将编写Linux下的驱动传参实例代码,通过“insmod”命令进行参数的传递,并将相应的参数打印到串口终端上。

编写完成的parameter.c代码如下(图5-3)所示

以上代码将传递int类型参数number、char类型参数name、int类型的数组para和char类型字符串str1,并在驱动入口函数中,对各个参数进行打印。在下一小节会进行驱动加载测试。

5.3 运行测试

5.3.1 编译驱动程序

在上一小节中的parameter.c代码同一目录下创建 Makefile 文件,Makefile 文件内容如下(图5-4)所示:

对于Makefile的内容注释已在上图添加,保存退出之后,来到存放parameter.c和Makefile文件目录下,如下图(图5-5)所示:

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

编译完生成 parameter.ko目标文件,如下图(图5-7)所示:

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

5.3.2 运行测试

在上一章节中已经学习了使用insmod命令加载模块,而驱动模块传参的命令格式为

insmod 对应的模块 参数

parameter.ko 驱动加载可以传递3个参数,分别为int类型的参数number,char类型的参数name和int数组类型的参数para。使用以下命令进行驱动的加载,加载完成之后的打印信息如下图(图5-8)所示:

可以看到传递的参数都分别打印了出来。最后可以输入以下命令进行驱动的卸载,如下图(图5-9)所示:

更多内容可以关注【公众号】迅为电子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值