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。
~/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-support | U-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 脚本中大量使用未加引号的变量,路径含空格会直接中断安装。
board-support 与 linux-devkit 可能来自不同版本,编译出的镜像无法启动。完成以上四步后,主机侧的环境即告就绪。后续的 U-Boot 移植、内核裁剪、设备树修改与根文件系统定制,都将在这一套目录与工具链之上展开。