系统烧写1

前面我们已经移植好了uboot和linux kernle,制作好了根文件系统。但是我们移植都是通过网络来测试的,在实际的产品开发中肯定不可能通过网络来运行,否则没网的时候产品岂不是就歇菜了。因此我们需要将uboot、linux kernel、.dtb(设备树)和rootfs这四个文件烧写到板子上的EMMC、NAND或QSPI Flash等其他存储设备上,这样不管有没有网络我们的产品都可以正常运行。本章我们就来学习一下如何使用NXP官方提供的MfgTool工具通过USB OTG口来烧写系统。
其实前面已经写过类似的,这一次是烧写我们改变过的系统。

Windows下OTG烧写
这里要用到 MfgTool工具。(MfgTool工具是NXP提供的专门用于给I.MX系列CPU烧写系统的软件,可以在NXP官网下载到。)

烧写方式
1、连接USB线
MfgTool是通过USB OTG接口将系统烧写进EMMC中的,正点原子I.MX6U-ALPHA开发板上的USB OTG口如图所示:

在这里插入图片描述

并要将开发板调成USB模式,若有TF卡插入,需要将TF卡拔出。

在这里插入图片描述

一切准备就绪以后,按一下开发板的复位键,此时就会进入到USB模式,如果是第一次进入USB模式的话可能会久一点,这个是免驱的,因此不需要安装驱动。

在这里插入图片描述

如果出现“符合 HID 标准的供应商定义设备”就说明连接正常,可以进行烧写,如果出现其他的字符那么就要检查连接是否正确。点击“Start”按钮即可开始烧写,烧写什么东西呢?肯定是烧写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其实是先通过USB OTG先将uboot、kernel和.dtb(设备树)这是三个文件下载到开发板的DDR中,注意不需要下载rootfs。就相当于直接在开发板的DDR上启动Linux系统,等Linux系统启动以后再向EMMC中烧写完整的系统,包括uboot、linux kernel、.dtb(设备树)和rootfs,因此MfgTool工作过程主要分两个阶段:
①、将firmware目录中的uboot、linux kernel和.dtb(设备树),然后通过USB OTG将这个文件下载到开发板的DDR中,目的就是在DDR中启动Linux系统,为后面的烧写做准备。
②、经过第①步的操作,此时Linux系统已经运行起来了,系统运行起来以后就可以很方便的完成对EMMC的格式化、分区等操作。EMMC分区建立好以后就可以从files中读取要烧写的uboot、linux kernel、.dtb(设备树)和rootfs这4个文件,然后将其烧写到EMMC中,这个就是MfgTool的大概工作流程。
1、firmeare文件夹
打开firmware文件夹,里面有很多的.imx结尾的uboot文件、一个zImage镜像文件、很多.dtb结尾的设备树文件。这些文件都是NXP官方开发板使用的,不同的板子使用不同的文件,其中我们需要关心的只有这三个文件:
脚本文件 描述
zImage NXP官方I.MX6ULL EVK开发板的Linux镜像文件。
u-boot-imx6ull14x14evk_emmc.imx NXP官方I.MX6ULL EVK开发板的uboot文件。
zImage-imx6ull-14x14-evk-emmc.dtb NXP官方I.MX6ULL EVK开发板的设备树

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

2、files文件夹
将表39.2.2.1中的这三个文件下载到开发板的DDR上以后烧写的第一阶段就完成了,第二阶段就是从files目录中读取整个系统文件,并将其烧写到EMMC中。files目录中的文件和firmware目录中的基本差不多,都是不同板子对应的uboot、设备树文件,同样,我们只关心四个文件:
脚本文件 描述
zImage NXP官方I.MX6ULL EVK开发板的Linux镜像文件。
u-boot-imx6ull14x14evk_emmc.imx NXP官方I.MX6ULL EVK开发板的uboot文件。
zImage-imx6ull-14x14-evk-emmc.dtb NXP官方I.MX6ULL EVK开发板的设备树
rootfs_nogpu.tar.bz2 根文件系统,注意和另外一个rootfs.tar.bz2根文件系统区分开。nogpu表示此根文件系统不包含GPU的内容,I.MX6ULL没有GPU,因此要使用此根文件系统
如果要烧写我们自己编译出来的系统,就需要用我们编译出来的zImage、u-boot.imx和imx6ull-alientek-emmc.dtb和rootfs这四个文件替换掉这四个文件。
3、ucl2.xml文件
files和firmware目录下有众多的uboot和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由ucl2.xml文件来完成的。ucl2.xml以“”开始,以“”结束。“”和“”之间是配置相关内容,主要是判断当前是给I.MX系列的哪个芯片烧写系统。“”和“”之间的是针对不同存储芯片的烧写命令。整体框架如下:

