Troubleshooting Knowledge Base

车机互联常见问题与解决方向

记录 Apple ATS、iAP2、Apple EA、Android Auto、MTK Android Vendor、SELinux 与 FunctionFS 项目中高频出现的问题。每条记录都按“现象—优先检查—解决方向—常用工具”组织。

ATS ACK TimeoutAccessory Not SupportedFunctionFS ep0init.svc restartingSELinux connectto

Field Records

经典问题与解决方向

以下内容按问题现象、优先检查项和解决方向整理。实际项目仍需结合原始抓包、日志、代码和硬件环境确认根因。

01

Apple ATS / USB

ATS Capture 出现 ACK Response Timeout

典型现象

ATS 在 USB 测试或 iAP2 通信阶段记录 ACK Response Timeout,设备可能继续保持 USB 连接,但测试用例停止、重试或失败。

优先检查

  • 确认日志中的 ACK 属于 USB 事务层还是 iAP2 链路 / 协议层
  • 对齐 ATS Capture、Beagle USB 480、FunctionFS 与 Daemon 日志时间戳
  • 检查 OUT 数据是否到达端点、用户态是否读取、IN 响应是否排队
  • 检查持续 NAK、STALL、短包、帧长度、序号和状态机等待

解决方向

  • 若总线已传输但协议 ACK 缺失,检查协议线程阻塞、帧校验、序号和响应队列
  • 若端点持续 NAK / STALL,检查 FunctionFS 端点、缓冲区、Daemon 生命周期和 USB HAL 时序
  • 建立专用 RX/TX 队列与单调时钟超时,避免认证操作或日志写入阻塞通信线程
常用工具Apple ATSATS CaptureBeagle USB 480FunctionFS logDaemon log
02

Apple iAP2

iPhone 显示 Accessory Not Supported

典型现象

USB 枚举后 iPhone 弹出“不支持此配件”,或连接很快被系统关闭。

优先检查

  • USB Descriptor / Configuration / Interface 是否匹配产品设计
  • iAP2 Identification 信息与产品配置是否一致
  • MFi Authentication 是否完成且超时策略正确
  • FunctionFS BIND / ENABLE 后是否稳定保持

解决方向

  • 按枚举、Identification、Authentication、Session 顺序逐层定位
  • 修正描述符、产品标识、认证芯片通信或协议状态机
  • 使用同一手机与线材复现并执行 ATS 相关回归
常用工具Apple ATSBeagle USB 480iAP2 logMFi chip log
03

MFi Authentication

Challenge / Response 认证超时

典型现象

认证芯片可被识别,但挑战响应阶段超时、返回长度异常或偶发失败。

优先检查

  • I²C / SPI 总线是否有 NACK、时钟拉伸或访问冲突
  • 认证操作是否阻塞主协议线程
  • 证书读取、响应长度和错误处理是否完整
  • 上电、复位和并发访问时序

解决方向

  • 把芯片访问封装为独立状态机并设置明确超时
  • 对总线访问加锁并记录每一步耗时与错误码
  • 避免在 iAP2 收发关键线程中同步执行长耗时操作
常用工具Logic AnalyzerMFi chip logATS CaptureDaemon timing
04

Apple EA / Bluetooth

经典蓝牙已配对,但 EA Session 不建立

典型现象

iPhone 与外设完成配对,设备也显示连接,但 iOS App 找不到附件或 EASession 打不开。

优先检查

  • SDP / Protocol String 是否与 App 声明一致
  • RFCOMM 通道是否建立并保持
  • iAP2 Identification / Authentication 是否完成
  • USB 与 Bluetooth 双传输是否发生互斥冲突

解决方向

  • 分别验证配对、RFCOMM、iAP2、EA Protocol Session 四个阶段
  • 统一外设端 Protocol String、App Info.plist 与 Session 配置
  • 清理旧连接状态并验证断连重连
常用工具Bluetooth HCI logRFCOMM logEA Daemon logiOS App log
05

Android USB

FunctionFS 目录只有 ep0

典型现象

/dev/usb-ffs/ 中只有 ep0,看不到用于数据通信的 ep1、ep2 等端点。

优先检查

  • 用户态是否已成功向 ep0 写入有效 Descriptors 与 Strings
  • 描述符版本、长度、端点数量和方向是否正确
  • Daemon 是否在写入后退出或被 SELinux 阻止
  • ConfigFS function 与 configuration 链接是否正确

