4. Jacinto软件开发环境搭建

Jacinto 系列(如 TDA4VM、DRA829)属于异构多核 SoC:内部同时包含 Cortex-A72 应用核(运行 Linux/QNX)、Cortex-R5F 实时核(运行 RTOS,承担安全与实时控制)、C7x/MMA 深度学习加速器,以及 MCU 域与主域两套电源/时钟/复位体系。因此“开发环境”不是单一工具,而是一套主机侧工具链 + 目标侧多操作系统镜像 + 调试与烧录通道的组合。本节按“先装什么、再编什么、最后怎么调”的顺序,把这条链路讲清楚。

一、主机环境与 SDK 获取

TI 官方推荐在 Ubuntu 20.04/22.04 LTS(x86_64)上搭建 Jacinto 开发环境,原因是 Processor SDK RTOS/Linux 的安装脚本、Docker 镜像与 Yocto 构建均以该发行版为基准验证。主机建议配置:8 核以上 CPU、32 GB 内存(Yocto 全量构建建议 64 GB)、至少 300 GB 可用磁盘(SDK 安装 + 构建产物 + Docker 镜像)。

Jacinto 的 SDK 分为两条主线,二者版本号必须匹配:

  • Processor SDK Linux (PSDKLA):提供 U-Boot、Linux 内核、设备树、根文件系统、Yocto 元层,用于 A72 侧。
  • Processor SDK RTOS (PSDKRA):提供 PDK、MCU+ SDK、RTOS 内核(TI-RTOS/FreeRTOS)、C7x 固件与视觉/雷达相关驱动,用于 R5F、C7x 侧。

安装时先执行 SDK 自带的依赖安装脚本,再运行安装器。以 PSDKLA 为例:

# 1. 安装主机依赖(SDK 包内自带脚本)
cd ti-processor-sdk-linux-jacinto-08_06_00_xx
sudo ./bin/setup-host-packages.sh

# 2. 运行安装器,指定安装目录
./ti-processor-sdk-linux-jacinto-08_06_00_xx-linux-x86-Install.bin
# 安装路径示例:/home/user/ti/psdkla-08.06.00

# 3. 加载环境变量(每次新终端都要执行)
cd /home/user/ti/psdkla-08.06.00
source environment-setup
echo $TI_SDK_PATH   # 应输出 SDK 根目录
PSDKRA 与 PSDKLA 必须使用同一“发布版本”(如 08.06.00),否则 R5F 固件与 Linux 侧 remoteproc 的 ABI 可能不匹配,表现为 R5F 无法启动或 IPC 通信超时。

二、交叉编译工具链

Jacinto 上运行的是 AArch64 Linux,主机是 x86_64,因此必须使用交叉编译器。SDK 内部已集成两套工具链,无需自行下载:

  • aarch64-none-linux-gnu-(GCC 9.x/11.x):编译 A72 侧 Linux 应用、内核模块。
  • arm-none-eabi-:编译 R5F/MCU 域的裸机或 RTOS 固件。

验证工具链是否可用,并确认目标架构:

aarch64-none-linux-gnu-gcc -v
aarch64-none-linux-gnu-gcc -dumpmachine
# 期望输出:aarch64-none-linux-gnu

# 编译一个最小测试程序
aarch64-none-linux-gnu-gcc -O2 -o hello hello.c
file hello
# 期望:ELF 64-bit LSB executable, ARM aarch64

若使用 CMake 构建视觉/雷达应用,需在 toolchain file 中显式指定编译器与 sysroot,避免误用主机 gcc:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER aarch64-none-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-none-linux-gnu-g++)
set(CMAKE_SYSROOT ${TI_SDK_PATH}/linux-devkit/sysroots/aarch64-oe-linux)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

三、Docker:把“环境可复现”固化下来

Jacinto SDK 的 Yocto 构建依赖大量特定版本的主机包(python3、gcc、chrpath、diffstat 等),直接在裸机上装容易污染系统。TI 提供官方 Docker 镜像,把 SDK 与依赖一起封装。典型用法:

# 加载 SDK 提供的镜像
docker load -i /path/to/psdkla-docker.tar

# 启动容器,挂载 SDK 与工作目录
docker run -it --rm \
  -v /home/user/ti/psdkla-08.06.00:/work/psdkla \
  -v /home/user/projects:/work/projects \
  --name jacinto-dev \
  ti/psdkla:08.06.00 /bin/bash

