mfgtools工具BootStrap阶段使用文件的介绍

目录

1、概述

2、4个文件

2.1 uboot

2.2 kernel

2.3 dtb

2.4 rootfs

2.5 其他

2.6 kernel的编译

2.7 ramdisk的制作

1、概述

mfgtools烧录软件时分为两个阶段:BootStrap和Updater。BootStrap阶段会先下载临时的uboot、dtb、zImage和initramfs并运行,为后续的Updater阶段做好准备。

那么这些文件是怎么生成的呢。

2、4个文件

ucl2.xml中的operation list列出了具体使用的是哪个文件。

2.1 uboot

<LIST name="Linux-4.1.15-eMMC" desc="Target OS: Linux-4.1.15(eMMC)">
    <CMD state="BootStrap" type="boot" body="BootStrap" file ="mfgfiles-L4.1.15/uboot-%ek_name%-%ek_spec%-emmc.imx">boot: u-boot</CMD>
    # BootStrap阶段加载的uboot是uboot-%ek_name%-%ek_spec%-emmc.imx这个文件
    
    <CMD state="Updater" type="push" body="send" file="image-L4.1.15-uboot/uboot-%ek_name%-%ek_spec%-emmc.imx">send: u-boot</CMD>
    # Updater阶段加载的uboot也是uboot-%ek_name%-%ek_spec%-emmc.imx这个文件。
  </LIST>

从上面的cmd中可以看出在BootStrap和Updater阶段加载的是同一个uboot,只是使用的环境变量是不一样的,在BootStrap阶段,uboot启动kernel时使用的是bootcmd_mfg命令。bootcmd_mfg命令的具体内容可以参考myimx6a7.h,内容如下:

/* MFG ENV ****************************************************************** */
#define CONFIG_MFG_ENV_SETTINGS \
    "bootargs_mfg=setenv bootargs console=${console},${baudrate} "  \
        "rdinit=/linuxrc "      \
        "g_mass_storage.stall=0 g_mass_storage.removable=1 "    \
        "g_mass_storage.file=/fat g_mass_storage.ro=1 " \
        "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "   \
        "g_mass_storage.iSerialNumber=\"\" "    \
        "${mtdparts} "          \
        "clk_ignore_unused\0"   \
    "bootcmd_mfg=run bootargs_mfg; bootz ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r};\0"

/* COMMON ENV *************************************************************** */
#define CONFIG_EXTRA_ENV_SETTINGS   \
    CONFIG_MFG_ENV_SETTINGS \
    "bootdelay=1\0"     \
    "console="CONFIG_CONSOLE_DEV"\0"    \
    "baudrate="__stringify(CONFIG_BAUDRATE)"\0" \
    "loadaddr=0x80800000\0"     \
    "fdt_addr_r=0x83000000\0"       \
    "kernel_addr_r=0x80800000\0"    \
    "ramdisk_addr_r=0x83800000\0"   \
    "fdt_high=0xffffffff\0"   \
    "initrd_high=0xffffffff\0" \
    "mtdids="MTDIDS_DEFAULT"\0"     \
    "mmcautodetect=yes\0"   \
    "panel=MY-WVGA\0"   \
    "mtdparts="MTDPARTS_DEFAULT"\0" \
    "mmcdev="__stringify(CONFIG_SYS_MMC_ENV_DEV)"\0"    \
    "mmcpart=1\0"   \
    "file_scr="CONFIG_MY_BOOTSCRIPT"\0" \
    "file_ubot=uboot-"CONFIG_BOARD_NAME""CONFIG_BOARD_CPU""CONFIG_BOARD_MEM""CONFIG_BOARD_STORAGE".imx\0"   \
    "fdt_file="CONFIG_BOARD_NAME""CONFIG_BOARD_CPU""CONFIG_BOARD_MEM""CONFIG_BOARD_STORAGE".dtb\0" \
    "my_env_flag=unset\0"   \
    "load_scr_emmc=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${file_scr};\0" \
    "load_scr_nand=nand read ${loadaddr} 0x3c0000 0x20000;\0"

