2. i.MX硬件开发环境搭建

i.MX工业网关平台的开发起点不是写代码,而是把“板子能上电、串口能出字、调试器能连上、主机能编出目标程序”这条链路打通。这一节围绕硬件连接与主机环境两条主线展开:硬件侧包括开发板、电源、串口、JTAG/SWD;主机侧包括Yocto/Buildroot环境与交叉编译工具链。任何一环没打通,后续的U-Boot移植、内核裁剪、驱动调试都会变成盲调。

一、硬件连接:先建立最小可用系统

以常见的i.MX6ULL/i.MX8M Mini工业网关评估板为例,最小系统只需要三样东西:稳定电源、调试串口、启动介质(eMMC/SD)。JTAG/SWD属于“按需接入”,用于U-Boot阶段或裸机/早期内核调试,不是每次上电都必须连接。

电源。i.MX6ULL典型核心电压为1.375V~1.5V(VDD_ARM),DDR3L为1.35V,外设I/O多为3.3V。评估板通常通过DC 5V/2A或USB Type-C供电,板上PMIC(如PCA9450、PF3000)再分路输出。上电前先用万用表确认各电源轨对地无短路,上电后测量VDD_ARM、VDD_SOC、DDR电压是否在标称值±5%以内。若板子反复重启或串口乱码,优先怀疑电源纹波与电流能力不足,而不是先怀疑软件。

串口。i.MX的调试串口一般由UART1引出,默认参数为115200-8-N-1,无流控。连接方式有两种:板载USB转串口芯片(如CP2102、CH340)直接出USB;或通过3.3V TTL电平的UART引脚接外部USB-TTL模块。注意TTL侧必须是3.3V,接5V可能损坏SoC引脚。接线只需三根:TX、RX、GND,TX/RX交叉连接。上电后若终端无输出,先确认串口线序、波特率、是否选对了COM端口,再检查板子是否真的在运行。

JTAG/SWD。i.MX6ULL常用20针JTAG(ARM标准)或10针SWD。JTAG需要连接TCK、TMS、TDI、TDO、TRST、SRST及GND,部分板子还需提供VTREF参考电压。SWD只需SWCLK、SWDIO、GND、VTREF。调试器可选J-Link、CMSIS-DAP、OpenOCD兼容的FT2232。连接时注意:JTAG/SWD的复位信号(SRST)与板级复位要一致,否则会出现“能识别ID但无法halt”的现象。实际调试中,若U-Boot已启动并关闭了调试时钟,JTAG可能无法直接接管,此时需在U-Boot启动早期暂停或使用“等待复位后立即连接”的方式。

i.MX开发板最小系统连接关系 电源 DC 5V/2A PMIC: PCA9450 VDD_ARM 1.4V / DDR 1.35V i.MX6ULL / i.MX8M Mini 评估板 SoC + DDR eMMC / SD UART1 调试口 JTAG / SWD USB-TTL / 板载转换 115200-8-N-1 TX/RX/GND 交叉 J-Link / CMSIS-DAP TCK/TMS/TDI/TDO SRST + VTREF Ubuntu 20.04/22.04 主机 Yocto / Buildroot 构建环境 交叉工具链 arm-poky-linux-gnueabi 串口终端 minicom / picocom

二、主机环境:Yocto与Buildroot的取舍

主机推荐Ubuntu 20.04 LTS或22.04 LTS,磁盘至少预留120GB,内存建议16GB以上。Yocto与Buildroot不是二选一的对立关系,而是两种构建哲学:Yocto适合产品化、需要长期维护BSP和SDK的场景;Buildroot轻量、上手快,适合功能相对固定的网关固件。

Yocto环境准备。以i.MX Yocto BSP(如imx-5.15.71-2.2.0)为例,先安装依赖包:

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 python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
  pylint xterm zstd liblz4-tool file locales

然后获取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
DISTRO=fsl-imx-xwayland MACHINE=imx6ull14x14evk source imx-setup-release.sh -b build

