1、软件的构成html
以官网下载的L4.1.15_2.0.0-ga_mfg-tools.tar.gz软件包为例子。在官网下载好软件包后在本地解压,解压后以下图所示,其中红色箭头所指向的文件及文件夹为配置下载工具时须要修改及注意的地方。linux
文件说明:ide
cfg.ini文件:用来配置镜像所在的文件夹位置、及ucl2.xml中执行哪一个列表的指令、定义一些初始化参数。工具
UICfg.ini:定义MfgTool软件能同时烧录几块SoC,官方文档说明最大设定值4,对应4块。ui
Document/: 关于Mfgtool 的使用文档;spa
Drivers/: USB iMX_BulkIO_Driver;orm
Profiles/: 存放要烧录的image文件以及ucl.xml;xml
mfgtool.log:关于Mfgtool使用过程当中的log记录。htm
mfgtool2-***.vbs:.vbs文件是用来执行MfgTool2.exe的脚本并传递参数到软件,若是cfg.ini文件中也定义了一样的参数默认.vbs中的参数会覆盖cfg.ini中的参数值。接口
2、Mfgtool工做原理
参考 517-MFGTOOLCustomizationGuide.pptx官方ppt里面介绍Mfgtool的启动流程图。
一、 当 i.MX6板子上电后,什么都没有初始化,只有Chip ROM(芯片的内部ROM)能够运行。Chip ROM的默认程序会去初始化USB,并将其配置为HID设备。这就是为何板子设置为Download模式并上电后在PC端的设备管理器能够看到HID-compliant device连上。
二、 一旦PC机检测到HID设备连上,那么PC(USB Host)就会去枚举设备并创建链接。创建链接后的第一件事就是传送一个mini uboot(firmware)到目标板SoC的Chip RAM(芯片的内部RAM)中而后开始运行mini uboot(firmware)。mini uboot会对目标板进行初始化,主要是初始化 DDR/外部ROM等设备,因此以后DDR及外部ROM已经能够访问了。mini uboot从mini uboot中提取内存初始化代码或数据来执行任务。也可使用内存初始化脚原本获取初始化数据。
三、 初始化外部基本接口以后,PC端会将mini kernel(firmware)、mini system(firmware)、dtb(firmware)传送给SoC并放到DDR(外部RAM)指定的地址。而后PC发送命令(ucl2.xml中<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>)给Chip ROM让其跳转到DDR的kernel首地址去执行。
四、 跳转到kernel以后,初始化USB驱动,并枚举为一个MSC设备,此时SoC能够和主机进行高速数据传输。
五、 以后PC机MFGTool工具经过ucl2.xml中的脚本逐条执行剩下的指令直到最后遇到Done指令。
注:
* 上面提到的mini uboot、mini kernel、mini system、dtb文件均在软件目录下的\Profiles\Linux\OS Firmware\firmware文件夹下。
* mini kernel必需要配置USB、USB大容量存储驱动、SD卡、UTP等。详见:mfgtools\Document\V2\Manufacturing Tool V2 Linux or Android Firmware Development Guide V2.docx文档。
* mini kernel启动linuxrc做为第一个进程,linuxrc实际上是一个脚本,最终经过执行 uuc 来启动UTP传输协议。UTP是做为USB Mass Storage(v4 Kernel)驱动的扩展,因此启动 UTP 必须对 USB 进行复位而后从新枚举。
到此MFGTool的工做原理基本就讲解完。了解到MFGTool的工做机制以后会帮助开发人员在从此的开发过程当中更容易的去发现问题,也能够为往后根据各自须要对MFGTool定制提供一个参考。
原文连接:https://www.forlinx.com/article_view_367.html