MYS-6ULX-IOT 开发板测评——使用MfgTool更新系统

MYS-6ULX 系列板卡提供两种系统更新的方法:

  • MfgTool 更新
  • SD 卡更新

  本文主要介绍使用 MfgTool 工具更新 MYS-6ULX-IOT 的方法。MfgTool 是 Freescale 官方推荐的一个使用 OTG 来烧录、升级系统镜像的软件工具。MfgTool 工具功能强大、可塑性高,简单来说,有如下特点:

  • 可以用来升级 Linux,也可以升级 Android;
  • 允许单独刷写某一系统分区,如 Android 的 boot.img;
  • 支持独立刷写 SPI NOR、Nand、eMMC 等;
  • 支持多通道刷写,可作为量产工具;

  MfgTool 工具的亮点是它的可拓展性和可塑性,下面我们来看一下这些特性是怎么体现的,以及该如何使用 MfgTools。

  先来看看 MfgTool 的目录结构,下载并解压 03-Tools/ManufactoryTool/MYS-6ULX-mfgtools-20170919.zip,进入 MfgTool 主目录,我们会看到很多文件和子目录,其中较为重要的一些文件结构如下图所示。

这里写图片描述

  其中,MfgTool2.exe 是可执行文件,双击它即可打开烧写工具,但我们这里并不直接运行它,而是通过运行 vbs 脚本文件来启动;cfg.ini、UICfg.ini、ucl2.xml 都是配置文件,后面会详细介绍;Profile里面定义了几层目录,分别存放镜像文件及配置文件。

  需要注意的是,Profile 里面的镜像文件分为两种:第一种是作为媒介用途的镜像,在 Yocto 下包括 “uboot”、“dtb”、“zImage”;第二种是真正烧录到 eMMC、Nand Flash 或者 sdCard 的镜像文件。对于我们这个项目,媒介镜像存放于 firmware 目录,实际烧写的镜像存放于 files 目录。之所以需要两种镜像,是因为 MfgTool 的烧写原理是先烧录媒介镜像到 DDR,然后启动该媒介系统,接着通过该系统把目标镜像固化到 eMMC、Nand Flash 或者 sdCard 里面。

  可以把烧录过程分为两部分:第一部分是烧录前的准备工作;第二部分是 MfgTool 开始烧录到结束烧录的过程。整个烧录过程如下图所示。值得一提的是,第二部分的烧录过程是严格根据 ucl2.xml 文件来进行的。

这里写图片描述

  接下来我们分析一下 MfgTool 的配置文件:

(1)UICfg.ini文件

[UICfg]
PortMgrDlg=1        // 表示同时支持升级的最大设备数,可按需调整

(2)cfg.ini文件

[profiles]
chip = Linux        // 目标平台,对应 Profile/Linux 目录,可根据自己的需求定义 profile

[platform]
board = SabreSD     // 预留,暂时没什么实际的作用

[LIST]
name = SDCard       // Profiles/Linux/OS Firmware/ucl2.xml 里面目标操作列表的名字

[variable]          // ucl2.xml 中对应 name 的 list 会引用到的环境变量
board = sabresd     // 引用模式是 %board%,要和平台的名字一样,否则可能会出错
mmc = 0             // 引用模式是 %mmc%
sxuboot=sabresd
sxdtb=sdb
7duboot=sabresd
7ddtb=sdb
6uluboot=14x14ddr3arm2
6uldtb=14x14-ddr3-arm2
6ulldtb=14x14-ddr3-arm2
ldo=
plus=
lite=l
initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot
seek = 1
sxnor=qspi2
7dnor=qspi1
6ulnor=qspi1
nor_part=0

(3)ucl2.xml文件

  ucl2.xml 是系统升级时的操作文件,MfgTool 会根据文件里面 list 的内容进行相应的升级。文件以如下一行为界线,可以分为上阶段和下阶段。

<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

  上阶段是把“媒介镜像”烧录到DDR里面并启动,下阶段是烧录“file”目录里面的文件到emmc上。我们以 Nand Flash 为例,抽取以下第二阶段内容,需要注意其中的注释:

