Mfgtool是用于下载bin或者image到目标板子上的PC软件,包括ramdisk
、u-boot
、uImage
等文件,本文主要讲述i.MX6使用Mfgtool烧录image原理。如有错误,请指出。
简介
可以从freescale的官网上下载Mfgtool,里面包含Mfgtool的使用说明.
http://www.nxp.com/products/automotive-products/microcontrollers-and-processors/arm-mcus-and-mpus/i.mx-application-processors/i.mx-6-processors/i.mx-6quadplus-processor-quad-core-high-performance-advanced-3d-graphics-hd-video-advanced-multimedia-arm-cortex-a9-core:i.MX6QP?tab=Design_Tools_Tab
目录结构如下:
Document/
: 关于Mfgtool 的使用文档;Drivers/
: USB iMX_BulkIO_Driver;Profiles/
: 存放要烧录的image文件以及ucl.xml;Utils/
: 暂时还不知道用途是什么;mfgtool.log
:关于Mfgtool使用过程中的log记录。
使用步骤
详细的使用步骤可以参考下载Mfgtool中Document/
下的文档:mfgtools\Document\V2\Manufacturing Tool V2 Quick Start Guide.docx
mfgtools\Document\V2\Manufacturing Tool V2 Work Flow.docx
烧写步骤
- 通过板子的USB OTG口连接到PC机上;
- 设置启动模式为Download mode,启动模式有下面几种:
- 板子上电之后在PC端的设备管理器上可以看到一个
HID-compliant device
设备; - 打开PC机上的Mfgtool工具,并开始烧写。
注意:在这过程中,板子会被枚举为一个mass storage的设备。
Mfgtool工作原理
参照MFGTOOLCustomizationGuide.pptx 里面介绍用户客制化Mfgtool的详细步骤。
- 当板子上电后,什么都没有初始化,只有ROM可以run。固化在ROM的code会去初始化USB,并将其配置为HID设备。这就是为什么板子设置为download模式并上电后在PC端的设备管理器可以看到
HID-compliant device
连上。 - 一旦PC机检测到HID设备连上,那么PC(USB Host)就会去枚举设备并建立连接。建立连接后的第一件事就是传送一个Mfgtools firmware(mini uboot)到目标板 SoC 的 IRAM 中然后开始运行,u-boot 会对目标板进行初始化, 重点是初始化 DDR/eMMC 等设备, 所以之后 DDR 及 eMMC已经可以访问了。它会展开初始化内存的代码或者是从image(像u-boot)获取数据。也支持内存初始化脚本去初始化数据。当DRAM初始化完毕之后,就可以准备运行code了。
- 当DRAM初始化完毕之后,PC就会将Mfgtools firmware(mini OS和mini RAM文件系统)放到RAM中去执行,然后PC发送命令给ROM让其跳转到mini OS去执行。注意,这里的mini OS实际上是一个小型的系统,主要用来烧录(dd命令)我们编译好的normal OS。
mini OS必须要配置USB、USB大容量存储驱动、SD卡、UTP等。详见:mfgtools\Document\V2\Manufacturing Tool V2 Linux or Android Firmware Development Guide V2.docx
文档。
之所以要自己客制化mini OS系统用于烧写normal OS,而不是Mfgtools集成这个小的系统。是因为每个客户都有自己定制的板子,NAND/eMMC/USB配置都有可能不一样,所以这些初始化这些设备需要客户自己来定制。 - 这之后启动mini OS(上面说的在烧录过程中可以看到串口的打印信息都是在mini OS里面打印的)。通过 command line 可以看到,此mini OS 启动 linuxrc 作为第一个进程,linuxrc 其实是一个脚本,最终通过执行 uuc 来启动 UTP传输协议。UTP 是作为 USB File Storage(v3 Kernel)或 USB Mass Storage(v4 Kernel)驱动的扩展。所以启动 UTP 必须对 USB 进行 reset 然后重新枚举。
直观的感觉就是(v3 Kernel 是在 PC上弹出发现一个需要格式化的存储设备)(v4 Kernel 是了现一个 USB File-Stor Gadget Divice设备)。
由于在mini OS我们配置了USB MSC设备,支持大的数据量传输。这就是为什么在烧录过程中会提示格式化磁盘。 - 之后PC就会将ucl.xml中的命令传输给mini OS去执行(包括dd命令),将用户编译的normal OS文件烧录。该mini OS可以支持很多命令,并且可以执行脚本,先分区,然后把相应的image文件逐一传送过来,通过 dd 写入到相应的分区。
注:mini OS是可以根据板子的情况进行定制。具体的定制步骤可以参照下面的文档:mfgtools\Document\V2\Manufacturing Tool V2 Linux or Android Firmware Development Guide V2.docx
mini OS客制化过程
mini u-boot客制化
ucl.xml
ucl.xml
文件存放着Mfgtool和Kernel要执行的命令。具体参照下面的文档:mfgtools\Document\V2\Manufacturing Tool V2 UCL User Guide.docx