ffs.ready 块是什么意思? 📅 2026/8/3 21:38:48 在 Android 的 USB 架构中ffs.ready块指的是init.rc脚本里类似下面这样的触发条件块Trigger Blockon property:sys.usb.ffs.ready1 property:sys.usb.configadb ... # 里面写着建软链接 (f1/f2/f3)、写 idProduct、最后 write UDC ...用一句话概括它的意思“等待 ADB 用户态守护进程adbd完全准备就绪后再拉起 USB 硬件总线”的同步锁。一、 通俗比喻帮助直观理解把子 设备 开启 USB 过程比作开一家餐厅内核里的功能如 ACM 串口、Mass Storage就像厨师系统开机他们就在内核里站好了。ADB 功能ffs.adb就像外部聘请的跑堂服务员adbd进程需要开机后从磁盘加载并启动。sys.usb.ffs.ready1就是跑堂服务员向经理汇报“我已经穿好工作服、站在桌子旁准备好接单了”ffs.ready块就是经理听到汇报后才执行的动作——“好服务员就位了现在开大门写 UDC 拉高 D 信号迎接客人主设备 /电脑”如果服务员还没站好经理就提前开大门客人主设备进来点单发 ADB 数据包就会因为没人接单而直接卡死或报错。二、 底层技术原理解析1. 什么是ffsffs是FunctionFSFunction Filesystem的缩写是 Linux 内核提供的一种特殊的虚拟文件系统。ACM 串口/U 盘代码全部写在 Linux内核态里内核启动了它们就直接可用。ADB 调试代码跑在 Android 的用户态即/apex/com.android.adbd/bin/adbd进程。adbd需要通过FunctionFS读写/dev/usb-ffs/adb/ep1和ep2端点文件来和内核交互。2.sys.usb.ffs.ready1是谁设置的开机时init进程挂载/dev/usb-ffs/adb目录。init进程启动adbd守护进程。adbd进程启动后去打开/dev/usb-ffs/adb/ep0控制端点、ep1输入端点和ep2输出端点。只要这三个端点文件成功打开adbd就会向系统抛出一个属性setprop sys.usb.ffs.ready 1。3.ffs.ready块在init.rc里的执行时序【开机 post-fs 阶段】 挂载 /dev/usb-ffs/adb │ ▼ 【启动 adbd 进程】 adbd 打开 ep0/ep1/ep2 端点文件 │ ▼ 【adbd 抛出属性】 setprop sys.usb.ffs.ready 1 │ ▼ 【触发 init.rc 的 ffs.ready 块】 ├── 1. 清理旧软链接 (rm f1/f2/f3) ├── 2. 写入 CD-ROM 和 1MB 镜像参数 ├── 3. 创建复合软链接 (f1mass_storage, f2ffs.adb, f3acm.gs2) └── 4. 【最后一步】 write UDC 11201000.usb0 (正式向主设备 宣告上电)三、 总结在你们的代码里ffs.ready块就是保护 USB 组合配置ums adb acm不被过早拉起的门锁。它确保了只有当 ADB 服务端点和串口端点全部在子设备 内部准备完毕后才一次性把干净的 Composite 描述符抛给主设备