3. 开发环境搭建

Jacinto ADAS 平台的开发环境不是“装一个 IDE”那么简单,它由一条从主机到板端的工具链构成:主机侧需要 Linux 编译环境、Code Composer Studio(CCS)与器件支持包;板端需要可启动的 SD 卡、串口控制台与 JTAG 调试通道;应用层还需要 Vision Apps SDK 与 Edge AI SDK 提供感知、深度学习推理与可视化示例。本节按“先打通启动与调试,再叠加应用 SDK”的顺序展开,每一步都给出可观察的验证依据。

一、主机环境与 SDK 安装

TI 为 Jacinto 提供两类 Processor SDK:Processor SDK RTOS(PDK、MCU 侧驱动、RTOS 例程)与 Processor SDK Linux(Linux 内核、U-Boot、文件系统、ARM 侧驱动)。ADAS 视觉链路通常同时使用两者:A72 上跑 Linux/QNX 或 RTOS 做应用与调度,R5F、C7x/DSP 上跑 RTOS 做实时感知与视觉预处理。因此建议在 Ubuntu 20.04/22.04 LTS 主机上同时安装两套 SDK,并保持版本号一致(例如 Processor SDK 09_xx 系列),避免 IPC、固件与内核模块版本错配。

安装前先准备依赖,再执行 SDK 安装脚本。以下命令为示例,实际路径与版本号需按下载到的安装包替换:

sudo apt update
sudo apt install -y build-essential git python3 python3-pip \
  flex bison libssl-dev bc u-boot-tools device-tree-compiler \
  libncurses5-dev rsync cpio

# 安装 Processor SDK Linux(示例)
chmod +x ti-processor-sdk-linux-adas-j721e-evm-09_00_00_00-Linux-x86-Install.bin
./ti-processor-sdk-linux-adas-j721e-evm-09_00_00_00-Linux-x86-Install.bin

# 安装 Processor SDK RTOS(示例)
chmod +x ti-processor-sdk-rtos-j721e-evm-09_00_00_00-Linux-x86-Install.bin
./ti-processor-sdk-rtos-j721e-evm-09_00_00_00-Linux-x86-Install.bin

安装完成后,用环境脚本把交叉编译器、PDK 路径、目标文件系统路径导入当前 shell:

cd ~/ti-processor-sdk-linux-adas-j721e-evm-09_00_00_00
source environment-setup
echo $TI_SDK_PATH
which aarch64-linux-gnu-gcc

若 aarch64-linux-gnu-gcc --version 能输出版本信息,说明 Linux 侧交叉工具链可用;RTOS 侧则通过 pdksetupenv.sh 设置 PDK_INSTALL_PATH,并用 gmake -s 编译一个 pdk/packages/ti/drv/uart 例程验证。判断标准不是“命令没报错”,而是能在 pdk/packages/ti/binary 下找到生成的 .xer5f 或 .xe66 可执行文件。

二、Code Composer Studio 与 JTAG 调试

CCS 用于加载 R5F、C7x、A72 各核的固件、查看寄存器与内存、设置断点。安装 CCS 时勾选 Jacinto J721E 器件支持与 TI Emulators,安装完成后在 Window → Preferences → Code Composer Studio → Build → Compilers 中确认能识别到 SDK 自带的编译器。JTAG 侧需要连接 XDS110 或 XDS560v2 仿真器,并在 CCS 的 Target Configuration 中选择 J721E_GP 对应的 GEL 文件,GEL 负责上电时钟、DDR 与核间复位序列。

一个常见的验证动作是:新建 J721E_GP.ccxml,连接目标后依次对 MCU_R5F0_0、MCU_R5F0_1、A72_0 执行 Connect。若 A72 能停在 U-Boot 或内核入口,说明 JTAG 链路与 GEL 初始化正常。若连接失败,优先检查仿真器驱动、板卡启动模式拨码是否处于 JTAG/无启动模式,以及 GEL 中的 DDR 配置是否与板卡实际内存一致。

三、SD 卡启动与 UART 控制台

SD 卡启动是 ADAS 板最常用的“可复现”启动方式。制作时把 SD 卡分为两个分区:FAT32 的 boot 分区放 tiboot3.bin、tispl.bin、u-boot.img 与设备树;ext4 的 rootfs 分区放根文件系统。写入后把启动模式拨到 SD 启动,上电即可从 UART 看到 SPL、U-Boot、内核的完整日志。

