ALPHA开发板烧录工具MfgTool烧写原理

一.  简介

MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件,可以在 NXP 官网下载到。运行在windows下。可以烧写uboot.imx、zImage、dtb,rootfs。通过 USB口进行烧写。

上一篇文章简单了解了 烧录工具MfgTool (针对ALPHA开发板的)烧写的方法。文章地址如下:

ALPHA开发板烧录工具MfgTool烧写过程-CSDN博客

本文简单了解一下 烧录工具MfgTool的工作原理就行了。MfgTool 只是个工具,具体的原理不需要去深入研究。

二.  ALPHA开发板烧录工具MfgTool烧写原理

MfgTool工具都烧录哪些文件呢?

肯定是烧写 uboot、Linux kernel、.dtb 和 rootfs。
那么,uboot、Linux kernel、.dtb 和 rootfs 这四个应该放到哪里 MfgTool 才能访问到呢?
进入如下目录中:
L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware

此目录中的文件如下所示:

文件夹“ OS Firmware ”看名字就知道是存放系统固件的,我们重点关注 files firmware 这两个文件夹,以及 ucl2.xml 这个文件。

MfgTool 烧写的原理:

在具体看这三个文件和文件夹之前,我们先来简单了解一下 MfgTool 烧写的原理。
MfgTool 其实是先通过 USB OTG 先将 uboot kernel .dtb( 设备树 ) 这三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs 。就相当于直接在开发板的 DDR 上启动 Linux 系统,等 Linux 系统启动以后再向 Nand-Flash 中烧写完整的系统,包括 uboot kernel .dtb( 设备树 ) rootfs。

MfgTool 工作过程主要分两个阶段:

1.  将 firmware 目录中的 uboot linux kernel .dtb( 设备树 ) ,然后通过 USB OTG 将这个 文件下载到开发板的 DDR 中,目的就是在 DDR 中启动 Linux 系统,为后面的烧写做准备。
2.  经过第 1 步的操作,此时 Linux 系统已经运行起来了,系统运行起来以后,就可以很方 便的完成对 Nand-Flash 的格式化、分区等操作。
Nand-Flash 分区建立好以后,就可以从 files 中读取要烧 写的 uboot linux kernel .dtb( 设备树 ) rootfs 4 个文件,然后将其烧写到 Nand-Flash中。

三. MfgTool工具中几个文件或文件夹

注意:下面介绍 MFGTool工具的几个文件或文件夹,以 EMMC 版开发板所使用的文件为例进行说明!!!

1.  firmeare 文件夹

打开 firmware 文件夹,里面有很多的以 .imx 结尾 uboot 文件、一个 zImage 镜像文件、很多 .dtb 结尾的设备树文件。这些文件都是 NXP 官方开发板使用的,不同的板子使用不同的文件,
其中我们需要关心的只有下面 的这三个文件:

上表 中的这三个文件就是 I.MX6ULL EVK 开发板烧写系统的时候第一阶段所需的文 件。如果要烧写我们的系统,就需要用我们编译出来的 zImage u-boot.imx imx6ull-alientek- emmc.dtb 这三个文件替换掉上表中的 这三个文件。但是名字要和上表中 的一致,因 此,需要将 u-boot.imx 重命名为 u-boot-imx6ull14x14evk_emmc.imx ,将 imx6ull-alientek-emmc.dtb 重命名为 zImage-imx6ull-14x14-evk-emmc.dtb

2. files 文件夹

将上表 中的这三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了。
第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。 files 目录中的文件和
firmware 目录中的基本差不多,都是不同板子对应的 uboot 、设备树文件,同样,我们只关心表 下表 中的四个文件:
如果要烧写我们自己编译出来的系统,就需要用我们编译出来的 zImage u-boot.imx
imx6ull-alientek-emmc.dtb rootfs 这四个文件替换掉上表 中这四个文件。 同样的,名字也需要跟上表中名字都保持一致。

3. ucl2.xml 文件

files firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由 ucl2.xml 文件来完成的。
ucl2.xml 以“ <UCL> ”开始,以“ </UCL> ”结束。“ <CFG> ” 和 “ </CFG> ” 之间是配置相关内容,主要是判断当前是给 I.MX 系列的哪个芯片烧写系统。
<UCL>
  <CFG>
    <STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/>
    <STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
    <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
    <STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/>
    <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>

<LIST> ”和“ </LIST> ”之间的是针对不同存储芯片的烧写命令。例如,如下是针对 Nand-Flash版芯片的烧录命令:
 <LIST name="NAND Flash" desc="Choose NAND as media">

	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%plus%%board%_%nand%.imx" ifdev="MX6Q">Loading U-boot</CMD>
	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6dl%board%_%nand%.imx" ifdev="MX6D">Loading U-boot</CMD>
	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6sx%sxuboot%_%nand%.imx" ifdev="MX6SX">Loading U-boot</CMD>
	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx7d%7duboot%_%nand%.imx" ifdev="MX7D">Loading U-boot</CMD>
	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%6uluboot%_%nand%.imx" ifdev="MX6UL">Loading U-boot</CMD>
	<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%lite%%6uluboot%_%nand%.imx" ifdev="MX6ULL">Loading U-boot</CMD>

	<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x12000000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Kernel.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.</CMD>

	<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x12C00000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Initramfs.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000"
				loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.</CMD>

	<CMD state="BootStrap" type="load" file="firmware/zImage-imx6q%plus%-%board%-%nanddtb%.dtb" address="0x18000000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q">Loading device tree.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage-imx6dl-%board%-%nanddtb%.dtb" address="0x18000000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6D">Loading device tree.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage-imx6sx-%sxdtb%-%nanddtb%.dtb" address="0x83000000"
				loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SX">Loading device tree.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage-imx7d-%7ddtb%-%nanddtb%.dtb" address="0x83000000"
				loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX7D">Loading device tree.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul-%6uldtb%-%nanddtb%.dtb" address="0x83000000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6UL">Loading device tree.</CMD>
	<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul%lite%-%6uldtb%-%nanddtb%.dtb" address="0x83000000"
		loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading device tree.</CMD>

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

	<!--burn the uboot to NAND: -->	
	<CMD state="Updater" type="push" body="$ mount -t debugfs debugfs /sys/kernel/debug">Mounting debugfs</CMD>
	<CMD state="Updater" type="push" body="$ flash_erase /dev/mtd%part_uboot% 0 0">Erasing Boot partition</CMD>
	
..............................................
  </LIST>

 

MfgTool工具烧录原理简单介绍到这里。后面使用 MfgTool烧录我们自制系统。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值