IMX6ULL学习笔记(6)——通过USB OTG烧录U-Boot(MfgTool工具)

一、MfgTool简介

MfgTool 工具是NXP官方推荐的一个使用 USB OTG 来升级镜像的软件工具,它是 NXP 针对 i.MX 系列处理器专门使用的烧录工具,可以用来升级 Linux,单独烧录某一系统分区,独立地烧录 SPI Flash、NOR Flash、SD Card、Nand Flash,EMMC 等,只需简单的配置,就可以使用该工具将编译好 的文件系统和镜像文件烧录到开发板上,使用起来非常方便。而且 MfgTool 工具作为一个可量产性的工具,它支持多通道的烧录,在实际量产中,可以直接使用 Mfgtool 工具同时将文件系统与镜像文件烧录到多个开发板上。

优点:

  • 操作很简单,一键烧写整个映象文件。

缺点:

  • 不能单独烧写 bootloader、内核、设备树(或者说,可以实现这些功能,但是需要你去修改 xml 配置文件,对初学者不友善)。
  • 烧写速度慢(烧写 500M 的系统,耗时 5 分钟)。

二、安装MfgTool

官方GitHub下载:https://github.com/NXPmicro/mfgtools
百度网盘:https://pan.baidu.com/s/1gsUgyBmdYQEJ75l_acW-XA?pwd=4t67 提取码:4t67

三、使用MfgTool烧录U-Boot

3.1 替换U-Boot文件

将野火提供uboot源码编译出的 uboot-dtb.imx 更名:

  • emm版本的重命名为 u-boot-mmc.imx
  • nand版本的重命名为 u-boot-nand.imx

然后进入到 mfgtool 目录中的 mfgtools-release\Profiles\Linux\OS Firmware\release 目录将相应文件替换即可

3.2 修改ucl2.xml文件

mfgtools-release\Profiles\Linux\OS Firmware 目录下的 ucl2.xml 替换为如下内容
也可以下载直接替换 ucl2.xml

  <UCL>
   <CFG>
      <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
      <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
   </CFG>
   <LIST name="eMMC" desc="Choose eMMC as media">
      <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%lite%%6uluboot%_emmc.imx" ifdev="MX6ULL">Loading U-boot</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="0x83800000"
         loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.</CMD>
      <CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul%lite%-%6uldtb%-emmc.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>
      <!-- create partition -->
      <CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
      <CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
      <CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>
      <!-- 烧录uboot 选择uboot的路径-->
      <CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk%mmc% bs=1k seek=768 conv=fsync count=8">clear u-boot arg</CMD>
      <!-- access boot partition -->
      <CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk%mmc%boot0/force_ro">access boot partition 1</CMD>
      <CMD state="Updater" type="push" body="send" file="%files_dir%/%my_uboot%" ifdev="MX6ULL">Sending u-boot.bin</CMD>
      <CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk%mmc%boot0 bs=512 seek=2">write U-Boot to sd card</CMD>
      <CMD state="Updater" type="push" body="$ echo Update Complete!">Uboot Finishing</CMD>
   </LIST>
   <LIST name="NAND Flash" desc="Choose NAND as media">
      <CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot.imx" ifdev="MX6ULL">Loading U-boot</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="0x83800000"
               loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Initramfs.</CMD>
      <CMD state="BootStrap" type="load" file="firmware/imx6ull-seeed-npi.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>
      <CMD state="Updater" type="push" body="send" file="%files_dir%/%my_uboot%" ifdev="MX6ULL">Sending u-boot.bin</CMD>
      <CMD state="Updater" type="push" body="$ kobs-ng init -x -v --chip_0_device_path=/dev/mtd%part_uboot% $FILE">Flashing Bootloader</CMD>
      <CMD state="Updater" type="push" body="$ echo Update Complete!">Uboot Finishing</CMD>
   </LIST>
   </UCL>

3.3 烧录

3.3.1 烧录配置

解压后的 cfg.ini 文件默认为 EMMC 的烧写配置文件。

