4. 开发环境搭建
i.MX8 的 BSP 开发几乎全部在 Linux 主机上完成,官方推荐使用 Ubuntu 20.04 LTS 或 22.04 LTS(64 位)。主机环境是否干净、依赖是否齐全、工具链路径是否正确,直接决定后续 Yocto 构建、内核编译和设备树修改能否一次通过。本节按“主机准备 → 依赖安装 → repo 拉取 → 工具链安装 → 环境变量固化”的顺序,把这条链路一次讲透。
一、核心原理:为什么需要这样一套环境
i.MX8 的 BSP 由 Yocto Project 驱动,构建过程会调用大量宿主机工具(如 gcc、make、python3、git、tar、wget、chrpath、diffstat 等)。这些工具版本不匹配时,BitBake 会在解析阶段直接报错。因此第一步不是急着拉代码,而是把宿主机“喂饱”。
其次,i.MX8 是 ARM64 架构,宿主机是 x86_64,必须使用交叉编译工具链(如 aarch64-poky-linux-gcc)才能生成目标板可执行文件。工具链既可由 Yocto 构建产生,也可直接使用 NXP 官方发布的 SDK。无论哪种方式,都需要把工具链的 bin 目录加入 PATH,并设置 ARCH、CROSS_COMPILE 等变量,否则内核和 U-Boot 编译会找不到编译器。
二、方法流程:五步完成环境搭建
- 主机准备:安装 Ubuntu 20.04/22.04,建议单独划分
/home分区,预留 120GB 以上空间;关闭自动休眠,避免长时间构建中断。 - 依赖安装:执行官方推荐的 apt 安装命令,一次性补齐 Yocto 所需工具。
- repo 拉取:安装 repo 工具,初始化 NXP BSP 清单并同步源码。
- 工具链安装:安装 NXP 官方 SDK 或使用 Yocto 生成的工具链。
- 环境变量设置:把工具链路径和交叉编译变量写入 shell 配置,并验证生效。
三、关键命令与配置
依赖包安装是第一步,也是最容易漏项的一步。以下命令覆盖了 Yocto 构建所需的核心依赖:
sudo apt update
sudo apt install -y gawk wget git diffstat unzip texinfo gcc build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint xterm zstd liblz4-tool file locales
sudo locale-gen en_US.UTF-8
repo 工具用于管理 NXP BSP 的多个 Git 仓库。安装与初始化方式如下:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
mkdir ~/imx8-bsp && cd ~/imx8-bsp
repo init -u https://source.codeaurora.org/external/imx/imx-manifest \
-b imx-linux-kirkstone -m imx-5.15.71-2.2.0.xml
repo sync -j8
工具链安装推荐直接使用 NXP 官方 SDK,解压后执行环境脚本即可:
chmod +x fsl-imx-xwayland-glibc-x86_64-meta-toolchain-aarch64-imx8mmevk-toolchain-5.15.71.sh
./fsl-imx-xwayland-glibc-x86_64-meta-toolchain-aarch64-imx8mmevk-toolchain-5.15.71.sh
source /opt/fsl-imx-xwayland/5.15.71/environment-setup-aarch64-poky-linux
environment-setup-aarch64-poky-linux 后,脚本会自动导出 CC、CXX、ARCH、CROSS_COMPILE、PATH 等变量。建议把 source 这一行写入 ~/.bashrc,避免每次开终端都要手动执行。
四、环境变量清单与验证
| 变量名 | 典型值 | 作用 |
|---|---|---|
ARCH |
arm64 |
指定目标架构,内核编译时使用 |
CROSS_COMPILE |
aarch64-poky-linux- |
交叉编译器前缀,内核/U-Boot 编译依赖 |
PATH |
/opt/fsl-imx-xwayland/.../bin |
让 shell 找到交叉编译工具 |
CC |
aarch64-poky-linux-gcc |
指定 C 编译器 |
SDKTARGETSYSROOT |
/opt/.../sysroots/aarch64-poky-linux |
目标根文件系统路径,链接库时使用 |
验证是否配置成功,可执行以下命令:
aarch64-poky-linux-gcc -v
echo $ARCH
echo $CROSS_COMPILE
which aarch64-poky-linux-gcc
若 gcc -v 能输出目标为 aarch64-poky-linux 的版本信息,说明工具链已可用。
五、常见误区与复盘
误区二:依赖包只装了一部分,构建到一半才报
chrpath not found。建议一次性执行完整 apt 命令。误区三:把工具链路径写死在脚本里,换终端后失效。应写入
~/.bashrc 或使用 SDK 环境脚本。误区四:repo sync 中断后直接重跑,未清理残留。可先执行
repo sync -j8 --force-sync 再继续。
复盘建议:每完成一步都用一条命令验证。主机层用 lsb_release -a 确认版本;依赖层用 which chrpath 确认工具存在;repo 层用 repo status 确认仓库状态;工具链层用 aarch64-poky-linux-gcc -v 确认可用;环境变量层用 env | grep -E "ARCH|CROSS_COMPILE" 确认已导出。五步全部通过后,再进入 Yocto 构建阶段,可以避免绝大多数“环境问题”导致的构建失败。