RK3568驱动指南|第八篇 设备树插件-第76章 注册configfs子系统实验

发布时间:2023年12月22日

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。

?
【公众号】迅为电子

【粉丝群】824412014(加群获取驱动文档+例程)

【视频观看】嵌入式学习之Linux驱动(第八期_设备树插件? _全新升级)_基于RK3568

【购买链接】迅为RK3568开发板瑞芯微Linux安卓鸿蒙ARM核心板人工智能AI主板


第76章?注册configfs子系统实验

在上个章节中,我们深入学习了configfs的核心数据结构,我们理解了它们在ConfigFS中的层级关系,以及他们如何用于设备的动态配置和管理。本章节我们将以实验的方式来应用我们所学的知识,自己编写一个设备树插件驱动,实现注册一个configfs子系统。接下来我们开始编写驱动吧!

76.1实验程序的编写

76.1.1 驱动程序编写

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

我们编写驱动代码创建一个名为“myconfigfs”的configfs子系统,并将其注册到内核中。编写完成的configfs_subsystem.c代码如下所示:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/configfs.h>

//定义名为"myconfig_item_type"的配置项类型结构体
static const struct config_item_type myconfig_item_type ={
  .ct_owner = THIS_MODULE,
  .ct_item_ops = NULL,
  .ct_group_ops = NULL,
  .ct_attrs = NULL,
};
//定义一个configfs_subsystem结构体实例"myconfigfs_subsystem"
static struct configfs_subsystem myconfigfs_subsystem ={
  .su_group = {
    .cg_item = {
      .ci_namebuf = "myconfigfs",
      .ci_type = &myconfig_item_type,
    },
  },
};
//模块的初始化函数
static int myconfigfs_init(void)
{
  //初始化配置组
  config_group_init(&myconfigfs_subsystem.su_group);
  //注册子系统
  configfs_register_subsystem(&myconfigfs_subsystem);
  return 0;
}
// 模块退出函数
static void myconfigfs_exit(void)
{
  configfs_unregister_subsystem(&myconfigfs_subsystem);
}
module_init(myconfigfs_init); // 指定模块的初始化函数
module_exit(myconfigfs_exit); // 指定模块的退出函数

MODULE_LICENSE("GPL");   // 模块使用的许可证
MODULE_AUTHOR("topeet"); // 模块的作者

76.2 运行测试

76.2.1 编译驱动程序

在上一小节中的configfs_subsystem.c代码同一目录下创建 Makefile 文件,Makefile 文件内容如下所示:

export ARCH=arm64#设置平台架构
export CROSS_COMPILE=aarch64-linux-gnu-#交叉编译器前缀
obj-m +=configfs_subsystem.o    #此处要和你的驱动源文件同名
KDIR :=/home/topeet/Linux/linux_sdk/kernel    #这里是你的内核目录                                                                                                                            
PWD ?= $(shell pwd)
all:
    make -C $(KDIR) M=$(PWD) modules    #make操作
clean:
    make -C $(KDIR) M=$(PWD) clean    #make clean操作

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

图 76-1

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

图 76-2

编译完生成configfs_subsystem.ko目标文件,如下图(图76-3)所示:

图 76-3

至此驱动模块就编译成功了,接下来进行测试。

76.2.2 运行测试

开发板启动之后,使用以下命令进行驱动模块的加载,如下图(图76-4)所示:

insmod configfs_subsystem.ko

图76-4

驱动加载之后,我们进入/sys/kernel/config目录下,可以看到注册生成的myconfigfs子系统,如下图(图 76-5)所示:

图 76-5

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

rmmod configfs_subsystem

?

图 76-6

至此,注册configfs子系统实验就完成了。


文章来源:https://blog.csdn.net/BeiJingXunWei/article/details/135136335
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。