USB Gadget
+ -

configfs文件系统

2025-08-18 本文链接为:http://www.usbzh.com/article/detail-1559.html ,欢迎转载,转载请附上本文链接。

Linux内核使用CONFIGFS配置项支持可以通过用户创建USB Compoiste Gadget。

CONFIG_CONFIGFS_FS项用于支持配置文件系统。

Menconfig -> FileSystems -> Psuedo File System -> {M}Userspace-driven configuration filesystem
Userspace-driven configuration filesystem

插入gadget模块

 modprobe libcomposite

libcomposte依赖于configfs,目录位于/kernel/fs/configfs/configfs.ko

root@ATK-IMX6U:/lib/modules/4.1.15# modinfo libcomposite.ko 
filename:       /lib/modules/4.1.15/libcomposite.ko
author:         David Brownell
license:        GPL
srcversion:     38D75894A6D874FC11E5260
depends:        configfs
intree:         Y
vermagic:       4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8

挂载configfs文件系统

 mount -t configfs none /sys/kernel/config

这条命令用于挂载 configfs 虚拟文件系统到 /sys/kernel/config 目录。下面详细解释其作用:

命令解析

mount -t configfs none /sys/kernel/config
  • mount:挂载文件系统的命令。
  • -t configfs:指定要挂载的文件系统类型为 configfs(配置文件系统)。
  • none:由于 configfs 是内核提供的虚拟文件系统,不需要实际的设备,所以用 none 表示。
  • /sys/kernel/config:挂载的目标目录,通常用于管理内核中的动态配置。

configfs 的作用

configfs 是一个基于 RAM 的文件系统,允许用户空间程序动态配置内核对象(如 USB Gadget、设备驱动等)。它通常用于:

  1. USB Gadget 配置(如 Android 的 USB 功能切换:MTP、ADB、RNDIS 等)。
  2. 动态内核模块管理(如 SCSI 设备、虚拟网络设备等)。
  3. sysfs 的区别
    • sysfs 用于查看和设置内核对象(只读或有限写入)。
    • configfs 用于动态创建、修改和删除内核对象(如 USB 功能配置)。
    • debugfs 专为调试设计,提供更灵活的内核数据访问。

为什么需要挂载 configfs?

在 Android/Linux 的 USB Gadget 架构中,configfs 用于:

  • 动态创建 USB Gadget(如 g1)。
  • 配置 USB 功能(如 ffs(FunctionFS)、mtprndis 等)。
  • 设置 USB 属性(如厂商 ID、产品 ID、字符串描述符等)。

如果 configfs 未挂载,USB Gadget 相关的配置(如 /config/usb_gadget/g1/)就无法访问,USB 功能也无法切换。


实际应用场景

  1. Android 的 USB 功能切换(如 MTP、ADB、PTP 等):
    mount -t configfs none /sys/kernel/config
    cd /sys/kernel/config/usb_gadget
    mkdir g1  # 创建 USB Gadget
    
  2. USB 网络共享(RNDIS)
    echo rndis > /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409/configuration
    
  3. FunctionFS(用于用户空间 USB 驱动)
    mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb
    

总结

  • mount -t configfs none /sys/kernel/config 挂载 configfs,使得用户空间可以动态配置 USB Gadget 和其他内核对象。
  • 它是 Android/Linux USB 功能配置的基础,如果没有挂载,USB Gadget 相关的脚本(如你之前问的 init.usb.rc 脚本)就无法正常工作。
  • 通常在 Android 启动时由 init 进程自动挂载,但在某些定制场景可能需要手动执行。

脚本

本文链接为:http://www.usbzh.com/article/detail-1559.html ,欢迎转载,转载请附上本文链接。

0 篇笔记 写笔记

