🦘 HQ1项目 P301车型 实车联调 IPC 通道排查 Checklist v0.2

8.2 VM 间三通道 + 7.4 R↔A 四子通道 · 7 通道全链路 · 显示+声音异常排查 P0 锁死
来源 玉洁 6/30 19:18-19:25 PDT 生成 2026-06-30 19:48 PDT commit 2f09eeb

📄 文档信息

性质实车联调现场操作手册 / 8 组共用 / 一键 dump
适用阶段 3 收口 + 阶段 4 全域联调
读者8 组组长 + 马鹤(MCU A 核) + 恒润(MCU R 核) + 现场实施工程师
关联 • 6-26 IPC rpmsg 排查思路 v0.1(方法论,本份是操作手册)
• V0.5 架构图 IPC Framework 卡(bad · 6/24 台架测试不通)
• 6/30 实车联调上下文:显示+声音功能批量异常

📝 变更日志

版本时间变更
v0.16/30 19:23飞书初版 · 4 通道 × 4 维度
v0.26/30 19:25 • 合并 7.4 R 核 ↔ A 核 4 子通道
• 通道 4 拆 4 子通道(4.1/4.2/4.3/4.4)
• 新增环形缓冲区 + IPI 排查维度
• 6/9 必问孙强 5 问

0️⃣ 排查前置(8 组执行前必做,1 分钟)

#动作命令
0.1清空历史日志adb logcat -c
0.2记现场时间戳基准adb shell date > /sdcard/t0.txt
0.3现场异常发生时刻手动记到 log.txt(谁/何时/现象)
0.4异常期间不要复位,先抓现场再复位

1️⃣ 4 通道 × 4 维度 主排查矩阵

横轴 = 8.4 三个安全机制 + 业务数据,纵轴 = 8.2/8.3 四个通道

通道 \\ 维度 E2E 端到端保护
(CRC + 序号)
心跳超时检测 SMMU 静态配置 业务数据正确性
通道 1 仪表数据同步
SafetyLinux → 副屏 AAOS
logcat | grep -iE "E2E|CRC|sequence"
CRC mismatch / seq error
logcat | grep -iE "heartbeat|timeout"
heartbeat timeout
dmesg | grep -iE "SMMU|IOMMU"
SMMU fault
踩油门,看副屏车速同步;拍照录屏
通道 2 智驾状态同步
SafetyLinux → 中控 SR 区
同上(过滤 SR|perception) 同上(过滤 plan|sr) 同上 看 SR 区规划线/障碍物是否刷新
通道 3 时间同步
虚拟 PTP / 共享时间基准
logcat | grep -iE "PTP|phc|offset"
offset > 1ms
ptp4l / chrony 状态查询 同上 音画同步主观测试
通道 4 跨核通信
A 核 ↔ R 核(Mailbox + SRAM)
logcat | grep -iE "mailbox|E2E" logcat | grep -iE "R-core|heartbeat" dmesg | grep -iE "SMMU.*R" 方向盘按键 → 看方控是否响应
判定标准(每格):
✅ 正常 = 命令无报错 + 业务数据刷新
❌ 异常 = 触发关键词 + 业务不刷新(要立即升级到第 5 节)

1️⃣.5 通道 4 细分:7.4 R 核 ↔ A 核 4 子通道 v0.2 新增

7.4 节机制统一:片上 共享内存(环形缓冲区) + 中断(IPI / Mailbox)
4 条独立通道,机制相同但语义不同,必须独立测

7.4 4 子通道总览

子通道 方向 业务内容 6/30 实车异常表现 优先级
4.1 整车 CAN 信号 R → A 车身/底盘/动力 CAN 报文,周期性刷新 仪表/中控数据不刷新(显示异常主嫌疑);报警音不触发(声音异常) P0
4.2 智驾控制指令 A → R SafetyLinux 发出智驾控制量 智驾失效(阶段 3 后主查) P2
4.3 车机控制指令 A → R AAOS VHAL 透传用户操作(方向盘/旋钮/按键) 方向盘按键/音量旋钮/蓝牙电话按键失灵(声音异常主嫌疑) P0
4.4 诊断请求 双向 UDS / 诊断透传 诊断工具失灵(不直接影响显示/声音) P2

7.4 4 子通道根因路径(显示+声音异常锁死)

