Thank you for your reply.
1、yocto and sdk:
Refer to 《i.MX_Yocto_Project_User's_Guide》 and 《i.MX_Linux_Users_Guide》.
bitbake imx-image-full -c populate_sdk.
finally, I got yocto enviroment and sdk enviroment.
2、build kernel:
git clone ....; git checkout origin/imx_5.4.47_2.2.0;
source /opt/fsl-imx-wayland/5.4-zeus/environment-setup-aarch64-poky-linux;
make imx_v8_defconfig && make;
so, I got 'linux-imx/arch/arm64/boot/Image' and 'linux-imx/arch/arm64/boot/dts/freescale/imx8mq-evk.dtb';
3、build uboot:
git clone ....; git checkout origin/imx_v2020.04_5.4.47_2.2.0;
source /opt/fsl-imx-wayland/5.4-zeus/environment-setup-aarch64-poky-linux;
make distclean && make imx8mq_evk_defconfig && make.
so, I got 'uboot-imx/u-boot-nodtb.bin', 'uboot-imx/spl/u-boot-spl.bin', 'uboot-imx/tools/mkimage' and 'uboot-imx/arch/arm/dts/imx8mq-evk.dtb';
4、build atf:
git clone ....; git checkout origin/imx_5.4.47_2.2.0;
source /opt/fsl-imx-wayland/5.4-zeus/environment-setup-aarch64-poky-linux;
make PLAT=imx8mq;
so, I got 'imx-atf/build/imx8mq/release/bl31.bin';
5、build fash.bin by using mkimage:
git clone ....; git checkout origin/imx_5.4.47_2.2.0;
copy imx-atf/build/imx8mq/release/bl31.bin to imx-mkimage/iMX8M/bl31.bin
copy uboot-imx/arch/arm/dts/imx8mq-evk.dtb to imx-mkimage/iMX8M/imx8mq-evk.dtb
copy uboot-imx/u-boot-nodtb.bin to imx-mkimage/iMX8M/u-boot-nodtb.bin
copy uboot-imx/spl/u-boot-spl.bin to imx-mkimage/iMX8M/u-boot-spl.bin
copy uboot-imx/tools/mkimage to imx-mkimage/iMX8M/mkimage_uboot
copy imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/lpddr4_pmu_train_1d_dmem.bin to imx-mkimage/iMX8M/lpddr4_pmu_train_1d_dmem.bin
copy imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/lpddr4_pmu_train_1d_imem.bin to imx-mkimage/iMX8M/lpddr4_pmu_train_1d_imem.bin
copy imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/lpddr4_pmu_train_2d_dmem.bin to imx-mkimage/iMX8M/lpddr4_pmu_train_2d_dmem.bin
copy imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/lpddr4_pmu_train_2d_imem.bin to imx-mkimage/iMX8M/lpddr4_pmu_train_2d_imem.bin
copy imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/signed_hdmi_imx8m.bin to imx-mkimage/iMX8M/signed_hdmi_imx8m.bin
make SOC=iMX8M flash_evk
so, I got 'imx-mkimage/iMX8M/flash.bin'
6、use uuu burn image on win10
copy and rename linux-imx/arch/arm64/boot/Image to _Image
copy and rename linux-imx/arch/arm64/boot/dts/freescale/imx8mq-evk.dtb to _board.dtb
copy and rename imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mqevk/imx-image-full-imx8mqevk-20201021065034.rootfs.tar.bz2 to _rootfs.tar.bz2
copy and rename imx-mkimage/iMX8M/flash.bin to _flash.bin
copy and rename L5.4.47-2.2.0_images_MX8MQEVK/fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot to _initramfs.cpio.gz.uboot
uuu.exe emmc.uuu