解决方向

  • 先验证描述符写入返回值,再检查端点生成
  • 将 ep0 初始化与业务线程解耦并记录 lifecycle
  • 确认 SELinux、文件权限和 USB Gadget HAL 时序
常用工具dmesgFunctionFS logstraceConfigFS nodes
06

Android USB

FunctionFS BIND 后立即 UNBIND

典型现象

Daemon 日志中出现 BIND,随后很快 UNBIND,主机侧反复枚举或功能消失。

优先检查

  • Daemon 是否崩溃、关闭 ep0 或退出主循环
  • UDC / Gadget HAL 是否切换配置
  • 描述符或 SET_CONFIGURATION 处理是否失败
  • sys.usb.ffs.ready 与 function ready 时序

解决方向

  • 保持 ep0 与数据端点生命周期稳定
  • 修正 init.rc、property 与 Gadget HAL 的启动顺序
  • 在 UNBIND 时完整清理并支持幂等重建
常用工具FunctionFS lifecyclelogcatdmesggetprop
07

Android Vendor

init.svc. 一直 restarting

典型现象

Vendor Daemon 开机后立即退出,init 持续拉起,服务状态在 running 与 restarting 之间切换。

优先检查

  • 查看退出码、signal 和 linker 缺库信息
  • 核对 Android.bp 安装路径、依赖库和启动参数
  • 检查设备节点、Socket、Property 与 SELinux AVC
  • 确认服务 class 和依赖启动顺序

解决方向

  • 先让进程稳定启动,再逐项恢复硬件与协议初始化
  • 为关键初始化步骤增加错误日志和退避重试
  • 修正动态库、权限、配置路径或资源依赖
常用工具logcatdmesgps -AZreadelf / ldd-like check
08

SELinux / IPC

Unix Socket 存在,但客户端 connect() Permission denied

典型现象

/dev/socket 下文件权限看似正确,App 或 JNI 客户端仍无法连接 Vendor Daemon。

优先检查

  • 客户端 SELinux Domain 与 Socket Type
  • 是否缺少 unix_stream_socket connectto
  • Socket 文件 create / getattr / write 与服务端 accept 权限
  • seapp_contexts / mac_permissions.xml 是否把 APK 映射到预期 Domain

解决方向

  • 同时修正 Linux DAC 与 SELinux MAC 权限
  • 按 source domain、target type、class、permission 分析 AVC
  • 只授权指定 App Domain,避免泛化到所有应用
常用工具audit AVCls -lZps -AZsepolicy files
09

Android Auto USB

手机已连接 USB,但 Projection 不启动

典型现象

手机识别到 Head Unit 或进入 Accessory Mode,但 Android Auto 界面不出现,GAL Session 不继续。

优先检查

  • AOAP / USB 模式切换是否完成
  • GAL 服务和 Channel 初始化是否成功
  • 权限、时间同步、音频与显示能力是否满足前置条件
  • PCTS / QSuite 对应失败项和系统日志

解决方向

  • 把 USB 建链与 GAL Session 分开定位
  • 按 Control、Media、Input 等 Channel 检查初始化顺序
  • 修正 HAL / Service 依赖和能力报告
常用工具PCTSQSuiteADB / logcatUSB analyzer
10

Android Auto Wireless

无线 Android Auto 休眠唤醒后无法重连

典型现象

首次连接正常,车辆休眠或网络切换后,蓝牙存在但 Wi-Fi / Projection 无法恢复。

优先检查

  • Bluetooth 触发、Wi-Fi association、DHCP / IP 与 GAL Session 各阶段
  • 旧 socket、route、P2P group 与 session 是否清理
  • Suspend / Resume 后网卡和服务状态
  • 手机端是否保留失效连接记录

解决方向

  • 实现可重入的断连清理和分阶段重连状态机
  • 为每一阶段设置独立超时、重试和失败回退
  • 覆盖点火、休眠、飞行模式、热点切换和多手机场景
常用工具HCI snooptcpdumpwpa logsGAL log

Data Package

提交问题时建议准备的资料

资料越完整,越容易在第一次分析中确定故障层和复现路径。

版本与环境

  • 手机型号与系统版本
  • 固件 / BSP / SDK 版本
  • 有线 / 无线与线材环境

时间线日志

  • ATS / PCTS / QSuite 结果
  • Daemon / logcat / dmesg
  • USB / Bluetooth / Wi-Fi 抓包

复现步骤

  • 从断电或清状态开始
  • 每一步操作与时间点
  • 期望结果和实际结果