转载地址:http://blog.csdn.net/hbk320/article/details/49975841
简介
MFGTools是freescale官方推荐的一个使用OTG来升级镜像的软件。此软件功能很轻大,而且可塑性非常高:可以用来升级linux,升级android;单独刷写某一系统分区,如android的boot.img分区等;独立地刷写spi nor,emmc等等;而且作为一个可量产性的工具,MFGTools可以同时支持多通道的刷写。相对于市面上一些平板厂家的刷机软件,MFGTools的一大亮点就是其可拓展新跟可塑性。究竟这亮点是怎样体现的,下面详细介绍。主要分为四部分:
1、MFGTools的目录结构
2、MFGTools的烧录过程
3、MFGTools配置文件介绍
4、媒介镜像的制作
MFGTools的目录结构
如上图,MFGTools目录的主要关键点在几个地方
1、MfgTool2.exe为可执行程序,打开程序的画面如下
2、ucl2.xml跟 cfg.ini是配置文件,下面会详细介绍
profile里面存放着的是镜像文件,这里面镜像文件分为两种:第一种是作为媒介用途的镜像,在yocto下包括“uboot”,“dtb”跟“uImage”;第二种是真正烧录到emmc或者sdcard的镜像文件。之所以存着这两种镜像,是因为MFGTools的烧写原理是先烧录媒介镜像到ddr里面,然后启动,再通过这个启动了的媒介镜像,最后把目标镜像固化到emmc或者sdcard里面。这方面,下文内容还会补充到。
MFGTools的烧录过程
如上图显示,这里把烧录过程分为两部分:第一部分是烧录前的准备工作;第二部分是MFGTools开始烧录到结束烧录的过程。在这里,需要提示的是,第二阶段的烧录过程是严格根据ucl2.xml文件来进行的,下面来介绍MFGTools的配置文件。
MFGTools配置文件介绍
1、UICfg.ini
内容为:
[UICfg]
PortMgrDlg=1 //表示同时支持升级的最大设备数,按需求调整
2、cfg.ini
内容为:
[profiles]
chip = Linux //目标平台,对应 Profiles/Linux 目录 ,可根据自己需求定义profile
[platform]
board = SabreSD //预留,暂时没什么实际作用
[LIST]
name = SDCard // Profiles\Linux\OS Firmware\ucl2.xml 里面目标操作列表的名字,可按照自己的需求创建不同列表, <LISTname="SDCard" desc="Choose SD Card as media">
[variable] // Profiles\Linux\OS Firmware\ucl2.xml,name里面的list会引用到的环境变量
board = sabresd //引用模式是 %board%。要跟平台的名字一样,不然会导致load dtb的时候出错。
mmc = 0 //引用模式是 %mmc%。
3、ucl2.xml
升级时候的操作文件,MFGtools会根据文件里面 list的内容进行相应的升级。文件以
<CMD state="BootStrap"type="jump" > Jumping to OS image. </CMD>
为界限,可以分为上阶段跟下阶段,上阶段是把“媒介镜像”烧录到ddr里面并跑起来,下阶段是烧录“file”文件夹里面的文件到emmc里面。对于第二阶段,关注以下注释:
<!-- create partition -->
<!-- burn uboot -->
<!-- burn uImage -->
<!-- burn dtb -->
<!-- burn rootfs -->
注释下的内容严格规定了MFGTools的烧录过程,分区-->烧写uboot-->烧写uImage-->烧写dtb-->烧写rootfs。
认真看就很容易看懂。
媒介镜像的制作
媒介镜像注意关注在uImage,因为“媒介uboot”在编译yocto的时候已经打包好了,具体是“build/tmp/deploy/images/$MACHINE/u-boot-$MACHINE.imx”文件,直接拿来使用就好。“dtb”文件也使用编译好的就可以了,没什么特殊要求。uImage有所要求,但freescale也帮我们铺好路了,看到“arch/arm/configs/imx_v7_mfg_defconfig”配置文件,使用此配置文件编译出来的uImage就是“媒介uImage”。然后把这些媒介的image放到MFGTools的目录下“Profiles\Linux\OSFirmware\firmware”里面即可,可能不同版本的MFGTools路径有所区别。
对比imx_v7_mfg_defconfig与其他config文件不一样的地方就是:CONFIG_FSL_UTP。对于的内核代码在“drivers/usb/gadget/f_mas_stotage.c”里面,具体的作用也就是接收并处理来自OTG的image,script和command。