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 根目录
二、交叉编译工具链
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
五、整体环境关系
下图把主机侧工具、目标侧多核镜像与调试通道放在同一张关系图中,便于对照检查“哪一层缺了什么”。
六、常见配置问题与判断依据
环境搭建阶段最容易踩的坑集中在“版本错配”和“路径未加载”两类。可用下面的检查表快速定位:
| 现象 | 可能原因 | 验证方法 |
|---|---|---|
编译报 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 剩余空间 |
完成以上配置后,一个可用的 Jacinto 开发环境应具备:主机能交叉编译 A72 应用与 R5F 固件;能通过 Docker 复现 Yocto 构建;能通过串口看到 U-Boot 与内核启动日志;能通过 CCS 连接并调试 R5F/C7x;能通过 gdbserver 调试 Linux 应用。这五条同时成立,才说明环境真正闭环,可以进入后续的雷达与视觉多传感器融合开发。