📺 显示异常根因路径(主嫌疑):

R 核(CAN 总线)→ [7.4-4.1 共享内存 ring buffer + IPI] → A 核 SafetyLinux         → [8.2 通道 1 共享内存 + Doorbell] → AAOS 副屏         → 显示图层合成

任意一段断 = 仪表/中控数据不刷新

🔊 声音异常根因路径(主嫌疑):

方向盘按键 → AAOS VHAL → [7.4-4.3 共享内存 + IPI] → R 核执行         → 蓝牙电话 / 音频 / AMP

4.3 断了 = 用户按键没反应,自然也没声音

7.4 4 子通道 × 5 维度 排查矩阵 v0.2 新增

子通道 \\ 维度 E2E 端到端 心跳/超时 环形缓冲区 IPI/Mailbox 中断 业务数据
4.1 整车 CAN 信号 logcat | grep -iE "CAN.*CRC|CAN.*E2E"
CRC mismatch
logcat | grep -iE "CAN.*timeout"
CAN timeout
cat /proc/.../can_ringbuffer (路径问中兴)
ring overflow
cat /proc/interrupts | grep -iE "ipi.*can"
IPI lost
踩油门,看仪表车速;打方向,看转向指示;按双闪,听声音
4.2 智驾控制指令 logcat | grep -iE "plan.*E2E|control.*CRC" logcat | grep -iE "plan.*timeout" cat /proc/.../plan_ringbuffer cat /proc/interrupts | grep -iE "ipi.*plan" 看智驾规划线是否下发到 R 核执行
4.3 车机控制指令 logcat | grep -iE "VHAL.*E2E|key.*CRC" logcat | grep -iE "VHAL.*timeout" cat /proc/.../vhal_ringbuffer cat /proc/interrupts | grep -iE "ipi.*vhal" 方向盘音量+/-,Mode 键,蓝牙电话接听/挂断
4.4 诊断请求 logcat | grep -iE "UDS.*E2E|diag.*CRC" logcat | grep -iE "diag.*timeout" cat /proc/.../diag_ringbuffer cat /proc/interrupts | grep -iE "ipi.*diag" 跑一遍 UDS 诊断命令,看响应
⚠️ 4.1 和 4.3 = P0 必查 — 显示+声音异常主嫌疑
⚠️ 环形缓冲区状态路径在 v0.1 是问号,6/9 跟中兴要实际路径

2️⃣ L0 共因层(批量异常时 T+0 必查)

优先于上面 4 通道 — 显示/声音同时坏 = 共因 > 特性

#动作命令正常 vs 异常
E.1 系统稳定性 adb shell uptime + adb shell dmesg | grep -iE "panic|oops|reset" ✅ uptime > 1h · ❌ 有 panic 或频繁复位
E.2 Watchdog 状态 adb shell dumpsys watchdog ✅ 无 timeout · ❌ 有 timeout
E.3 跨域服务存活 adb shell dumpsys activity services | grep -iE "SafetyLinux|AAOS|IPC" ✅ 服务都在 · ❌ 有 crash
E.4 SoC 复位 adb shell cat /proc/reset_reason ✅ 正常断电 · ❌ 有 SoC 复位原因

3️⃣ 现场日志打包脚本(1 键 dump)

每个通道异常触发,1 键 dump 全套日志到本地 incidents/ 目录

#!/bin/bash
# 现场一键 dump,文件名带时间戳 + 通道名
# 用法: ./dump_incident.sh <通道编号 1-4-子通道>
# 例:   ./dump_incident.sh 4.1   (整车 CAN 信号)
CH=${1:-unknown}
TS=$(date +%Y%m%d_%H%M%S)
NAME="incident_ch${CH}_${TS}"
echo "[dump] start channel=$CH ts=$TS"

# 系统层
adb shell "dmesg > /sdcard/${NAME}_dmesg.log"
adb shell "cat /proc/uptime > /sdcard/${NAME}_uptime.log"
adb shell "cat /proc/reset_reason > /sdcard/${NAME}_reset.log"

# Android logcat
adb shell "logcat -d -b crash > /sdcard/${NAME}_crash.log"
adb shell "logcat -d -b main > /sdcard/${NAME}_main.log"
adb shell "logcat -d -b system > /sdcard/${NAME}_system.log"

