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 卡分区格式与启动拨码。
四、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 上限。若推理结果明显异常,优先检查输入预处理(归一化、通道顺序、尺寸)是否与训练时一致。