# 容器内构建 Linux 内核
cd /work/psdkla/board-support/linux-5.10.xx
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- ti_defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- -j16

Docker 的价值在于:同一镜像可在不同工程师机器上得到一致的构建结果,也便于 CI 中复用。注意容器内不要以 root 身份长期运行,建议用 --user $(id -u):$(id -g) 保持文件属主一致。

四、CCS 与调试工具链

Code Composer Studio(CCS)用于 R5F/C7x 侧固件的开发与调试,需安装对应器件支持包(Jacinto 器件包)与仿真器驱动。调试链路为:CCS → XDS110/XDS560 仿真器 → JTAG → Jacinto 目标板。关键配置点:

  • 在 CCS 中新建 Target Configuration(.ccxml),选择器件型号(如 TDA4VM),并指定仿真器类型。
  • 多核调试需加载 GEL 脚本,用于初始化 PLL、DDR、电源域;GEL 由 SDK 提供,路径通常在 pdk/packages/ti/drv/sciclient/tools/ccsLoadDmsc 附近。
  • R5F 固件通常先由 Linux 侧通过 remoteproc 加载,再用 CCS attach 到已运行的核进行调试,避免重复初始化。

Linux 侧调试则使用 GDB + gdbserver:目标板运行 gdbserver :1234 ./app,主机用交叉 GDB 连接:

aarch64-none-linux-gnu-gdb ./app
(gdb) target remote 192.168.1.100:1234
(gdb) break main
(gdb) continue

五、整体环境关系

下图把主机侧工具、目标侧多核镜像与调试通道放在同一张关系图中,便于对照检查“哪一层缺了什么”。

主机侧(Ubuntu x86_64) PSDKLA / PSDKRA 安装 + environment-setup Docker 镜像 Yocto 构建环境 aarch64 工具链 Linux 应用 / 内核 arm-none-eabi R5F / MCU 固件 CCS + XDS110 仿真器驱动 目标侧 Jacinto SoC(TDA4VM) Cortex-A72 ×2 Linux / QNX Cortex-R5F ×6 RTOS / MCU 域 C7x + MMA 视觉 / 深度学习 DDR / 外设 CSI2 / PCIe / CAN 镜像/固件 JTAG 调试与验证通道 CCS + GEL 脚本 R5F / C7x 多核调试 gdbserver + GDB A72 Linux 应用调试 串口 / 网络 U-Boot、内核日志 remoteproc R5F 固件加载 版本一致性检查点 PSDKLA 与 PSDKRA 发布号一致 · 工具链与 sysroot 匹配 · GEL 与器件型号匹配 · Docker 镜像与 SDK 同版本 任一不匹配,典型现象:R5F 启动失败、IPC 超时、内核模块 insmod 报 version magic 错误

六、常见配置问题与判断依据

环境搭建阶段最容易踩的坑集中在“版本错配”和“路径未加载”两类。可用下面的检查表快速定位:

现象 可能原因 验证方法
编译报 aarch64-none-linux-gnu-gcc: not found 未执行 source environment-setup echo $PATH 中应包含 SDK linux-devkit/bin
insmod 报 version magic 不匹配 内核模块与目标内核版本不一致 uname -r 与模块编译时内核源码版本对比
R5F 无法启动,dmesg 报 remoteproc 超时 PSDKRA 与 PSDKLA 版本不一致,或固件路径错误 检查 /lib/firmware 下固件名与设备树中 firmware-name 是否一致
CCS 连接目标失败 GEL 未加载或器件型号选错 在 CCS 中查看 Target Configuration 的器件与仿真器设置
Yocto 构建中途失败 主机缺少依赖或磁盘不足 用 Docker 镜像重建,检查 df -h 剩余空间
不要在同一台主机上混用多个 SDK 版本的环境变量。若需并行维护两个版本,建议分别放入不同 Docker 容器,或在切换时重新打开终端并重新 source 对应 SDK 的 environment-setup。

完成以上配置后,一个可用的 Jacinto 开发环境应具备:主机能交叉编译 A72 应用与 R5F 固件;能通过 Docker 复现 Yocto 构建;能通过串口看到 U-Boot 与内核启动日志;能通过 CCS 连接并调试 R5F/C7x;能通过 gdbserver 调试 Linux 应用。这五条同时成立,才说明环境真正闭环,可以进入后续的雷达与视觉多传感器融合开发。