# 跨域 / 显示 / 音频
adb shell "dumpsys activity services > /sdcard/${NAME}_svc.log"
adb shell "dumpsys SurfaceFlinger > /sdcard/${NAME}_sf.log"
adb shell "dumpsys media.audio_flinger > /sdcard/${NAME}_af.log"
adb shell "dumpsys media.audio_policy > /sdcard/${NAME}_ap.log"

# 7.4 跨核通信(v0.2 新增)
adb shell "cat /proc/interrupts > /sdcard/${NAME}_interrupts.log"
# ring buffer 状态:路径问中兴 6/9 之后补
# adb shell "cat /proc/.../ringbuffer_${CH} > /sdcard/${NAME}_ringbuffer.log"

# 拉回本地
mkdir -p ./incidents/
adb pull /sdcard/${NAME}_*.log ./incidents/
echo "[dump] saved: ./incidents/${NAME}_*.log"
每个异常 → 一键 dump → 8 组共享目录,8 组共用同一份现场数据

4️⃣ 异常判定 — bug vs 8.4 主动保护

🚨 8.4 安全机制主动丢数据 ≠ bug,是保护行为,先记下来不阻塞
现象 是 bug 的特征 是 8.4 保护的特征
副屏仪表数据丢 多个字段都丢 / 一直卡死 偶发 1-2 个字段 + E2E 日志有 CRC fail
中控 SR 区不刷新 全程不刷新 偶发 + 心跳超时触发
蓝牙电话无声 全程无声 偶发 + 通道降级日志
音画不同步 一直不同步 PTP offset > 1ms 报警
CAN 数据丢(4.1) 多个报文丢/全丢 偶发个别报文 + CAN CRC fail
方向盘按键失灵(4.3) 所有按键全失灵 偶发 1-2 个按键 + VHAL timeout

判定原则

5️⃣ 兜底升级路径

T+0    L0 共因层(E.1-E.4)  → 30 min 结论
       ↓ 有共因            ↓ 没共因
T+30m  全组拉群同步         进 1-4 通道排查矩阵
       ↓                  ↓
T+1h   升安全评审/项目      按通道异常触发 dump 脚本
       ↓                  ↓
T+2h   走 ca-api 红线     8 组共用 incidents/ 目录
       评审流程             跨组异常 → 大群同步
       ↓
       持续异常 + 8.4 日志 → 查物理通道(共享内存/DOORBELL/Mailbox)→ P0

6️⃣ 责任分工(8 组 × 4 通道 12 子通道)

通道主负责配合
1 仪表数据(VM 间) 组 3 多屏显示 + 组 7 AutoSar 组 1 整体架构
2 智驾状态(VM 间) 组 2 Hypervisor 智驾底座 + 组 3 多屏显示 Tomas(卓驭)
3 时间同步(VM 间) 组 1 整体架构 + 组 2 Hypervisor 组 2
4.1 整车 CAN 信号 马鹤(R 核) + 组 7 AutoSar 组 1 整体架构 + 组 3 多屏显示
4.2 智驾控制指令 Tomas(卓驭) + 组 2 智驾底座 马鹤(R 核)
4.3 车机控制指令 组 1 VHAL + 马鹤(R 核) 恒润(R 核)蓝牙/音频
4.4 诊断请求 组 8 系统运维 + 马鹤 组 7 AutoSar
L0 共因 组 1 整体架构 + 组 8 系统运维 8 组拉群

7️⃣ 待 lock 的 7.4 关键细节 6/9 必问

必带资料:notes/HQ1项目-P301车型-7.4-跨核通信-spec-v0.1.md (v0.2 后另起)
#问题影响
Q1 7.4 4 条子通道是共享一块共享内存(4 个 ring buffer)还是4 块独立内存? 共享 → 1 条挂了影响 3 条 · 独立 → 隔离好但占内存 → 影响 P0 评估
Q2 环形缓冲区大小? 有没有溢出风险? producer/consumer 速率匹配? 影响 4.1 整车 CAN 信号高频场景
Q3 IPI 优先级? 4 条子通道谁优先? 智驾控制 vs 整车 CAN 哪个优先? 影响 7.4 调度策略
Q4 Mailbox 寄存器路径? 排查命令要拿实际路径 决定 §1.5 4.1-4.4 排查矩阵的 ring buffer 状态命令能不能跑
Q5 共享内存物理地址? SMMU 静态配置里映射到哪? 有没有按通道分页? 决定 SMMU 隔离粒度

