GoDm@'s Blog

使用mfgtool烧写完整系统到IMX的EMMC

版权信息

warning

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。


mfgtool 介绍

mfgtool 是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件。

mfgtool 工作流程

  1. 首先 mfgtool 将 firmware 目录中的 uboot、linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
  2. 经过第一步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC 的格式化、分区等操作。EMMC 分区建立好以后就可以从 files 中读取要烧写的 uboot、linux kernel、.dtb(设备树)和 rootfs 这 4 个文件,然后将其烧写到 EMMC 中。
  3. files 和 firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由 ucl2.xml 文件来完成的。ucl2.xml 以“<UCL>”开始,以“</UCL>”结束。“<CFG>”和“</CFG>”之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。“<LIST>”和“</LIST>”之间的是针对不同存储芯片的烧写命令。

这个就是 mfgTool 的大概工作流程。

总结:

firmware:烧写到DDR中的Linux文件,用于操作EMMC。

file:真正烧写到EMMC中的文件。

ucl2.xml:指示mfgtool烧写哪些文件。

烧写自己的系统

以IMX6ULL为例。

查看 ucl2.xml,再打开:

/mfgtools/Profiles/Linux/OS Firmware/firmware

/mfgtools/Profiles/Linux/OS Firmware/files

易知:

要烧写的文件在 files 目录下和 firmware 目录下同名
且要烧写的文件名如下:

u-boot

官方u-boot名称:u-boot-imx6ull14x14evk_emmc.imx

内核镜像

官方内核名称:zImage

设备树

官方设备树名称:zImage-imx6ull-14x14-evk-emmc.dtb

根文件系统

官方根文件系统名称:rootfs_nogpu.tar.bz2

注:先将根文件系统使用 tar -vcjf 命令打包。该项只存在于 files 中,无需烧写到DDR中。

烧写方法

直接将自己确认好可以用的 dtb、kernel、uboot、rootfs 文件改为上面的官方名称并覆盖到firmware 及 files 文件夹。
然后双击对应的烧写脚本(我的是: mfgtool2-yocto-mx-evk-emmc.vbs) 烧写。

issue#1:内核启动3s后卡死,无法挂载根文件系统。

排查过程:

起初怀疑是根文件系统问题。排查如下:

  1. 检查根文件系统是否烧写成功或文件系统格式错误。
    在uboot中输入命令:ext4ls mmc 1:2 / 成功输出根文件系统内容,排除。

  2. 怀疑根文件系统初始化脚本无法执行。
    在uboot的bootargs 参数中添加:init=/bin/sh,依旧无法启动,排除。说明根本还没到这一步就死了,确认问题是根文件系统无法挂载。

  3. 控制变量法:
    替换根文件系统为正点原子官方的根文件系统并烧写,依旧启动卡死。怀疑是内核问题。

  4. 替换内核为官方Linux内核;uboot、根文件系统、dtb使用自己的并烧写——成功启动。

  5. 懵逼。按理来说内核4.0跨到6.0版本,时间跨度很大,dtb文件应该不适用才对。也就是说我使用 4.0 的内核应该不能适配 6.0 的 dtb 文件。

最后排查原因:

dtb文件烧写错误。。。。。我错误的将zImage-imx6ull-14x14-evk-emmc.dtb 命名为了 zImage-imx6ull-14x14-evk.dtb,导致我使用新内核启动时,使用的还是是nxp官方的旧的内核的dtb文件,而不是新的。。。两者不适配。

最后还得感谢ai的质疑精神)我给ai说我确认dtb文件正确,ai看了我的日志后提出了质疑,并帮助我排查出了原因,也是nb。。。。

定制化脚本

待补充。。。。。


共计约1k字。于2025/11/11首次发布,最后更新于2025/11/13。

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

#Linux | #mfgtool |
  1. mfgtool 介绍
  2. mfgtool 工作流程
  3. 烧写自己的系统
    1. u-boot
    2. 内核镜像
    3. 设备树
    4. 根文件系统
    5. 烧写方法
    6. issue#1:内核启动3s后卡死,无法挂载根文件系统。
  4. 定制化脚本