版权信息
warning
本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
mfgtool 介绍
mfgtool 是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件。
mfgtool 工作流程
- 首先 mfgtool 将 firmware 目录中的 uboot、linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
- 经过第一步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC 的格式化、分区等操作。EMMC 分区建立好以后就可以从 files 中读取要烧写的 uboot、linux kernel、.dtb(设备树)和 rootfs 这 4 个文件,然后将其烧写到 EMMC 中。
- 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后卡死,无法挂载根文件系统。
排查过程:
起初怀疑是根文件系统问题。排查如下:
-
检查根文件系统是否烧写成功或文件系统格式错误。
在uboot中输入命令:ext4ls mmc 1:2 /成功输出根文件系统内容,排除。 -
怀疑根文件系统初始化脚本无法执行。
在uboot的bootargs 参数中添加:init=/bin/sh,依旧无法启动,排除。说明根本还没到这一步就死了,确认问题是根文件系统无法挂载。 -
控制变量法:
替换根文件系统为正点原子官方的根文件系统并烧写,依旧启动卡死。怀疑是内核问题。 -
替换内核为官方Linux内核;uboot、根文件系统、dtb使用自己的并烧写——成功启动。
-
懵逼。按理来说内核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。。。。

定制化脚本
待补充。。。。。