8️⃣ 关键 takeaway v0.2 增量

  1. 6/30 显示+声音异常,主嫌疑就是 7.4-4.1(CAN 信号)+ 7.4-4.3(车机控制) — 这两条挂了,所有跨域业务都断
  2. 通道 4 从 1 条拆成 4 条(v0.1 → v0.2 关键升级),checklist 责任分工也要拆到 4 个子通道,8 组重新对齐
  3. 环形缓冲区 + IPI 计数器 是 v0.2 新的排查抓手,6/9 跟中兴拿到具体路径
  4. 7.4 4 条通道是 1 块共享内存还是 4 块 = P0 风险评估依据,必问孙强
  5. 批量异常先 L0 后 1-4 — 共因导向,不要 8 组各查各的
  6. 8.4 主动保护 ≠ bug — 偶发 + 8.4 日志 = 记下不阻塞
  7. 现场异常不立即复位 — 先 dump 再复位
  8. 异常触发 dump 脚本 — 一键 8 组共享,避免重复抓现场
  9. ca-api bypass TEE — 实车联调时特定数据被异常丢弃或异常通过,先怀疑 TEE 状态(不写具体路径,按红线)

📎 附 A:7.4 4 子通道详细规格

A.1 整车 CAN 信号(R → A · 子通道 4.1) P0

内容
机制R 核周期性读取 CAN 总线 → 写入共享内存环形缓冲区 → IPI 通知 A 核
订阅方SafetyLinux(仪表)+ AAOS(中控/副屏)
典型周期5ms / 10ms / 20ms(取决于 CAN 报文类型)
数据内容车速/转速/油量/胎压/车门状态/灯光/转向角/双闪/手刹/...
E2E 保护CRC32 + 8-bit 序号
异常表现仪表数据不刷新 / 报警音不触发 / 中控控车按钮状态错

A.2 智驾控制指令(A → R · 子通道 4.2) P2

内容
机制SafetyLinux 发出智驾规划/控制量 → 写入共享内存 → IPI 通知 R 核
典型周期30ms / 50ms(BEV 帧周期)
数据内容规划线/目标加速度/制动请求/转向角/...
E2E 保护CRC32 + 16-bit 序号
异常表现智驾失效 / 规划线不下发 / 车辆不响应

A.3 车机控制指令(A → R · 子通道 4.3) P0

内容
机制AAOS VHAL 接收用户操作 → 写入共享内存 → IPI 通知 R 核
典型周期事件触发(非周期性)
数据内容方向盘按键(音量+/-/Mode/接听/挂断/语音)/旋钮/触屏/...
E2E 保护CRC16 + 8-bit 序号
异常表现方向盘按键失灵 / 蓝牙电话无声 / 方控失效

A.4 诊断请求(双向 · 子通道 4.4) P2

内容
机制UDS 诊断报文 → 写入共享内存 → IPI 通知对方
典型周期事件触发
数据内容UDS Service ID / DID / Response / ...
E2E 保护CRC16 + 8-bit 序号
异常表现诊断工具失灵 / 标定工具失灵 / 远程诊断失灵

📎 附 B:v0.1 → v0.2 变更说明

v0.1 v0.2 原因
通道 4 粒度 1 条(跨核通信) 4 条(7.4 子通道) 7.4 明确 4 条独立通道,业务语义不同
通道 4 优先级 单条无优先级 4.1/4.3 = P0,4.2/4.4 = P2 6/30 异常根因路径锁死
排查维度 4 个(E2E/心跳/SMMU/业务) 4 子通道 × 5 维度 7.4 增加环形缓冲区 + IPI 维度
6/9 待问 5 问 7.4 细节待 lock
责任分工 4 通道 × 8 组 12 子通道 × 8 组 通道 4 拆 4 子通道
异常判定 4 行 6 行 增加 4.1 CAN 丢 / 4.3 按键失灵
dump 脚本 11 类日志 12 类(+interrupts) 7.4 IPI 计数器需要
关联文档 V0.5 + 6-26 排查思路 V0.5 + 6-26 排查思路 + 7.4 spec(待) 7.4 spec 6/9 后另起