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