一、改造烧写环境
MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC 中,用usb连接电脑和USB OTG 接口
把拨码开关拨到 USB 下载模式,需要弹出tf或sd卡
打开“ MfgTool2.exe”软件,连接成功如下图
图片中可能是出现英文,只要是符合即可。点击“Start”按钮即可开始烧写,烧写什么东西呢?
肯定是烧写 uboot、 Linux kernel、 .dtb 和 rootfs
所以要准备好要烧写的原材料:
①、自己移植编译出来的 uboot 可执行文件: u-boot.imx。
②、自己移植编译出来的 zImage 镜像文件和开发板对应的.dtb(设备树)
③、自己构建的根文件系统 rootfs
在根目录下新建一个文件夹存放这四个文件,这里为“烧写的材料”文件夹
根据图中剩下的文件,其余文件可以删掉
进入mfgtools\mfgtools\Profiles\Linux\OS Firmware目录看到如下
firmware 文件夹
位置:mfgtools\Profiles\Linux\OS Firmware\firmware
烧写软件将 firmware 目录中的 uboot、 linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备
这里面有很多的.imx 结尾的 uboot 文件、一个 zImage 镜像文件、很
多.dtb结尾的设备树文件,只看下图三个
因此需要将 u-boot.imx 重命名为 u-boot-imx6ull14x14evk_emmc.imx
将 imx6ull-alientek-emmc.dtb重命名为 zImage-imx6ull-14x14-evk-emmc.dtb
按照下图,保留这三个文件,其余的可以删掉
files 文件夹
位置:mfgtools\Profiles\Linux\OS Firmware\files
烧写软件从 files 目录中读取整个系统文件,并将其烧写到 EMMC
主要看下图文件
保留下图两个文件,把目录下的其他文件全部删除
二、改造MfgTool
改造 MfgTool,重点是三方面:
①、针对不同的核心版,确定系统文件相关名字。
②、新建我们自己的.vbs 文件。
③、修改 ucl2.xml 文件
1 确定系统文件名字并复制到对应目录下
确定系统文件名字完全是为了兼容不同的产品,比如开发板有 NAND 和 EMMC 两个版本, 那么 EMMC 和 NAND 这两个版本的 uboot、 zImage、 .dtb 和 rootfs 有可能不同。这里系统文件命名如图:
分别把这四个文件复制到mfgtools\Profiles\Linux\OS Firmware\firmware目录下和mfgtools\Profiles\Linux\OS Firmware\files目录下
2 新建.vbs 文件
直接复制 mfgtool2-yocto-mx-evk-emmc.vbs 文件
将新复制的文件重命名为 mfgtool2-my-emmc.vbs
文件内容不要做任何修改, .vbs 文件我们就新建好了
3 修改ucl2.xml 文件
files 和 firmware 目录下有众多的 uboot 和设备树,烧写的时候究竟选择哪一个这个工作就是由 ucl2.xml 文件来完成的。 ucl2.xml 以“<UCL>”开始,以“</UCL>”结束。“<CFG>”和“</CFG>”之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统.
在修改 ucl2.xml 文件之前,先保存一份原始的 ucl2.xml。
①打开ucl2.xml 文件,删掉其他的版本烧写
下图这里把文件进行收缩看到,只需要保留"name=emmc"的内容,其他的可以删掉
删掉如下图
②修改将 ucl2.xml 文件下关于emmc的内容
把emmc下面的34-38行内容删掉,保留最后一行
把39行的文件,"file"处文件目录名后改写为烧写材料的u-boot文件名
接着把图面的41-42行删除
把43行的"file"处文件目录名后改写成要烧写材料的zImage文件名
把下图的46-47行删掉
把下图的51-60行删掉
把61行"file"处文件目录名后改写成要烧写材料的.dtb文件名
往下来到“<!-- access boot partition -->”,把76-80行删掉
把81行的"file"处文件目录名后改写成要烧写材料的uboot文件名
来到<!-- burn zImage -->,93行的"file"处文件目录名后改写成要烧写材料的zImage文件名
来到<!-- burn dtb -->,把102和109行留下,其他删掉
把102行"file"处文件目录名后改写成要烧写材料的.dtb文件名
把109行cp路径最后面也换成.dtb文件名
来到<!-- burn m4 demo bins-->,111-117行删掉
来到 <!-- burn rootfs -->,把125行删掉
把126行"file"处文件目录名后改写成要烧写材料的rootfs文件名
到此就基本完成修改了
三、烧写测试
用usb连接电脑和USB OTG 接口,把拨码开关拨到 USB 下载模式,需要弹出tf或sd卡
打开自己命名的vbs文件,这里为“ mfgtool2-my-emmc.vbs”,连接成功如下图
图片中可能是出现英文,只要是符合即可。点击“Start”按钮即可开始烧写
烧写完成启动开发板
出现“Starting kernel ...”以后就再也没有任何信息输出了,说明Linux 内核启动失败了。
此时 EMMC 的分区 1 中是存在设备树文件的,只是文件名字为:imx6ull-my-emmc.dtb,因此读取 imx6ull-14x14-evk.dtb 肯定会出错的,解决方法很简单,有两种方法:1、重新设置 bootcmd 环境变量值,2、修改 uboot 源码
这里就用第一种
进入 uboot 的命令行,重新设置 bootcmd 和 bootargs 这两个环境变量的值,这里要注意的
是 bootargs 的值也要重新设置一下,命令如下:
setenv bootcmd 'mmc dev 1;fatload mmc 1:1 80800000 zImage;fatload mmc 1:1 83000000
imx6ull-my-emmc.dtb;bootz 80800000 - 83000000'
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv
重启开发板即可