从上面的代码中可以看出,BootStrap阶段kernel是zImage, rootfs的是ramdisk。

2.2 kernel

<LIST name="Linux-4.1.15-eMMC" desc="Target OS: Linux-4.1.15(eMMC)">
    <CMD state="BootStrap" type="load" file="mfgfiles-L4.1.15/mfg-zImage-myimx6a7" address="0x80800000"
        loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">load: zImage(mfg)</CMD>
    # BootStrap阶段加载的kernel是mfg-zImage-myimx6a7这个文件
    
    <CMD state="Updater" type="push" body="send" file="image-L4.1.15-kernel/zImage-myimx6a7">send: zImage</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblkxp1/zImage-myimx6a7">write zImage</CMD>
    # Updater阶段加载的kernel是zImage-myimx6a7这个文件。
  </LIST>

从上面的cmd中可以看出,在BootStrap和Updater阶段加载的kernel是不同的。注意在BootStrap阶段,加载mfg-zImage-myimx6a7时的address参数必须和uboot环境变量中的kernel_addr相同。而在Updater阶段,此时临时的kernel和rootfs已经运行了,zImage-myimx6a7直接加载到了临时文件系统中。

2.3 dtb

<LIST name="Linux-4.1.15-eMMC" desc="Target OS: Linux-4.1.15(eMMC)">
    <CMD state="BootStrap" type="load" file="mfgfiles-L4.1.15/%ek_name%-%ek_spec%-emmc.dtb" address="0x83000000"
        loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">load: dtb</CMD>
    # BootStrap阶段加载的dtb是%ek_name%-%ek_spec%-emmc.dtb这个文件
    
    <CMD state="Updater" type="push" body="send" file="image-L4.1.15-dtb/%ek_name%-%ek_spec%-emmc.dtb">send: dtb</CMD>
    <CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblkxp1/%ek_name%-%ek_spec%-emmc.dtb">write dtb</CMD>
    # Updater阶段加载的dtb是%ek_name%-%ek_spec%-emmc.dtb这个文件。
  </LIST>

从上面的代码中可以看出,在BootStrap和Updater阶段加载的dtb文件是相同的。注意在BootStrap阶段,加载dtb文件时的address参数必须和uboot环境变量中的fdt_addr_r相同。而在Updater阶段,此时临时的kernel和rootfs已经运行了,dtb直接加载到了临时文件系统中。

2.4 rootfs

<LIST name="Linux-4.1.15-eMMC" desc="Target OS: Linux-4.1.15(eMMC)">
    <CMD state="BootStrap" type="load" file="mfgfiles-L4.1.15/fsl-image-mfgtool-initramfs" address="0x83800000"
        loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE">load: initramfs</CMD>
    # BootStrap阶段加载的rootfs是fsl-image-mfgtool-initramfs这个文件
    
    <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblkxp2" file="image-L4.1.15-rootfs/%my_rootfs%">pipe: rootfs</CMD>
    <CMD state="Updater" type="push" body="frf">frf: rootfs</CMD>
    # Updater阶段加载的rootfs是%my_rootfs%这个文件,my_rootfs在cfg.ini中定义。
  </LIST>

从上面的代码中可以看出,在BootStrap和Updater阶段加载的rootfs是不同的。注意在BootStrap阶段,加载rootfs即ramdisk文件时的address参数必须和uboot环境变量中的ramdisk_addr_r相同。而在Updater阶段,此时临时的kernel和rootfs已经运行了,rootfs直接加载到了临时文件系统中,然后再同步到emmc上。

2.5 其他

在Updater阶段,还在下载environment.src等文件。

2.6 kernel的编译

由于在BootStrap和Updater阶段使用的kernel是不同的,因此二者的编译过程是不同的。BootStrap阶段使用的mfg-zImage-myimx6a7在编译时需使用myimx6_mfg_defconfig配置文件。而Updater阶段使用的zImage-myimx6a7则使用myimx6a7_defconfig作为配置文件。

2.7 ramdisk的制作

还没有找到官方的制作方法,使用官方提供的ramdisk即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值