4. 开发环境搭建
在 Sitara 工业 HMI 项目中,图形加速能力最终要落到目标板上的 Linux 系统与 GPU 驱动上。开发环境搭建的核心目标不是“装几个软件”,而是建立一条从宿主机到目标板的可复现链路:宿主机能编译出 ARM 架构的可执行文件,目标板能运行带 GPU 驱动的根文件系统,并且通过串口能稳定观察启动与调试信息。本节围绕 SDK 获取、交叉编译工具链、Yocto/Processor SDK 以及目标板与调试串口连接展开。
一、SDK 获取:先确认芯片与 SDK 版本对应关系
TI 的 Sitara 系列(如 AM335x、AM437x、AM57x、AM62x 等)对应的 Processor SDK 版本不同,GPU 驱动与图形库的集成方式也有差异。获取 SDK 前应先确认三件事:目标芯片型号、目标 Linux 版本、以及是否需要图形加速(SGX 或 Rogue GPU)。以 AM335x 为例,其图形加速基于 PowerVR SGX530,对应的 Processor SDK Linux 通常提供 ti-sdk-am335x-evm 或通过 Yocto 构建的 tisdk-*-image。下载渠道主要有两个:TI 官网的 Processor SDK 下载页,以及 git.ti.com 上的 Arago/Yocto 层仓库。
建议在宿主机上建立统一的工作目录,例如 ~/ti-sdk/,把 SDK 安装包、工具链、Yocto 源码分层存放。下载后先校验 MD5 或 SHA256,避免因网络中断导致解压失败。SDK 安装包通常包含:交叉编译工具链、目标板根文件系统、内核源码、U-Boot 源码以及预编译的图形库。若使用 Yocto 自行构建,则只需获取 arago 与 meta-ti 等层,后续通过 bitbake 生成镜像。
二、交叉编译工具链:让宿主机产出 ARM 可执行文件
交叉编译工具链是宿主机与目标板之间的“翻译器”。TI SDK 自带的工具链一般位于 linux-devkit/ 目录下,例如 arm-linux-gnueabihf- 前缀的 gcc、g++、ld、objdump 等。使用前需要 source 环境脚本,把工具链路径加入 PATH:
cd ~/ti-sdk/linux-devkit
source environment-setup
arm-linux-gnueabihf-gcc -v
如果输出中显示 Target: arm-linux-gnueabihf,说明工具链可用。接下来用一个最小示例验证交叉编译是否真正产出 ARM 文件。编写 hello.c,内容为打印一行字符串,然后执行:
arm-linux-gnueabihf-gcc hello.c -o hello_arm
file hello_arm
若 file 输出包含 ELF 32-bit LSB executable, ARM, EABI5,说明编译成功。把 hello_arm 通过 scp 或 U 盘拷贝到目标板,执行 ./hello_arm,若能看到输出,则宿主机到目标板的编译链路已经打通。对于图形程序,还需要在编译时链接 GPU 相关库,例如 SGX 的 libGLESv2、libEGL,以及窗口系统库 libwayland-client 或 libX11。链接顺序和库路径必须与目标板根文件系统中的版本一致,否则会出现“宿主机编译通过、目标板运行报错”的典型问题。
三、Yocto/Processor SDK:构建带 GPU 驱动的根文件系统
Processor SDK 的 Yocto 构建系统是获得完整目标板系统的推荐方式。它把内核、U-Boot、根文件系统、GPU 驱动、图形库和示例程序统一编排,避免手工拼装带来的版本冲突。典型流程如下:
- 安装 Yocto 依赖:
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping。 - 获取 Arago 源码:
git clone git://arago-project.org/git/arago.git,并进入对应分支。 - 初始化构建环境:
MACHINE=am335x-evm source oe-init-build-env。 - 在
conf/local.conf中确认MACHINE与图形相关配置,例如启用sgx或rogue驱动包。 - 执行
bitbake tisdk-default-image或bitbake tisdk-base-image,等待构建完成。
构建产物通常位于 deploy/images/<machine>/ 下,包括 zImage、am335x-evm.dtb、u-boot.img 和根文件系统压缩包。若需要图形加速,应确认镜像中已包含 libgles、libegl、wayland 或 x11 相关包。可以通过 bitbake -e 查看变量,或在目标板上执行 ls /usr/lib/libGLESv2* 验证库是否存在。
四、目标板与调试串口连接:建立第一条可见链路
目标板上电前,先完成串口物理连接。Sitara EVM 通常提供 J1 或 J2 调试串口,电平为 3.3V TTL,不能直接接 RS-232。使用 USB 转 TTL 模块(如 CP2102、FT232)时,注意 TX/RX 交叉连接:模块 TX 接板子 RX,模块 RX 接板子 TX,GND 共地。连接后在宿主机查看设备节点:
dmesg | grep ttyUSB
ls /dev/ttyUSB*
若出现 /dev/ttyUSB0,即可用 minicom 或 picocom 打开串口。参数为 115200 波特率、8 数据位、无校验、1 停止位、无流控:
sudo minicom -D /dev/ttyUSB0 -b 115200
上电后应能看到 U-Boot 打印、内核启动日志和登录提示。若串口无输出,按以下顺序排查:确认 TX/RX 是否接反、GND 是否共地、波特率是否为 115200、USB 转 TTL 模块驱动是否加载、板子是否真正上电。若输出乱码,通常是波特率或时钟配置不匹配。串口打通后,就可以在 U-Boot 阶段观察启动参数,在内核阶段确认 GPU 驱动是否加载,例如搜索 sgx、pvr 或 drm 相关日志。
picocom -b 115200 /dev/ttyUSB0 | tee boot.log。这样每次修改内核或根文件系统后,都能快速定位启动差异。五、环境搭建完成后的最小验证闭环
当 SDK、工具链、Yocto 镜像和串口都就绪后,建议做一次最小闭环验证:宿主机交叉编译一个链接 EGL 的简单程序,拷贝到目标板,通过串口登录后运行,观察是否能够创建 EGL 上下文并打印 GPU 信息。若程序能运行且串口无报错,说明开发环境已经具备后续图形加速开发的基础条件。此时再进入具体的 GPU 驱动调试、图形库调用和 HMI 应用开发,才不会在环境问题上反复消耗时间。
| 环节 | 关键对象 | 验证方式 | 常见问题 |
|---|---|---|---|
| SDK 获取 | Processor SDK / Arago | 校验 MD5,确认芯片与版本匹配 | 版本与芯片不符 |
| 交叉编译 | arm-linux-gnueabihf-gcc | file 输出 ARM ELF | PATH 未 source |
| Yocto 构建 | tisdk-default-image | deploy 目录产出镜像 | 依赖缺失、网络超时 |
| 串口连接 | /dev/ttyUSB0,115200 8N1 | 上电看到 U-Boot 日志 | TX/RX 接反、波特率错 |
| GPU 库验证 | libGLESv2 / libEGL | 目标板 ls 库文件并运行 EGL 程序 | 库版本与工具链不一致 |
整体来看,开发环境搭建的关键在于“版本一致”和“链路可见”。SDK 与芯片对应、工具链与根文件系统对应、串口能稳定输出日志,这三件事做到位,后续的图形加速开发才有可靠的起点。