首页 > 系统相关 >MfgTool 烧写 Linux 系统(imx6ull)【转】

MfgTool 烧写 Linux 系统(imx6ull)【转】

时间:2023-01-10 10:23:25浏览次数:64  
标签:文件 MfgTool emmc boot 烧写 开发板 imx6ull rootfs

转自:https://www.cnblogs.com/dhtblog/p/14505677.html 仅供参考学习使用

一、烧写原理

  1、开发板连接电脑以后双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开下载对话框,连接正常后点击start:    

  

  2、烧写的内容:

  uboot、Linux kernel、.dtb、rootfs

  进入如下目录:L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware

  

   重要文件:files、firmware、ucl2.xml  

  MfgTool 其实是先通过 USB OTG 先将 uboot、kernel 和.dtb(设备树)这是三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。就相当于直接在开发板的 DDR上启动 Linux 系统,等 Linux 系统启动以后再向 EMMC 中烧写完整的系统,包括 uboot、linuxkernel、.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 的大概工作流程。

  a、firmware文件夹

  

   如果要烧写我们的系统,就需要用我们编译出来的 zImage、u-boot.imx 和 imx6ull-alientek-emmc.dtb 这三个文件替换掉,同时文件名字改为表中的名字。

  b、file文件夹 

  将上表 中的这三个文件下载到开发板的 DDR 上以后烧写的第一阶段就完成了,第二阶段就是从 files 目录中读取整个系统文件,并将其烧写到 EMMC 中。

  file文件夹中需要4个文件

    

  如果要烧写我们自己编译出来的系统,就需要用我们编译出来的 zImage、u-boot.imx 和imx6ull-alientek-emmc.dtb 和 rootfs 这四个文件替换掉表 中这四个文件。

   c、ucl2.xml文件

  files 和 firmware 目录下有众多的 uboot 和设备树,那么烧写的时候究竟选择哪一个呢?这个工作就是由 ucl2.xml 文件来完成的。

二、烧写NXP官方系统

  烧写步骤:

    ①、连接好 USB,拨码开关拨到 USB 下载模式。

    ②、弹出 TF 卡,然后按下开发板复位按键。

    ③、打开 SecureCRT。

    ④、双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开下载软件,如果出现“符合 HID 标准的供应商定义设备”等字样就说明下载软件已经准备就绪。点击“Start”按钮开发烧写 NXP 官方系统,烧写过程如下图:  

    

    等待烧写完成,因为 NXP 官方的根文件系统比较大,因此烧写的时候耗时会久一点。烧写完成以后 MfgTool 软件如下图:

    

     点击Stop停止烧写,点击Exit退出。拔出 USB 线,将开发板上的拨码开关拨到 EMMC 启动模式,然后重启开发板,此时就会从 EMMC 启动。

三、烧写自制的系统

  1、准备要烧写的原材料:

    ①、自己移植编译出来的 uboot 可执行文件:u-boot.imx。  

    ②、自己移植编译出来的 zImage 镜像文件和开发板对应的.dtb(设备树),对于 I.MX6U-ALPHA 开发板来说就是 imx6ull-alientek-emmc.dtb。  

    ③、自己构建的根文件系统 rootfs,这里我们需要对 rootfs 进行打包,进入到 Ubuntu 中的rootfs 目录中,然后使用 tar 命令对其进行打包,命令如下:

cd rootfs/
tar -vcjf rootfs.tar.bz2 *

  2、文件重命名

    

   3、文件替换

    zImage、u-boot-imx6ull14x14evk_emmc.imx 和 zImage-imx6ull-14x14-evk-emmc.dtb 这三个文件拷贝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/firmware 目录中,替换掉原来的文件。

    4 个文件都拷贝到 mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmware/files目录中,这两个操作完成以后我们就可以进行烧写了。

  4、系统烧写

    双击“mfgtool2-yocto-mx-evk-emmc.vbs”,打开烧写软件,点击“Start”按钮开始烧写,点击Exit退出。拔出 USB 线,将开发板上的拨码开关拨到 EMMC 启动模式,然后重启开发板,此时就会从 EMMC 启动。

四、改造自己的烧写工具

  firmware文件夹保留:fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot,fsl-image-mfgtool-initramfs-imx6qdlsolo.cpio.gz.u-boot,initramfs.cpio.gz.uboot文件,其它删除

  files文件夹保留:fsl-image-mfgtool-initramfs-imx6qdlsolo.cpio.gz.u-boot文件,其它删除

  1、改造MfgTool 

    ①、针对不同的核心版,确定系统文件相关名字。
    ②、新建我们自己的.vbs 文件。
    ③、修改 ucl2.xml 文件。

  2、确定系统文件名字

    确定系统文件名字是为了兼容NAND和EMMC两个版本,以版本名做结尾命名。

    命名格式:原文件名-公司名/型号名-版本名

    

   3、新建.vbs和修改ucl2.xml文件

     ①、直接复制 mfgtool2-yocto-mx-evk-emmc.vbs 文件即可,将新复制的文件重命名为 mfgtool2-alientek-alpha-emmc.vbs,文件内容不要做任何修改,.vbs 文件我们就新建好了。

     ②、修改ucl2.xml文件

  在修改 ucl2.xml 文件之前,先保存一份原始的 ucl2.xml。将 ucl2.xml 文件改为如下所示内容:

复制代码
<UCL>
  <CFG>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>



<!-- 向 EMMC 烧写系统 -->
<LIST name="eMMC" desc="Choose eMMC as media">
    <CMD state="BootStrap" type="boot" body="BootStrap" file="firmware/u-boot-alientek-emmc.imx" ifdev="MX6ULL">Loading U-boot</CMD>
    <CMD state="BootStrap" type="load" file="firmware/zImage-alientek-emmc" 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-alientek-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>