<UCL>
    <CFG>
    ......
    <!-- 判断向I.MX系列的哪个芯片烧写系统 -->
    ......
    </CFG>
    
    <LIST name="SDCard" desc="Choose SD Card as media">
    <!-- 向SD卡烧写Linux系统 -->
    </LIST>
    
    <LIST name="eMMC" desc="Choose eMMC as media">
    <!-- 向EMMC烧写Linux系统 -->
    </LIST>

    <LIST name="Nor Flash" desc="Choose Nor flash as media">
    <!-- 向Nor Flash烧写Linux系统 -->
    </LIST>

    <LIST name="Quad Nor Flash" desc="Choose Quad Nor flash as media">
    <!-- 向Quad Nor Flash烧写Linux系统 -->
    </LIST>

    <LIST name="NAND Flash" desc="Choose NAND as media">
    <!-- 向NAND Flash烧写Linux系统 -->
    </LIST>

    <LIST name="SDCard-Android" desc="Choose SD Card as media">
    <!-- 向SD卡烧写Android系统 -->
    </LIST>
    
    <LIST name="eMMC-Android" desc="Choose eMMC as media">
    <!-- 向EMMC烧写Android系统 -->
    </LIST>
    
    <LIST name="Nand-Android" desc="Choose NAND as media">
    <!-- 向NAND Flash烧写Android系统 -->
    </LIST>
    
    <LIST name="SDCard-Brillo" desc="Choose SD Card as media">
    <!-- 向SD卡烧写Brillo系统 -->
    </LIST>
</UCL>
21 <CFG>
22   <STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/>
23   <STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
24   <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
25   <STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/>
26   <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
27   <STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/>
28   <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
29   <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
30 </CFG>

通过读取芯片的VID和PID即可判断出当前要烧写什么处理器的系统,如果VID=0X15A2,PID=0080,那么就表示要给I.MX6ULL烧写系统。确定了处理器以后就要确定向什么存储设备烧写系统,这个时候就要有请mfgtool2-yocto-mx-evk-emmc.vbs再次登场,此文件内容如下:
 

Set wshShell = CreateObject(“WScript.shell”)
wshShell.run "mfgtool2.exe -c ““linux”” -l ““eMMC”” -s ““board=sabresd”” -s ““mmc=1"” -s ““6uluboot=14x14evk”” -s ““6uldtb=14x14-evk”””
Set wshShell = Nothing

前面说了烧写分两个阶段,第一步是通过USB OTG向DDR中下载系统,第二步才是正常的烧写。通过USB OTG向DDR下载uboot的命令如下:

Loading U-boot

上面的命令就是BootStrap阶段,也就是第一阶段,“file”表示要下载的文件位置,在firmware目录下,文件名字为
u-boot-imx6ul%lite%%6uluboot%_emmc.imx
在L4.1.15_2.0.0-ga_mfg-tools\mfgtools-with-rootfs\mfgtools-with-rootfs\mfgtools下找到cfg.ini文件,该文件里包含了开发板的一些信息,查看cfg.ini文件可得lite=l以及一些字符串代表的值。
“%lite%”和“%6uluboot%”分别表示取lite和6uluboot的值,而lite=l,6uluboot=14x14evk,因此将这个值代入以后就是:
u-boot-imx6ull14x14evk _emmc.imx
所以,这里向DDR中下载的是firmware/ u-boot-imx6ull14x14evk _emmc.imx这个uboot文件。同样的方法将.dtb(设备树)和zImage都下载到DDR中以后就会跳转去运行OS,这个时候会在MfgTool工具中会有“Jumping to OS image”提示语句,ucl2.xml中的跳转命令如下:
示例代码39.2.2.5 跳转到OS
Jumping to OS image.
启动Linux系统以后就可以在EMMC上创建分区,然后烧写uboot、zImage、.dtb(设备树)和根文件系统。
这个就是MfgTool的整个烧写原理,弄懂了烧写原理以后就可以开始试着先将NXP官方的系统烧写到正点原子的I.MX6U-ALPHA开发板中。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值