2. R-Car硬件架构与启动链

R-Car SoC 的硬件架构与启动链是车载 Linux 平台集成的基础。理解多核布局、启动介质、安全启动校验以及调试接口,才能在后续移植 TF-A、U-Boot 和内核时快速定位问题。本节以 R-Car H3/M3 系列为参考对象,梳理从复位释放到 Linux 内核启动的完整路径。

一、Cortex-A/R/M 多核布局与职责划分

R-Car 采用异构多核架构,典型配置包含:4 个 Cortex-A57 或 A76 应用核(AP)、若干 Cortex-R7/R8 实时核(RP)、以及 Cortex-M 系列微控制器(如 M3 中的 CR7 与 CM33)。应用核运行 Linux、Android 或 QNX,负责 HMI、多媒体与网络;实时核运行 AUTOSAR 或 RTOS,承担 CAN、以太网时间敏感任务;M 核通常作为系统控制器(SCU)或安全岛,管理电源、时钟与复位。

多核之间通过 SCIF(Serial Communication Interface with FIFO)和 SCU(System Control Unit)交互。SCIF 提供核间串行通信通道,常用于 A 核与 R 核之间的消息传递;SCU 则负责电源域、时钟门控和复位控制。在 Linux 侧,SCIF 通常以 mailbox 或 rpmsg 框架暴露给驱动,SCU 通过 PSCI 或 SoC 特定驱动访问。

二、BootROM 与安全启动流程

上电复位后,首先执行的是固化在芯片内部的 BootROM。BootROM 根据启动模式引脚(MD0-MD7)选择启动介质,常见包括 QSPI Flash、eMMC、SD 卡和串口下载模式。BootROM 会从介质偏移 0 处读取初始加载程序(IPL),并校验其头部签名。

安全启动分为三个阶段:BootROM 验证 IPL 的 RSA 签名;IPL 验证 TF-A BL2 的签名;BL2 验证 BL31、BL33(U-Boot)及后续镜像。若任一阶段签名校验失败,芯片会进入错误状态或回退到备用启动介质。实际项目中,密钥通常烧录在 OTP 区域,签名工具使用 Renesas 提供的 rcar_gen3_flash_writer 或 fiptool 生成带签名的镜像。

注意:启用安全启动后,调试串口可能被锁定,需提前保留 JTAG 或串口下载模式作为恢复通道。

三、TF-A 与 U-Boot 启动阶段

TF-A(Trusted Firmware-A)在 R-Car 上分为 BL1、BL2、BL31 和 BL33。BL1 位于 BootROM 之后,负责初始化安全环境;BL2 加载并验证 BL31 与 BL33;BL31 是运行时安全固件,提供 PSCI 服务;BL33 即 U-Boot。U-Boot 阶段完成 DDR 初始化、外设驱动加载、环境变量读取,最终加载 Linux 内核与设备树。

典型启动日志如下:

NOTICE:  BL1: v2.7(debug):R-Car H3
NOTICE:  BL2: v2.7(debug):R-Car H3
NOTICE:  BL31: v2.7(debug):R-Car H3
U-Boot 2021.10 (Jan 01 2024 - 00:00:00 +0000)
DRAM:  4 GiB
Loading Kernel from mmc 0:1...
Starting kernel ...

若 BL2 校验失败,日志会停在 BL2: Failed to verify image;若 BL31 未正确加载,U-Boot 可能无法启动从核。调试时应先确认各阶段镜像的加载地址与签名是否匹配。

四、串口与 JTAG 调试接口

R-Car 默认使用 SCIF 作为调试串口,常见波特率 115200 8N1。在 U-Boot 中通过 setenv baudrate 115200 设置,内核命令行使用 console=ttySC0,115200n8。若串口无输出,先检查 SCIF 引脚复用、时钟使能和电平转换电路。

JTAG 接口用于更底层的调试,如 BootROM 阶段挂起、DDR 初始化失败或安全启动异常。R-Car 支持 CoreSight 架构,可通过 Lauterbach 或 OpenOCD 连接。典型连接信号包括 TCK、TMS、TDI、TDO、TRST 和 SRST。使用 JTAG 时需注意:安全启动启用后,部分调试寄存器会被锁定,需通过认证解锁。

R-Car 启动链与多核调试接口 BootROM MD引脚选择介质 IPL RSA签名校验 TF-A BL2 加载BL31/BL33 U-Boot BL33 校验 校验 校验 TF-A BL31 PSCI / 安全运行时 Linux Kernel + Device Tree 异构多核布局 Cortex-A57 ×4 Linux / HMI / 多媒体 Cortex-R7 ×2 RTOS / CAN / 实时 Cortex-M3 SCU / 电源时钟 SCIF SCU 调试接口 SCIF 串口 ttySC0, 115200n8 JTAG (CoreSight) TCK/TMS/TDI/TDO 串口下载模式 恢复通道 串口日志 JTAG挂起 恢复

五、启动链排障要点

实际调试中,常见问题集中在三处:一是 BootROM 无法识别启动介质,表现为串口无任何输出,需检查 MD 引脚电平和介质供电;二是 BL2 签名校验失败,日志提示 verify failed,需确认密钥与签名工具版本一致;三是 U-Boot 加载内核后卡死,通常与设备树中 chosen 节点的 stdout-path 或内存节点地址不匹配有关。

建议在开发阶段保留串口下载模式作为恢复手段,并在 TF-A 编译时开启 DEBUG=1 与 LOG_LEVEL=40,以便输出各阶段详细日志。JTAG 连接时,先确认 SRST 与 TRST 时序,再通过 OpenOCD 的 scan_chain 命令验证 TAP 控制器是否被正确识别。

若串口输出乱码,优先检查波特率与时钟源是否匹配;R-Car 的 SCIF 时钟通常来自 CPG,需在设备树中正确配置 clock-frequency。