3. 开发环境搭建
i.MX 93 的软件开发不是“装个编译器就能跑”的桌面式流程,而是一条由 Yocto Project 驱动的完整构建链:Yocto 负责按配方(recipe)拉取源码、交叉编译、打包成镜像;NXP 提供的 Linux BSP 层(meta-imx)把 i.MX 93 的 U-Boot、内核、设备树和驱动集成进来;交叉编译工具链负责在 x86_64 主机上生成 ARM64 目标代码;SDK 则把工具链、sysroot、库和头文件打包,供应用开发者脱离 Yocto 全量构建单独编译程序。理解这四者的分工与衔接,是后续所有章节能顺利推进的前提。
一、四层职责与依赖关系
先建立整体认识:Yocto 是构建框架,BSP 是板级内容,工具链是编译手段,SDK 是交付给应用开发的封装。它们不是并列的四件事,而是层层依赖的关系。下图给出本节的核心结构:
二、主机环境准备
Yocto 对主机有明确要求。推荐 Ubuntu 22.04 LTS,至少 8 核 CPU、16 GB 内存、250 GB 可用磁盘(全量构建 imx-image-full 会占用 100 GB 以上)。先安装依赖包:
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 python3-subunit mesa-common-dev zstd liblz4-tool file locales
sudo locale-gen en_US.UTF-8
注意:不要用 root 用户执行 Yocto 构建,BitBake 会直接拒绝。同时确保 /bin/sh 指向 bash 而非 dash,否则部分配方脚本会失败。
三、获取 BSP 与初始化构建目录
NXP 官方推荐使用 repo 工具管理多仓库。以 i.MX 93 EVK 的 Yocto 5.15.71_2.2.0(kirkstone)版本为例:
mkdir ~/imx-yocto-bsp && cd ~/imx-yocto-bsp
repo init -u https://github.com/nxp-imx/imx-manifest \
-b imx-linux-kirkstone -m imx-5.15.71-2.2.0.xml
repo sync -j8
同步完成后,用 imx-setup-release.sh 生成构建目录。该脚本会创建 build/ 目录、写入 conf/local.conf 与 bblayers.conf,并自动把 meta-imx 各层加入:
DISTRO=fsl-imx-xwayland MACHINE=imx93evk \
source imx-setup-release.sh -b build-imx93
关键参数含义:DISTRO 决定图形栈(xwayland 带 XWayland 兼容,wayland 纯 Wayland,framebuffer 无 GPU);MACHINE 决定目标板,i.MX 93 对应 imx93evk 或 imx93-11x11-evk。执行后终端会进入 BitBake 环境,提示符前出现 (build-imx93)。
四、构建镜像与 SDK
先构建完整镜像,确认 BSP 可用:
bitbake imx-image-full
首次构建约 2~4 小时(取决于主机性能)。产物位于 tmp/deploy/images/imx93evk/,包括 imx-image-full-imx93evk.wic.zst(可烧录 SD 卡)、imx-boot-imx93evk-sd.bin-flash_singleboot(U-Boot + SPL)、Image(内核)和 imx93-evk.dtb(设备树)。
镜像构建成功后,再生成 SDK:
bitbake imx-image-full -c populate_sdk
SDK 安装包输出到 tmp/deploy/sdk/,文件名形如 fsl-imx-xwayland-glibc-x86_64-imx-image-full-aarch64-imx93evk-toolchain-5.15.71.sh。安装到默认路径 /opt/fsl-imx-xwayland/5.15.71/:
cd tmp/deploy/sdk
./fsl-imx-xwayland-glibc-x86_64-imx-image-full-aarch64-imx93evk-toolchain-5.15.71.sh
# 安装完成后,每次使用前 source 环境
source /opt/fsl-imx-xwayland/5.15.71/environment-setup-aarch64-poky-linux
source 之后,$CC 自动指向 aarch64-poky-linux-gcc,$CXX、$AR、$LD、$PKG_CONFIG_SYSROOT_DIR 等变量均已就绪。可以用一个最小程序验证:
cat > hello.c <<'EOF'
#include <stdio.h>
int main(void){ printf("i.MX 93 ARM64 OK\n"); return 0; }
EOF
$CC hello.c -o hello
file hello
# 输出应含:ELF 64-bit LSB executable, ARM aarch64
把 hello 通过 scp 或 SD 卡拷到板端运行,若打印 i.MX 93 ARM64 OK,说明工具链与目标系统 ABI 一致,SDK 可用。
五、常见问题与判断依据
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| bitbake 报 “Please use a locale setting which supports UTF-8” | 主机 locale 未生成 | 执行 sudo locale-gen en_US.UTF-8 并导出 LANG=en_US.UTF-8 |
| repo sync 中断或超时 | 网络访问 GitHub 不稳定 | 配置代理或改用 NXP 镜像源,重试 repo sync -j4 |
SDK 安装后 $CC 为空 | 未 source environment-setup 脚本 | 每次新开终端都要重新 source,或写入 ~/.bashrc |
| 编译出的程序在板端报 “No such file or directory” | 动态链接器路径不匹配或 glibc 版本不一致 | 确认 SDK 与板端 rootfs 来自同一次构建,检查 readelf -l hello | grep interpreter |
| bitbake 报 “No space left on device” | 磁盘不足 | 清理 tmp/work 或扩容至 250 GB 以上 |
bitbake imx-image-full 全量构建,节省数小时。但若要修改内核驱动或设备树,则必须走完整 Yocto 流程。