imx8m mini 中如何手动将kernel和dtb拷贝到eMMC上

关键字 :imx8m miniums

在用eMMC调试板子的时候,由于eMMC是焊接在板子上的,若要单独将kernel和dtb文件烧录到eMMC就不像SD卡那样方便,SD卡可以直接从板子上取下来在插入
PC的读卡器后就可以写入更改后的kernel和dtb文件,再插入板子进行调试, 若采用UUU工具直接烧录eMMC,可是UUU工具是将整个image文件烧录到eMMC的,
没有单独的烧录方式。这样就很不方便。

 

如UUU的烧录脚本文件:

uuu_version 1.2.39
# 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
# }

FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}

###这里是烧录整个image文件!!!!

FB: flash -raw2sparse all _rootfs.sdcard
FB: flash bootloader _flash.bin
FB: ucmd if env exists emmc_ack; then ; else setenv emmc_ack 0; fi;
FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0
FB: done

 

那么,在开发调试阶段,可以用Uboot 中的ums 命令,使用UMS [USB 大容量存储]。

使用方法:

ums  [] 
例如 ums 0 mmc 1
devtype 默认为mmc

 

在imx8m mini 的evk板上启动后进入uboot 的console s输入 ums 0 mmc 1 此时,imx8m mini 的evk板就被当成PC的读卡器,PC就可以直接访问eMMC的FAT分区,
可以将改好的kernel和dtb文件直接拷贝到eMMC的FAT分区。如下为对应的部分log :

 

flash target is MMC:1
Net: eth0: ethernet@30be0000
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot: 0
u-boot=> ums 0 mmc 1
UMS: LUN 0, dev 1, hwpart 0, sector 0x0, count 0x1dacc00

 

以上是eMMC中已经有了uboot的情况,若是没有uboot,可以用UUU烧录整个image.



有时候也会用到从SD卡单独将各部分代码copy到空白的eMMC上.其方法如下:

  1. 板子从SD卡启动,进如uboot的console执行如下命令
 u-boot=> ums 0 mmc 1

           将SD卡挂载为你的PC的USB Mass Storage,主要目的是将bootloader拷贝到SD卡的文件系统中,因bootloader是在raw中。

  1. 拷贝bootloader image 到SD卡的文件系统中,执行如下命令
 cp   /media/username//home/root/
  1. 在uboot模式下,用Ctrl+c命令退出USB mass storage并终止ums进程。断电后再上电,进入到kernel console
  2. 烧写bootloader image 到 eMMC
# dd if=/home/root/ of=/dev/mmcblk2 bs=512 seek=33 conv=fsync
  1. 挂载SD卡的partition 1 来拷贝kernel image 和 DTB file 到 /home/root 文件夹.
 # mount /dev/mmcblk1p1 /mnt/
# cp -r /mnt/Image /mnt/fsl-imx8mm-evk.dtb /home/root
# umount /dev/mmcblk1p1
  1. 将eMMC手动分区,用fdisk,可以参考百度用法。
  2. 用vfat格式化eMMC分区1,用ext4格式化eMMC的分区2
 # mkfs.vfat /dev/mmcblk2p1
# mkfs.ext4 /dev/mmcblk1p2​

 

  1. 挂载eMMC的partion 1 并copy kernel image & DTB file.
 # mount /dev/mmcblk2p1 /mnt/
# cp -r /home/root/Image /home/root/ fsl-imx8mm-evk.dtb /mnt/
# umount /dev/mmcblk2p1

 

  1. 挂载eMMC和SD卡的partion 2 并copy 文件系统.
 # mount /dev/mmcblk1p2 /mnt/           // mount partition 2 of SD Card
# mkdir /home/root/rootfs && mount /dev/mmcblk2p2 rootfs // mount partition 2 of eMMC
# cp -ar /mnt/* /home/root/rootfs/
# sync
# umount /dev/mmcblk1p2
# umount /dev/mmcblk2p2​

 

  1. 断电后,改变启动模式为eMMC启动,上电后,即可从eMMC启动.
  2. 完毕!

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论