首次构建core-image-minimal通常需要2~4小时(取决于CPU和网络)。构建完成后,在tmp/deploy/images/imx6ull14x14evk/下可找到U-Boot、内核、设备树和根文件系统镜像。

Buildroot环境准备。Buildroot更直接:

git clone https://gitlab.com/buildroot.org/buildroot.git -b 2023.02.x
cd buildroot
make imx6ull14x14evk_defconfig
make menuconfig   # 按需裁剪
make -j$(nproc)

Buildroot的输出集中在output/images/,包含rootfs.tar、zImage、imx6ull-14x14-evk.dtb等。相比Yocto,Buildroot的配置项更少、构建更快,但软件包版本和补丁管理需要自行维护。

三、交叉编译工具链:安装与验证

交叉编译工具链是主机与目标板之间的“翻译器”。i.MX6ULL是ARM Cortex-A7,使用32位ARM EABI硬浮点工具链;i.MX8M Mini是Cortex-A53,使用AArch64工具链。工具链来源有三种:Yocto SDK、Buildroot生成的工具链、Linaro/ARM官方工具链。推荐优先使用与BSP匹配的Yocto SDK,避免glibc版本和内核头文件不一致。

以Yocto SDK为例,安装后执行:

./fsl-imx-xwayland-glibc-x86_64-meta-toolchain-armv7at2hf-neon-toolchain-5.15.71.sh
source /opt/fsl-imx-xwayland/5.15.71/environment-setup-armv7at2hf-neon-poky-linux-gnueabi
echo $CC
# 输出示例:arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon ...

验证工具链是否可用,写一个最小测试程序:

cat > hello.c <<'EOF'
#include <stdio.h>
int main(void){ printf("i.MX gateway toolchain OK\n"); return 0; }
EOF
$CC hello.c -o hello
file hello
# 应显示:ELF 32-bit LSB executable, ARM, EABI5

把hello通过SCP或NFS拷贝到板子上运行,若输出i.MX gateway toolchain OK,说明工具链、动态库、内核ABI三者匹配。若运行时报No such file or directory,通常是动态链接器路径不对,可用readelf -l hello | grep interpreter查看,确认板子根文件系统中存在对应的ld-linux-armhf.so.3。

工具链验证不要只看gcc --version,必须完成“编译→传输→目标板运行”闭环。只编译不运行,无法暴露glibc版本、浮点ABI、动态链接器路径等真实问题。

四、串口终端与调试器联调

主机侧串口工具推荐picocom或minicom:

sudo picocom -b 115200 /dev/ttyUSB0
# 退出:Ctrl-A 然后 Ctrl-X

若使用J-Link,可先用JLinkExe确认连接:

JLinkExe -device MCIMX6Y2 -if JTAG -speed 4000
J-Link> connect
J-Link> halt
J-Link> regs

能读到PC、SP、LR等寄存器,说明JTAG链路正常。若connect失败,依次检查:VTREF是否有3.3V、SRST是否被板级复位拉低、TCK频率是否过高(可降到1000kHz再试)、SoC是否处于低功耗或时钟关闭状态。

五、常见问题与判断依据

现象优先排查判断依据
串口无输出线序、波特率、电源TX/RX是否交叉;115200-8-N-1;VDD_ARM是否正常
串口乱码波特率偏差、地线换USB-TTL模块;确认GND已连接
JTAG无法haltSRST、时钟、调试时钟读ID是否成功;降低TCK;检查U-Boot是否已关调试时钟
交叉编译报错环境变量、SDK路径echo $CC是否有输出;是否source了environment-setup
目标板运行报错动态链接器、ABIreadelf -l查看interpreter;确认根文件系统glibc版本

把上述硬件连接、主机环境、工具链验证三件事做完,i.MX工业网关平台就具备了“可编译、可下载、可观察”的基本开发条件。后续的U-Boot移植、内核配置、设备树修改和驱动开发,都建立在这条已经打通的链路上。