emmc.uuu:
uuu_version 1.2.39
# Please Replace below items with actually file names
# @_flash.bin | boot loader
# @_Image | kernel image, arm64 is Image, arm32 it is zImage
# @_board.dtb | board dtb file
# @_initramfs.cpio.gz.uboot | mfgtool init ramfs
# @_rootfs.tar.bz2 | rootfs
# @_uTee.tar | optee image, put dummy _uTee.tar file here if platform is not MX6/MX7*
# This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ
SDP: boot -f _flash.bin
# This command will be run when ROM support stream mode
# i.MX8QXP, i.MX8QM
SDPS: boot -f _flash.bin
# These commands will be run when use SPL and will be skipped if no spl
# SDPU will be deprecated. please use SDPV instead of SDPU
# {
SDPU: delay 1000
SDPU: write -f _flash.bin -offset 0x57c00
SDPU: jump
# }
# These commands will be run when use SPL and will be skipped if no spl
# if (SPL support SDPV)
# {
SDPV: delay 1000
SDPV: write -f _flash.bin -skipspl
SDPV: jump
# }
# use uboot burn bootloader to eMMC
# becaue difference chip, offset is difference
# you can use kernel to do that for specific boards
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: flash bootloader _flash.bin
FB: ucmd if env exists emmc_ack; then ; else setenv emmc_ack 0; fi;
FB: ucmd setenv emmc_cmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0
FB: ucmd if test "${emmc_skip_fb}" != "yes"; then run emmc_cmd; fi
FB: ucmd setenv emmc_cmd mmc bootbus ${emmc_dev} 2 2 1;
FB: ucmd if test "${emmc_skip_fb}" != "yes"; then run emmc_cmd; fi
FB: ucmd setenv fastboot_buffer ${loadaddr}
FB: download -f _Image
FB: ucmd setenv fastboot_buffer ${fdt_addr}
FB: download -f _board.dtb
FB: ucmd setenv fastboot_buffer ${initrd_addr}
FB: download -f _initramfs.cpio.gz.uboot
#FB: ucmd setenv bootargs console=${console},${baudrate} earlycon=${earlycon},${baudrate}
FB: acmd ${kboot} ${loadaddr} ${initrd_addr} ${fdt_addr}
# get mmc dev number from kernel command line
# Wait for emmc
FBK: ucmd while [ ! -e /dev/mmcblk*boot0 ]; do sleep 1; echo "wait for /dev/mmcblk*boot* appear"; done;
# serach emmc device number, if your platform have more than two emmc chip, please echo dev number >/tmp/mmcdev
FBK: ucmd dev=`ls /dev/mmcblk*boot*`; dev=($dev); dev=${dev[0]}; dev=${dev#/dev/mmcblk}; dev=${dev%boot*}; echo $dev > /tmp/mmcdev;
# dd to clear the possible MBR
FBK: ucmd mmc=`cat /tmp/mmcdev`; dd if=/dev/zero of=/dev/mmcblk${mmc} bs=512 count=1
# create partition
FBK: ucmd mmc=`cat /tmp/mmcdev`; PARTSTR=$'10M,500M,0c\n600M,,83\n'; echo "$PARTSTR" | sfdisk --force /dev/mmcblk${mmc}
FBK: ucmd mmc=`cat /tmp/mmcdev`; dd if=/dev/zero of=/dev/mmcblk${mmc} bs=1k seek=4096 count=1
FBK: ucmd sync
# you can enable below command to write boot partition. but offset is difference at difference platform
#FBK: ucmd mmc=`cat /tmp/mmcdev`; echo 0 > /sys/block/mmcblk${mmc}boot0/force_ro
#FBK: ucp _flash.bin t:/tmp
#FBK: ucmd mmc=`cat /tmp/mmcdev`; dd if=/tmp/_flash.bin of=/dev/mmc${mmc}boot0 bs=1K seek=32
#FBK: ucmd mmc=`cat /tmp/mmcdev`; echo 1 > /sys/block/mmcblk${mmc}boot0/force_ro
FBK: ucmd mmc=`cat /tmp/mmcdev`; while [ ! -e /dev/mmcblk${mmc}p1 ]; do sleep 1; done
FBK: ucmd mmc=`cat /tmp/mmcdev`; mkfs.vfat /dev/mmcblk${mmc}p1
FBK: ucmd mmc=`cat /tmp/mmcdev`; mkdir -p /mnt/fat
FBK: ucmd mmc=`cat /tmp/mmcdev`; mount -t vfat /dev/mmcblk${mmc}p1 /mnt/fat
FBK: ucp _Image t:/mnt/fat
FBK: ucp _board.dtb t:/mnt/fat
# FBK: ucp _uTee.tar t:/tmp/op.tar
# FBK: ucmd tar -xf /tmp/op.tar -C /mnt/fat
FBK: ucmd umount /mnt/fat
FBK: ucmd mmc=`cat /tmp/mmcdev`; mkfs.ext3 -F -E nodiscard /dev/mmcblk${mmc}p2
FBK: ucmd mkdir -p /mnt/ext3
FBK: ucmd mmc=`cat /tmp/mmcdev`; mount /dev/mmcblk${mmc}p2 /mnt/ext3
FBK: acmd export EXTRACT_UNSAFE_SYMLINKS=1; tar -jx -C /mnt/ext3
FBK: ucp _rootfs.tar.bz2 t:-
FBK: Sync
FBK: ucmd umount /mnt/ext3
FBK: DONE
Thank you.