3. 开发环境搭建

AM62x 的 BSP 开发无法在目标板上直接完成,必须先在 x86_64 的 Ubuntu 主机上建立一套“能编译、能打包、能烧写”的完整环境。本节把这条链路拆成四段:主机系统准备、交叉编译工具链安装、SDK 获取与安装、SDK 目录结构解析。四段之间是严格的先后依赖关系,任何一段缺失都会导致后续步骤报错。

一、核心原理:为什么需要交叉编译环境

AM62x 采用四核 Cortex-A53(主频最高 1.4GHz)加一颗 Cortex-M4F 的异构架构,运行的是 64 位 ARMv8-A 指令集。而开发主机是 x86_64 架构,两者指令集完全不同。因此必须使用“在 x86 上运行、生成 ARM64 代码”的交叉编译器。TI 官方 SDK 中集成的工具链为 gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu,它同时提供编译器、链接器、binutils 和 glibc 头文件,是编译 U-Boot、Kernel 与根文件系统的统一入口。

除了工具链,主机还需要具备一系列构建依赖:git、flex、bison、libssl-dev、u-boot-tools、device-tree-compiler 等。缺少其中任意一个,都会在 make 阶段以“command not found”或“header not found”的形式中断。

二、Ubuntu 主机配置

推荐使用 Ubuntu 20.04 LTS 或 22.04 LTS 的 64 位桌面版,磁盘预留 100GB 以上,内存建议 16GB。安装完成后先更新源并安装依赖包:

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

# 检查关键工具版本
gcc --version
python3 --version
dtc --version

如果主机位于内网,建议提前配置好代理或使用国内镜像源,否则 SDK 安装脚本在下载组件时会长时间卡住。此外,SDK 安装脚本对 /bin/sh 有要求,Ubuntu 默认的 dash 可能触发兼容性问题,可执行 sudo dpkg-reconfigure dash 选择“No”切换为 bash。

建议为 SDK 单独创建一个工作目录,例如 ~/ti,避免路径中出现中文或空格,否则安装脚本中的部分变量展开会失败。

三、交叉编译工具链安装

工具链有两种获取方式:一是随 SDK 一起安装,二是单独下载。单独安装时,从 TI 官网下载 aarch64 工具链压缩包,解压到 /opt 或用户目录,然后加入环境变量:

tar -xf gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz -C ~/ti
export PATH=~/ti/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-none-linux-gnu-

# 验证
aarch64-none-linux-gnu-gcc --version

验证成功的标志是输出中包含 aarch64-none-linux-gnu 字样。若提示找不到命令,说明 PATH 未生效,可用 source ~/.bashrc 重新加载。注意 CROSS_COMPILE 变量末尾必须带短横线,这是内核与 U-Boot 构建系统的约定。

四、SDK 获取与安装

AM62x 对应的 SDK 名称为 ti-processor-sdk-linux-am62xx-evm-xx.xx.xx.xx。获取途径有两种:TI 官网下载页直接下载,或使用 repo 工具从 git 仓库同步。前者适合快速上手,后者适合需要跟踪补丁的开发。下载后执行安装脚本:

chmod +x ti-processor-sdk-linux-am62xx-evm-08.06.00.42-Linux-x86-Install.bin
./ti-processor-sdk-linux-am62xx-evm-08.06.00.42-Linux-x86-Install.bin

安装过程会依次解压 SDK 主体、工具链、目标文件系统与示例镜像。安装完成后,目录中会出现 linux-devkit、board-support、bin、filesystem 等关键子目录。

五、SDK 目录结构解析

理解目录结构是后续所有操作的基础。下表列出主要目录及其职责:

目录内容典型用途
board-supportU-Boot、Kernel、设备树源码修改驱动、编译镜像
linux-devkit交叉工具链与 sysroot编译应用、链接库
filesystem根文件系统与模块制作 SD 卡启动盘
bin创建 SD 卡、烧写脚本生成启动介质
example-applications示例程序验证工具链与运行环境

其中 board-support 是日常改动最频繁的目录,内部又分为 u-boot-*、linux-* 和 ti-linux-kernel-* 等子目录。设备树文件位于 arch/arm64/boot/dts/ti/ 下,AM62x 对应的文件通常以 k3-am625- 开头。

六、案例:从零到编译通过

假设已安装 SDK,目标是编译一次 U-Boot 验证环境是否可用:

cd ~/ti/ti-processor-sdk-linux-am62xx-evm-08.06.00.42/board-support/u-boot-*
export PATH=~/ti/ti-processor-sdk-linux-am62xx-evm-08.06.00.42/linux-devkit/bin:$PATH
make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- am62x_evm_a53_defconfig
make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- -j8

若最终生成 u-boot.bin 与 tispl.bin,说明主机配置、工具链与 SDK 三者已正确协同。若报错,优先检查 CROSS_COMPILE 是否带短横线、PATH 是否指向 SDK 自带工具链。

七、常见误区与复盘

  • 工具链版本混用:用系统自带的 gcc 编译内核,会因架构不匹配直接失败。务必使用 SDK 内工具链。
  • PATH 顺序错误:若系统 PATH 中已有其他 aarch64 工具链,可能被优先命中,导致链接库版本不一致。
  • 忽略 sysroot:编译应用时未指定 --sysroot,会出现头文件找不到或运行期库缺失。
  • 安装路径含空格:SDK 脚本中大量使用未加引号的变量,路径含空格会直接中断安装。
不要在同一终端中同时激活两套不同版本的 SDK 环境变量,否则 board-support 与 linux-devkit 可能来自不同版本,编译出的镜像无法启动。
AM62x BSP 开发环境搭建链路 ① Ubuntu 主机 20.04 / 22.04 LTS 依赖包 + 磁盘 100G ② 交叉工具链 aarch64-none-linux-gnu PATH + CROSS_COMPILE ③ SDK 获取安装 am62xx-evm-08.06 .bin 安装脚本 ④ 目录解析 board-support linux-devkit SDK 目录结构(ti-processor-sdk-linux-am62xx-evm) board-support linux-devkit filesystem bin examples u-boot / linux / dts gcc + sysroot rootfs + modules create-sdcard.sh 验证命令 make ARCH=arm CROSS_COMPILE=aarch64-none-linux-gnu- am62x_evm_a53_defconfig && make -j8 输出:u-boot.bin tispl.bin

完成以上四步后,主机侧的环境即告就绪。后续的 U-Boot 移植、内核裁剪、设备树修改与根文件系统定制,都将在这一套目录与工具链之上展开。