手把手教你用configfs在Linux上创建自定义USB设备(附常见问题排查)

手把手教你用configfs在Linux上创建自定义USB设备(附常见问题排查)

在嵌入式开发和物联网硬件领域,USB设备的灵活配置一直是开发者面临的挑战。传统的内核模块编译方式不仅繁琐,而且难以快速迭代。configfs的出现彻底改变了这一局面——它允许开发者直接在用户空间动态配置USB设备功能,无需重新编译内核或加载额外模块。本文将带你从零开始,掌握这项改变硬件开发工作流的核心技术。

1. 环境准备与基础概念

在开始操作之前,我们需要确保系统环境就绪。configfs作为Linux内核的一项功能,需要以下基础支持:

# 检查内核配置
zgrep CONFIG_USB_LIBCOMPOSITE /proc/config.gz
zgrep CONFIGFS_FS /proc/config.gz

如果返回ym表示支持。对于树莓派4B等常见开发板,通常已内置这些模块。若未启用,需要重新编译内核:

# 树莓派内核配置示例
sudo apt install raspberrypi-kernel-headers
make bcm2711_defconfig
make menuconfig  # 启用USB_LIBCOMPOSITE和CONFIGFS_FS

核心概念速览

  • UDC (USB Device Controller):硬件上的USB设备端控制器
  • Gadget:由多个功能(Function)组成的逻辑设备
  • Configfs:内存中的虚拟文件系统,用于动态配置内核对象

提示:实际操作前建议备份重要数据,错误的USB配置可能导致系统不稳定

在嵌入式Linux下,设备树(device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为二进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成二进制文件:hello.dtb,然后重新启动内核,重新解析。有了设备树的overlay功能,省去了设备树的重新编译和内核重启,我们可以直接编写一个设备树插件:overlay.dts,编译成overlay.dtbo后,直接给设备树“打补丁”,在运行期间就可以动态添加节点、修改节点...设备树的overlay功能,在很多场合都会用得到,会让我们的开发更加方便:外界插拔设备,无法在设备树中预先描述:耳机树莓派 + FPGA开发板基于I2C的温度传感器管脚的重新配置:PIN multiplexing修改bootcmd、分区...设备树的overlay功能,目前还没有加入到内核mainline(linux-5.10.x),但目前有些开发板和配套的BSP已经支持了,支持在系统运行期间动态修改设备树文件。如果你手头的开发板或内核平台还没有支持device tree overlay,可以学习本期课程,学习内核中设备树overlay的实现原理,如何给内核打补丁,使内核支持设备树的overlay功能。有了本期课程的学习基础,明白了设备树overlay的实现原理和运行机制,你就可以尝试在自己的开发板平台上实现这个功能了。本期课程的主要内容如下:在开发板上如何实现设备树的overlay功能Configfs文件系统的配置与挂载Configfs编程接口如何编写设备树 overlay插件设备树 overlay的编译和运行设备树overlay运行机制分析本期课程适合哪些人学习:嵌入式驱动工程师嵌入式BSP工程师嵌入式软件工程师想从事嵌入式开发的同学全网首家讲解设备树overlay的视频教程。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值