<!--burn the uboot to NAND: -->
<CMD state="Updater" type="push" body="send" file="files/u-boot-imx6ul%lite%%6uluboot%_%nand%.imx" ifdev="MX6ULL">Sending u-boot.bin</CMD>

<!--burn the kernel to NAND: -->
<CMD state="Updater" type="push" body="send" file="files/zImage-imx6ul%lite%" ifdev="MX6ULL">Sending kernel zImage</CMD>
<CMD state="Updater" type="push" body="send" file="files/zImage-imx6ul%lite%-%6uldtb%-%nanddtb%.dtb" ifdev="MX6ULL">Sending Device Tree file</CMD>

<!--burn the rootfs to NAND: -->
<CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mtd%part_rootfs%" file="files/core-image-base-mys6ull14x14.rootfs.tar.bz2" ifdev="MX6ULL">Sending and writting rootfs</CMD>

  注释下的内容严格规定了MFG Tools的烧录过程,即:“分区 –> 烧写uboot –> 烧写zImage –> 烧写dtb –> 烧写rootfs”。

  顺便分析下 VB Script 脚本的内容吧,对应 Nand Flash 的是 mfgtool2-yocto-mx-evk-nand.vbs,内容如下:

Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""NAND Flash""  -s ""board=sabreauto"" -s ""lite=l"" -s ""6uluboot=14x14evk"" -s ""nand=nand"" -s ""6uldtb=14x14-evk"" -s ""nanddtb=gpmi-weim"" -s ""part_uboot=0"" -s ""part_kernel=1"" -s ""part_dtb=2"" -s ""part_rootfs=3""   "
Set wshShell = Nothing

  显然,该脚本的作用就是启动 mfgtool2.exe,并且传入一些变量,这些变量会覆盖 cfg.ini 文件中的变量,从而达到执行不同脚本更新不同板卡的目的。
  好啦,赶紧在 MYS-6ULX-IOT 上实际操作下吧~

  事先提醒一下:请勿将 DV 5V 电源适配器和 Micro USB 接口同时供电!

  使用 MfgTool 更新系统的流程如下:

  (1)设置拨码开关(SW1)的第3位为 ON,第4位为 OFF;

  (2)使用 USB 转接线(Type-A 转 Micro-B)连接 PC 机 USB 端口与开发板(J7);

  (3)进入 MfgTool 目录,双击执行 mfgtool2-yocto-mx-evk-nand.vbs 脚本(因为 MYS-6ULX-IOT 默认焊接的是 Nand Flash);

  (4)一切正常的话,在设备管理器或 MfgTool 界面可以看到已识别开发板;

这里写图片描述

  (5)点击 MfgTool 界面上的 Start 按钮,MfgTool 就开始自动更新系统至板载存储设备;

这里写图片描述

这里写图片描述

  (6)更新成功后底部的总进度条显示为绿色,若失败则为红色,MfgTool.log 文件会记录错误提示信息。

这里写图片描述

  更新完毕,断开 USB 电源,将拨码开关(SW1)的第3位拨回 OFF,第4位拨回 ON,重新上电即可进入新系统。


  再啰嗦几句~

  媒介镜像主要关注的是 zImage,因为“媒介uboot”在编译 yocto 的时候已经打包好了,具体是“build/tmp/deploy/images/$MACHINE/u-boot-$MACHINE.imx”文件,直接拿来使用就好。dtb 文件也使用编译好的就可以了,没什么特殊要求。zImage 有所要求,但 Freescale 也帮我们铺好路了。看到“arch/arm/configs/ imx_v7_mfg_defconfig”配置文件,使用此配置文件编译出来的 zImage 就是“媒介zImage”。然后把这些媒介的 image 放到 MfgTool 的目录下 Profiles/Linux/OS Firmware/firmware 目录里面即可,不同版本的 MfgTool 路径可能有区别。

  对于 imx_v7_mfg_defconfig 与其他 config 文件不一样的地方就是 CONFIG_FSL_UTP。对应的内核源码在“drivers/usb/gadget/f_mas_stotage.c”里面,具体的作用也就是接收并处理来自 OTG 的 image、script 和 command。

猜你喜欢

转载自blog.csdn.net/luckydarcy/article/details/80230301