Daemon 启动
init.rc 启动协议 Daemon,加载配置并准备 FunctionFS。
- 挂载 FunctionFS
- 打开 /dev/usb-ffs/
- 监控退出与重启
USB Gadget Engineering
处理从 FunctionFS 挂载、ep0 描述符、ConfigFS Function 绑定、UDC 枚举到 Bulk IN / OUT 数据通信的完整链路。
Engineering Flow
init.rc 启动协议 Daemon,加载配置并准备 FunctionFS。
打开 ep0,写入 Descriptors 与 Strings,等待数据端点生成。
设置 Gadget、VID/PID、strings、configuration,并绑定 ffs function。
选择 UDC 后主机执行 Reset、Descriptor、SET_CONFIGURATION 与 SET_INTERFACE。
通过 ep0 控制传输与 Bulk IN / OUT 端点进行双向协议数据交换。
处理 Disconnect、UNBIND、端点关闭、状态清理与重新枚举。
Daemon 退出时释放端点、移除 function、UDC unbind 并清理资源。
Architecture
Common Failures
通常需要检查描述符是否已正确写入、格式是否匹配以及 FunctionFS 状态。
检查 configs 链接、UDC 绑定、VID/PID、Configuration 和 Gadget HAL 状态。
结合 FunctionFS lifecycle、Daemon 退出、描述符错误和 USB HAL 时序分析。
FAQ
围绕项目范围、技术边界、实施条件和交付内容进行说明。
ep0 是控制端点。数据端点通常在用户态向 ep0 写入有效的 FunctionFS 描述符后创建,需同时检查描述符、Daemon 状态与 ConfigFS 绑定。
ConfigFS 用于内核侧 Gadget 与 Configuration 组合;FunctionFS 为用户态协议程序提供描述符、控制端点和数据端点接口。
可以。FunctionFS 可承载用户态 USB iAP2 / EA 协议服务,并与 Android Vendor Daemon、init.rc 和 SELinux 联动。