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
插入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、设备驱动等)。它通常用于:
- USB Gadget 配置(如 Android 的 USB 功能切换:MTP、ADB、RNDIS 等)。
- 动态内核模块管理(如 SCSI 设备、虚拟网络设备等)。
- 与
sysfs的区别:sysfs用于查看和设置内核对象(只读或有限写入)。configfs用于动态创建、修改和删除内核对象(如 USB 功能配置)。debugfs专为调试设计,提供更灵活的内核数据访问。
为什么需要挂载 configfs?
在 Android/Linux 的 USB Gadget 架构中,configfs 用于:
- 动态创建 USB Gadget(如
g1)。 - 配置 USB 功能(如
ffs(FunctionFS)、mtp、rndis等)。 - 设置 USB 属性(如厂商 ID、产品 ID、字符串描述符等)。
如果 configfs 未挂载,USB Gadget 相关的配置(如 /config/usb_gadget/g1/)就无法访问,USB 功能也无法切换。
实际应用场景
- Android 的 USB 功能切换(如 MTP、ADB、PTP 等):
mount -t configfs none /sys/kernel/config cd /sys/kernel/config/usb_gadget mkdir g1 # 创建 USB Gadget - USB 网络共享(RNDIS):
echo rndis > /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409/configuration - 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进程自动挂载,但在某些定制场景可能需要手动执行。
脚本
- https://www.ti.com/lit/an/spracb5/spracb5.pdf
- https://www.kernel.org/doc/Documentation/usb/gadget_configfs.txt
- https://www.spinics.net/lists/linux-usb/msg76388.html
USB Gadget