USB Gadget CDC-ECM网卡实例
ECM和NCM网卡类似,也需要安装ECM驱动设备兼容ID为:USBClass_02&SubClass_06&Prot_00USBClass_02&SubClass_06USBClass_02创建脚本:#!/bin/bashmodprobe libcompos......
Linux Gadget驱动结构关系图
Linux Gadget驱动层级如下:Gadget Function驱动/gadget legacy驱动Gadget Compoiste驱动USB UDC驱动(USB Device Control)Gadget Function驱动/gadget legacy驱动function, 更加现......
gadget probe过程-以g_audio为例
g_audio中通过如下代码调用usb_composite_probe,其中入参为audio_driverstatic struct usb_composite_driver audio_driver = { .name = "g_audio", ......
configfs文件系统
Linux内核使用CONFIGFS配置项支持可以通过用户创建USB Compoiste Gadget。CONFIG_CONFIGFS_FS项用于支持配置文件系统。Menconfig -> FileSystems -> Psuedo File System -> {M}User......
Gadget legacy和Gadget Function的区别
在 Linux 的 USB Gadget 子系统中,Legacy GadgetGadget Function(FunctionFS 或 configfs) 是两种不同的实现方式,用于将 Linux 设备配置为 USB 外设(如 U 盘、网卡、串口等)。它们的区别主要体现在架构、使用方式和灵活性......
usb_gadget复合HID键盘和U盘实例
#!/bin/bash# 加载模块modprobe libcompositemodprobe usb_f_hidmodprobe usb_f_mass_storage.komount -t configfs none /sys/kernel/config# 创建 Gadgetcd......
usb gadget创建uvc相机脚本实例
#!/bin/bashmodprobe libcompositemodprobe usb_f_uvcmount -t configfs none /sys/kernel/configmkdir -p /sys/kernel/config/usb_gadget/g1cd /sys/kern......
USB Gadget CDC-ACM串口实例
符合USB ACM规范的设备由Windows提供其驱动程序usbser.sysuserser.infLinux Gadget对应的ACM驱动依赖为root@ATK-IMX6U:/sys/kernel/config/usb_gadget/g1# lsmodModule ......
USB Gadget CDC-NCM网卡实例
USG Gadget也提供了CDC-NCM网卡驱动程序,使用USB Gadget CDC-NCM驱动,这样在Windows主机端和Linux设备端都会创建一个USB网卡设备。root@ATK-IMX6U:/lib/modules/4.1.15# ifconfig -ausb0 Lin......
USB Gadget 打印机实例
打印机这一块应该要与实例相连,具体这一块没有研究过。生成的设备如下:设备模块如下:root@ATK-IMX6U:/lib/modules/4.1.15# lsmodModule Size Used byusb_f_printer 1137......
USB Gadget CDC-EEM网卡实例
从理论上来讲,EEM网卡Windows是应该支持的,实际上也确实不用像NCM、ECM需要手动安装驱动,系统会自动匹配兼容ID来进行安装驱动,但是驱动启动失败,这个Linux系统下就没有问题。#!/bin/bashmodprobe libcompositemodprobe usb_f_eemm......
USB Gadget LoopBack实例
Loopback Function 提供的功能简单,它分配了两个 bulk endpoint,所做的就是把 out_ep 接收到的数据转发到 in_ep。#!/bin/bashmodprobe libcompositemodprobe usb_f_ss_lbmount -t configfs......
USB Gadget RNDIS网络适配器实列
和NCM一样,由于兼容ID的问题,RNDIS网络适配器也需要手动安装驱动。其对应的驱动为:netrndis.infrndismp6.sys其创建脚本如下:#!/bin/bashmodprobe libcompositemodprobe usb_f_rndismount -t conf......
USB Gadget实例分析usb_function_instance和usb_function
linux usb gadtet的设备类驱动有两个很重要的概念:usb_function_instance和usb_function从名来上看,usb_function_instance像是usb_function的实例化,但实际是恰恰相反。这里以f_loopback为示例解释:USB设备信息执......
USB Gadget数据收发-批量传输
当执行命令ln -s functions/Loopback.0 configs/c.1之后,会调用loopback_alloc函数创建usb_functionstruct f_loopback { struct usb_function function; struct......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • CDC
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!