若想要烧写 NAND 版本镜像,将 cfg.ini 重命名为cfg-emmc.ini,并将 cfg-nand.ini 文件重命名为 cfg.ini 即可。

3.3.2 设置为USB启动模式

将USB OTG与电脑连接,使用USB更新时不能插入SD卡

根据以下BOOT拨码开关启动配置表,调整拨码开关为USB启动方式,

  • emmc版本:即1-4-5-7位拨到on,其他位拨到0
  • nand版本:即1-3-6位拨到on,其他位拨到0
编号 名称 NAND FLASH eMMC SD USB
1 MODE0 0 0 0 1
2 MODE1 1 1 1 0
3 CFG1-4 1 0 0 X
4 CFG1-5 0 1 0 X
5 CFG1-6 0 1 1 X
6 CFG1-7 1 0 0 X
7 CFG2-3 0 1 0 X
8 CFG2-5 0 0 1 X

提示:
也可以选择通过按键方式进入烧录模式,按键法可以不用拨码,拨码状态在之前的 EMMC 或者 NAND 都可以。

  1. 上电
  2. 按下MODE按键
  3. 按下复位(RESET)按键
  4. 松开复位(RESET)按键
  5. 松开MODE按键

此时软件就可以识别到USB了,然后烧录完毕后重启即可。

USB连接成功(如果是第一次进入 USB 模式的话可能会久一点,这个是免驱的,因此不需要安装驱动)。点击 Start按钮开始烧录:

烧录中:


烧录完成:


3.3.3 设置为NAND启动模式

根据以下BOOT拨码开关启动配置表,调整拨码开关为NAND启动方式,即2-3-6位拨到on,其他位拨到0

编号 名称 NAND FLASH eMMC SD USB
1 MODE0 0 0 0 1
2 MODE1 1 1 1 0
3 CFG1-4 1 0 0 X
4 CFG1-5 0 1 0 X
5 CFG1-6 0 1 1 X
6 CFG1-7 1 0 0 X
7 CFG2-3 0 1 0 X
8 CFG2-5 0 0 1 X

四、U-Boot启动

重新上电,在出现 Hit any key to stop autoboot: 倒计时的时候按下键盘上的回车键,就会进入 uboot 的命令行模式。


当进入到 uboot 的命令行模式以后,左侧会出现一个 “=>” 标志。
uboot 启动的时候会输出一些信息:

  • 第1行:uboot 版本号和编译时间,可以看出当前的 uboot 版本号是 2020.10,编译时间是 2022 年 9 月 3 日晚上 18 点 25 分。
  • 第3、4行:CPU 信息,可以看出当前使用的 CPU 是飞思卡尔的 I.MX6ULL(I.MX 以前属于飞思卡尔,然而飞思卡尔被 NXP 收购了),频率为 792MHz,但是此时运行在 396MHz。这颗芯片是工业级的,结温为-40°C~105°C。
  • 第5行:复位原因,当前的复位原因是 POR。I.MX6ULL 芯片上有个 POR_B 引脚,将这个引脚拉低即可复位 I.MX6ULL。
  • 第6行:板子名字,当前的板子名字为 “MX6ULL 14x14 EVK”。
  • 第8行:提示当前板子的 DRAM(内存)为 512MB。
  • 第9行:提示当前板子的 NAND (内存)为 512MB。
  • 第10行:提示当前板子有一个 MMC/SD 卡控制器:FSL_SDHC(0)。
  • 第11行:提示当前板子通过 NAND 方式启动。
  • 第12~14行:标准输入、标准输出和标准错误所使用的终端,这里都使用串口(serial)作为终端。
  • 第15行:网口信息

4.1 查看帮助

输入 help

4.2 查看U-Boot版本

输入 version


• 由 Leung 写于 2022 年 9 月 3 日

• 参考:4. Uboot的烧录
    【imx6ul】从头搭建imx6ul开发环境(uboot、内核编译及烧入、mfgtools详细使用方法)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容