UART 控制台通常使用板载 USB 转串口,参数为 115200-8-N-1,无流控。Linux 主机上可用 minicom -D /dev/ttyUSB0 -b 115200 或 picocom -b 115200 /dev/ttyUSB0。判断启动成功的依据是:U-Boot 打印 Hit any key to stop autoboot,随后内核解压、驱动加载,最终出现登录提示或 root@j721e-evm:~#。若卡在 Starting kernel ...,多半是设备树或 rootfs 分区不匹配;若完全没有 SPL 输出,则检查 SD 卡分区格式与启动拨码。

Jacinto ADAS 开发环境:主机工具链 → 板端启动 → 调试与 SDK 验证 主机(Ubuntu 20.04/22.04) Processor SDK Linux + RTOS Code Composer Studio + Emulator aarch64 / R5F / C7x 交叉编译 environment-setup / pdksetupenv.sh J721E ADAS 板端 SD 卡:boot(FAT32) + rootfs(ext4) UART 控制台 115200-8-N-1 JTAG:XDS110 / XDS560v2 A72 / R5F / C7x 多核 应用层 SDK Vision Apps SDK Edge AI SDK(TIDL / 模型) OpenVX / TIOVX 节点图 感知 / 推理 / 显示示例 烧写/部署 安装/运行 SD 卡启动链路(上电 → 应用) ROM Code tiboot3.bin (SPL) tispl.bin u-boot.img Kernel + DTB rootfs 关键验证判据 UART 出现 SPL → U-Boot → 内核日志,最终进入 shell CCS 能 Connect A72/R5F/C7x,断点可命中 Vision Apps 示例可跑通并输出图像/日志 Edge AI 模型推理输出类别与置信度合理

四、Vision Apps SDK 与 Edge AI SDK 安装与验证

Vision Apps SDK 建立在 Processor SDK RTOS 之上,提供 OpenVX/TIOVX 节点图、相机采集、ISP、显示与感知示例。安装时通常把 Vision Apps 仓库放在 vision_apps 目录,并通过 build_flags.mak 指定 PSDK_PATH、PDK_PATH 与目标平台 J721E。编译命令示例:

cd vision_apps
make -s -j8 vision_apps
# 生成固件与可执行文件
ls out/J721E/R5F/FREERTOS/release/
ls out/J721E/C71/RTOS/release/

验证 Vision Apps 是否可用,最直接的方式是运行一个单相机采集加显示的示例,观察 UART 是否打印帧率、分辨率与节点状态。若出现 app_init 失败,常见原因是固件未通过 app_load 正确加载到 R5F/C7x,或 IPC 共享内存地址与 Linux 设备树中的 reserved-memory 不一致。

Edge AI SDK 负责把训练好的模型(ONNX、TFLite)经 TIDL 编译为可在 C7x/MMA 上运行的二进制,并提供 Python/C++ 推理示例。安装后先确认 TIDL 工具链与模型导入脚本可用,再用一个轻量模型做端到端验证:

# 示例:导入 ONNX 模型并编译为 TIDL 产物
python3 tidl_model_import.py --model model.onnx --output_dir tidl_out
# 在板端运行推理示例
./edgeai_benchmark --model tidl_out --input test.jpg

判断 Edge AI 验证是否通过,不能只看程序退出码,而要看三项:推理输出的类别与置信度是否与主机侧参考结果一致;单帧耗时是否落在预期区间(例如示例模型在 C7x 上为几十毫秒量级,具体取决于模型与频率);以及内存占用是否超过 TIDL 配置的 reserved-memory 上限。若推理结果明显异常,优先检查输入预处理(归一化、通道顺序、尺寸)是否与训练时一致。

建议把“SDK 版本、GEL 文件、设备树、TIDL 配置”四者视为一个整体版本集合。ADAS 项目中最难排查的问题往往不是代码错误,而是四者中某一个版本不一致导致的启动失败或推理异常。
JTAG 连接前务必确认板卡启动模式与 GEL 中的 DDR 配置匹配;在 DDR 未初始化时直接 Connect A72,可能读到全 0 或触发异常,误判为硬件故障。