目录
MfgTool工具简单介绍
MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到。下载后解压
解压后里面有两个压缩包,两个压缩包的区别在名字上已经写的很详细了。 “without-rootfs”和“with-rootfs”,一个是带 rootfs 和一个是不带 rootfs。
这里要使用到文件系统,所以就要选择mfgtools-with-rootfs文件,解压mfgtools-with-rootfs.tar.gz
进入到文件夹中
文件夹里面有很多的.vbs 文件,烧写的时候通过双击这些.vbs 文件来打开烧写工具。由于这里面的文件都是针对不同的系统,这里可以将用不到的文件删除掉。
删除完成后留下这几个文件就可以了
这里开发板使用的是EMMC版本的,实际上只会用到第一个vbs文件。
软件烧写原理分析
在mfgtools-with-rootfs\mfgtools\Profiles\Linux\OS Firmware 文件夹中存放着烧写需要用到的文件。
MfgTool 其实是先通过 USB OTG 先将 uboot、kernel 和.dtb(设备树)这三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。就相当于直接在开发板的 DDR上启动 Linux 系统,等 Linux 系统启动以后再向 EMMC 中烧写完整的系统,包括 uboot、linux kernel、.dtb(设备树)和 rootfs,因此 MfgTool 工作过程主要分两个阶段:
①、将 firmware 目录中的 uboot、linux kernel 和.dtb(设备树),然后通过 USB OTG 将这个文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
②、经过第①步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后就可以很方便的完成对 EMMC 的格式化、分区等操作。EMMC 分区建立好以后就可以从 files 中读取要烧写的 uboot、linux kernel、.dtb(设备树)和 rootfs 这 4 个文件,然后将其烧写到 EMMC 中。
这个就是 MfgTool 的大概工作流程。
下面来看一下mfgtools-with-rootfs\mfgtools\Profiles\Linux\OS Firmware中的几个文件的作用。
1 、firmeare 文件夹
打开 firmware 文件夹,里面有很多的.imx 结尾的 uboot 文件、一个 zImage 镜像文件、很多.dtb结尾的设备树文件。这些文件都是NXP官方开发板使用的,不同的板子使用不同的文件。
其中我们需要关心的只有下面的这三个文件:
这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文件。
将上面这三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了,第二阶段就是从 files
目录中读取整个系统文件,并将其烧写到 EMMC 中。下面接着看file文件夹。
2 、files 文件夹
files 目录中的文件和firmware 目录中的基本差不多,都是不同板子对应的 uboot、设备树文件
同样,我们只关心下面四个文件:
3 、ucl2.xml 文件
files 和 firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这
个工作就是由 ucl2.xml 文件来完成的。ucl2.xml 以“<UCL>”开始,以“</UCL>”结束。 “<CFG>”
和“</CFG>”之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。
“<LIST>”和“</LIST>”之间的是针对不同存储芯片的烧写命令。整体框架如下:
ucl2.xml 首先会判断当前要向 I.MX 系列的哪个芯片烧写系统,然后通过读取芯片的VID和PID来判断当前要烧写什么处理器的系统,接下来通过调用 *.vbs文件来确定给什么存储设备烧写系统。
比如在这里就调用的是mfgtool2-yocto-mx-evk-emmc.vbs 文件
在文件第二行中”eMMC”就表示用EMMC烧写系统。
接下来在ucl2.xml 中找到相应的烧写命令
上面的命令就是BootStrap阶段,也就是第一阶段, “file”表示要下载的文件位置,在firmware
目录下,文件名字为
u-boot-imx6ul%lite%%6uluboot%_emmc.imx
在 L4.1.15_2.0.0-ga_mfg-tools\mfgtools-with-rootfs\mfgtools-with-rootfs\mfgtools 下找到 cfg.i
ni 文件,该文件里包含了开发板的一些信息,查看 cfg.ini 文件可得 lite=l 以及一些字符串代表
的值。
查看这个cfg.ini 文件后发现文件内容中6uluboot的值和正点原子资料上写的值不一样。正点原子资料上写的值如下:
实际查看cfg.ini 文件内容后,值如下:
将实际配置文件中的值带入后就是:
u-boot-imx6ul%lite%%6uluboot%_emmc.imx = u-boot-imx6ull14x14ddr3arm2_emmc.imx
所以,这里向 DDR 中下载的是 firmware/ u-boot-imx6ull14x14ddr3arm2_emmc.imx
虽然按照实际文件解析出来的uboot文件名是u-boot-imx6ull14x14ddr3arm2_emmc.imx和正点原子资料上说的不一样,但是烧写完系统后,开发板可以正常运行。
这是为什么呢?难道是这几个变量的值在其他地方被改变了?
没错,配置文件中的变量值是被烧写软件*.vbs 修改了
用文本的格式打开mfgtool2-yocto-mx-evk-emmc.vbs 软件,查看里面的内容。
对比这个vbs文件和配置文件内容
可以发现在vbs文件中重新设置了变量mmc、6uluboot、6uldtb的值,所以最终变量6uluboot值会被替换为14x14evk,变量6uldtb 值会被替换为14x14-evk。
这样一来烧写的uboot文件和设备树文件就可以和上面所要求的文件名对应上了。
同样的方法将.dtb(设备树)和 zImage 都下载到 DDR 中以后就会跳转去运行 OS,这个时候会在 MfgTool 工具中会有“Jumping to OS image”提示语句,ucl2.xml 中的跳转命令如下:
启动 Linux 系统以后就可以在 EMMC 上创建分区,然后烧写 uboot、zImage、.dtb(设备树)
和根文件系统。这个就是 MfgTool 的整个烧写原理。
烧写步骤
1.连接USB线
MfgTool 是通过 USB OTG 接口将系统烧写进 EMMC,这里使用的是正点原子的IMX6ULL-MINI开发板,USB OTG接口不能给开发板供电,如果要使用USB供电的话,还需要一根USB线连接到USB_TTL口给开发板供电。
2.开发板设置为USB模式
将开发板的拨码开关拨到 USB 模式。
如果插了 TF 卡,请弹出 TF 卡,否则电脑不能识别 USB!
3.开发板上电
给开发板上电,这时候电脑就会自动安装USB驱动,驱动程序安装成功后,电脑就会有“登登”的提示音。
4.打开烧写软件
双击打开 mfgtool2-yocto-mx-evk-emmc.vbs 软件
如果通过USB成功连接到了开发板时,软件上面就会提示已经成功连接到了设备。
如果USB驱动安装失败,或者开发板没有上电,就会提示没有连接到设备。
5.开始烧写
连接成功后点击“Start”按钮即就可以开始烧写系统呢,具体烧写什么东西呢?
系统默认会烧写 uboot、Linux kernel、.dtb 和 rootfs 这四个文件。那么这4个文件还没有准备,系统烧写的文件是哪里来了?如果自己没有替换文件,那么软件默认烧写的就是NXP官方自带的文件。
在烧写的过程中USB连接会断开一次
这个不用担心,过一会就会自动连接。
这个烧写的过程会比较久,会有十几二十分钟。
在烧写的过程如果打开串口终端,就会看到串口会输出系统烧写时具体的过程。
烧写完成后进度条就会变成绿色
此时在串口终端上也会有相应的信息提示。
然后点 Stop 按钮,在点Exit按钮退出。
将开发板断电,将拨码开关拨到EMMC模式,然后给开发板重新上电。
同样打开串口终端,就可以看到系统输出的信息。
启动成功后,系统会提示输入登录信息
直接输入root,然后按回车键。
进入到根目录中,使用ls命令,显示根目录中的文件。
到这里就说明使用MfgTool工具已经成功的将NXP官方的系统下载到了自己的开发板上。
接下来我们就按照同样的方法,烧写自己的系统文件。