<!-- burn 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-bootarg</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/u-boot-alientek-emmc.imx" 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 1 > /sys/block/mmcblk%mmc%boot0/force_ro"> re-enable read-only access</CMD>
    <CMD state="Updater" type="push" body="$ mmc bootpart enable 1 1 /dev/mmcblk%mmc%">enable boot partion 1 to boot</CMD>

<!-- create fat partition -->
    <CMD state="Updater" type="push" body="$ while [ ! -e /dev/mmcblk%mmc%p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition ready</CMD>
    <CMD state="Updater" type="push" body="$ mkfs.vfat /dev/mmcblk%mmc%p1">Formatting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p1"/>
    <CMD state="Updater" type="push" body="$ mount -t vfat /dev/mmcblk%mmc%p1 /mnt/mmcblk%mmc%p1"/>
<!-- burn zImage -->
    <CMD state="Updater" type="push" body="send" file="files/zImage-alientek-emmc">Sending kernel zImage</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/zImage">write kernel image to sd card</CMD>
<!-- burn dtb -->
    <CMD state="Updater" type="push" body="send" file="files/imx6ull-alientek-emmc.dtb" ifdev="MX6ULL">Sending Device Tree file</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk%mmc%p1/imx6ull-alientek-emmc.dtb" ifdev="MX6ULL">write device tree to sd card</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p1">Unmounting vfat partition</CMD>
<!-- burn rootfs -->
    <CMD state="Updater" type="push" body="$ mkfs.ext3 -F -E nodiscard /dev/mmcblk%mmc%p2">Formatting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk%mmc%p2 /mnt/mmcblk%mmc%p2"/>
    <CMD state="Updater" type="push" body="pipe tar -jxv -C    /mnt/mmcblk%mmc%p2" file="files/rootfs-alientek-emmc.tar.bz2"
        ifdev="MX6UL MX7D MX6ULL">Sending and writting rootfs</CMD>
    <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mmcblk%mmc%p2">Unmounting rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>


</LIST>
</UCL>
复制代码

4、烧写系统

  按照烧写NXP官方系统工具步骤烧写

  注意:避免启动时出错,修改uboot配置文件:uboot源码中include/configs/mx6ull_alientek_emmc.h(改为自己的配置文件)

   找到上图代码段,更改为自己的设备数文件名称

"findfdt="\
    "if test $fdt_file = undefined; then " \
        "setenv fdt_file imx6ull-alientek-emmc.dtb; " \    

  重新编译uboot,在烧写。

 

标签:文件,MfgTool,emmc,boot,烧写,开发板,imx6ull,rootfs
From: https://www.cnblogs.com/xingboy/p/17039337.html

相关文章

  • ubuntu烧写程序到单片机步骤
    /* 使用sdcc编译生成bin或hex文件*/1.sdccmain.c&&packihxmain.ihx>main.hex2.sdccmain.c&&makebin-pmain.ihxmain.bin/*烧写程序*/查看USB连接:lsmod|gr......
  • Hi3516开发笔记(十一):通过HiTools使用网口将uboot、kernel、roofts烧写进eMMC
    前言  前面烧写一直时烧写进入flush,是按照分区烧写。定制的板子挂的是eMMC,前面的烧写步骤一致,但是在烧写目标则时烧写eMMC了。  重新走一遍从无到有通过网口刷定制板......
  • Hi3516开发笔记(十一):通过HiTools使用网口将uboot、kernel、roofts烧写进eMMC
    前言  前面烧写一直时烧写进入flush,是按照分区烧写。定制的板子挂的是eMMC,前面的烧写步骤一致,但是在烧写目标则时烧写eMMC了。  重新走一遍从无到有通过网口刷定制......
  • itop3568开发板一键烧写QT程序到开发板
    根据上一小节设置好编译套件后,打开自己的qt工程,然后点击qtcreator里面的项目,把编译器切换成上一章节设置好的的编译器,如下图所示:然后打开要编译的QT代码的pro文件,......
  • itop3568开发板一键烧写QT程序到开发板
    根据上一小节设置好编译套件后,打开自己的qt工程,然后点击qtcreator里面的项目,把编译器切换成上一章节设置好的的编译器,如下图所示: 然后打开要编译的QT代码的pro......
  • imx6ull 重定位分析
    uboot段相关变量在分析relocate_code函数之前,先来总结一下相关的uboot段相关变量,这些段的地址在uboot代码重定位的时候需要用到,将uboot源码进行编译后,会在源码根目录生成u......
  • MfgTool (i.MX53)使用
    1IntroductionTheMfgToolisamanufacturingtoolfromFreescalethatrunsunderWindows.Itisdesignedtoprogramfirmwaretoi.MXboardsformassproductio......
  • MicroPython——将固件烧写到STM32开发板上
    博主是在win10环境下,将MicroPython固件烧录到stm32F407开发板上。因为博主想学一波STM32F407,有python基础,但c语言基础一般,觉得学库函数觉得太过复杂,且以后方向可能不太搞嵌......
  • imx6ull调试sx1268 lora调试记录
    1、sx1268原厂只有基于单片机的参考代码:​​https://github.com/Lora-net/LoRaMac-node​​2、如果基于linux平台使用,可以使用 github上sx1268代码​​https://github.com/......
  • IMX6ULL system boot
     1、芯片上电运行的第一段代码on-chipbootROM的bootROMcode2、bootmodebootROMcode通过寄存器BOOT_MODE[0:1]的值决定启动方式。bootmode被寄存器BOOT_MOD......