1. MfgTool工具概述与准备工作
在嵌入式Linux开发中,系统烧写是将编译好的uboot、内核、设备树和根文件系统部署到目标板存储设备的关键步骤。NXP官方提供的MfgTool工具为I.MX系列处理器提供了便捷的USB烧写方案。相比网络启动方式,本地存储烧写确保了设备在无网络环境下的独立运行能力。
工具获取与解压:
- 访问NXP官网下载MfgTool工具包(注意选择与处理器型号匹配的版本)
- 解压主压缩包后会看到两个关键文件:
- mfgtools-with-rootfs.tar.gz(包含根文件系统的完整烧写包)
- mfgtools-without-rootfs.tar.gz(不含根文件系统的精简包)
- 建议选择with-rootfs版本进行二次解压,得到mfgtools-with-rootfs目录
目录结构解析:
code复制mfgtools-with-rootfs/
└── mfgtools/
├── Profiles/ # 烧写配置文件存放目录
├── MfgTool2.exe # 主程序
└── *.vbs # 不同处理器和存储介质的配置脚本
注意:实际操作前需确认开发板的存储介质类型(EMMC/NAND/QSPI等),不同介质对应不同的.vbs脚本。例如EMMC版本核心板应使用mfgtool2-yocto-mx-evk-emmc.vbs脚本。
2. 工具配置与脚本定制
2.1 配置文件解析
Profiles目录下包含关键的ucl2.xml文件,该文件定义了烧写流程和文件路径。典型结构如下:
xml复制<LIST name="MX6ULL" desc="Choose eMMC as media">
<CMD state="BootStrap" type="boot" body="BootStrap" file="u-boot-imx6ull-14x14-evk-emmc.imx"/>
<CMD state="Updater" type="push" body="send" file="zImage-imx6ull-14x14-evk-emmc.dtb"/>
<CMD state="Updater" type="push" body="send" file="zImage"/>
<CMD state="Updater" type="push" body="send" file="filesystem.tar.bz2"/>
</LIST>
2.2 自定义烧写内容
替换默认文件的实操步骤:
- 备份原始文件(建议在修改前完整复制Profiles目录)
- 准备自定义文件:
- 编译生成的uboot:u-boot.imx
- 设备树文件:*.dtb
- 内核镜像:zImage
- 根文件系统:自制rootfs.tar.bz2
- 将文件放入Profiles/OS Firmware目录
- 修改ucl2.xml中对应的文件名和路径
关键技巧:文件系统压缩包必须使用tar.bz2格式,且根目录需包含标准的Linux目录结构(/bin, /etc, /lib等)。压缩时使用命令:
tar -jcvf rootfs.tar.bz2 *
3. 硬件准备与连接
3.1 硬件接口确认
开发板需要具备:
- USB OTG接口(通常为Micro USB或Type-C)
- 启动模式拨码开关(需支持USB下载模式)
- 目标存储介质(EMMC/NAND等)
典型连接流程:
- 使用优质USB数据线连接开发板OTG口与PC
- 将拨码开关设置为USB启动模式(参考开发板手册)
- 移除TF卡等可能干扰识别的存储设备
- 按下复位键进入下载模式
3.2 驱动安装验证
Windows设备管理器应出现:
code复制通用串行总线控制器
└── USB大容量存储设备
若出现未知设备,需安装NXP提供的USB驱动(可从SDK包中找到)
4. 完整烧写流程详解
4.1 烧写步骤分解
-
启动脚本选择:
bash复制# 根据处理器和存储类型选择对应脚本 # EMMC版本示例: double-click mfgtool2-yocto-mx-evk-emmc.vbs -
软件界面操作:
- 确认"HID-compliant device"识别成功
- 点击Start按钮开始烧写
- 观察进度条和日志输出
-
控制台输出解析(正常流程):
code复制Loading U-Boot... Jumping to OS image... Formatting /dev/mmcblk1... Writing kernel... Writing device tree... Extracting filesystem...
4.2 烧写过程监控
通过SecureCRT观察的典型输出:
code复制U-Boot 2020.04 (May 15 2023 - 16:20:35 +0800)
CPU: Freescale i.MX6ULL rev1.1 528 MHz
Reset cause: POR
Board: MX6ULL 14x14 EVK
Boot Mode: USB download
Waiting for USB device...
常见状态指示灯:
- 红色LED:电源指示
- 蓝色LED:烧写过程闪烁
- 绿色LED:烧写完成常亮
5. 问题排查与进阶技巧
5.1 常见错误解决方案
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 设备未识别 | USB驱动未安装 | 安装NXP官方驱动 |
| 烧写卡在U-Boot | 镜像文件不匹配 | 检查uboot版本与处理器型号 |
| 文件系统解压失败 | 压缩格式错误 | 改用tar.bz2格式重新打包 |
| 反复重启 | 启动模式设置错误 | 烧写后切换为EMMC启动模式 |
5.2 性能优化建议
-
加速烧写:
- 使用USB3.0接口(需开发板支持)
- 精简文件系统内容
- 关闭杀毒软件实时监控
-
批量烧写方案:
- 编写自动化脚本控制多个MfgTool实例
- 使用USB Hub连接多块开发板
- 定制统一的设备序列号写入
-
校验机制增强:
bash复制# 在uboot中添加校验命令 => mmc read 0x80800000 0x800 0x2000 => crc32 0x80800000 0x100000
6. 烧写后验证与系统配置
6.1 首次启动检查
成功烧写后:
- 将拨码开关切回EMMC启动模式
- 连接调试串口观察启动日志
- 确认内核版本和文件系统内容:
bash复制# 在开发板终端执行 uname -a ls /dev/mmcblk* df -h
6.2 系统个性化配置
基础配置示例:
bash复制# 设置主机名
echo "my-device" > /etc/hostname
# 配置网络(示例)
cat > /etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
# 添加用户
adduser engineer
实际使用中发现,在批量烧写时建议提前准备好预配置的rootfs镜像,可以显著减少后期配置工作量。对于需要加密的场景,可以在烧写前对文件系统进行加密处理,uboot阶段通过特定命令解密。
