请教大家,A33 接了 eMMC, Linux识别到 boot0, boot1 是什么操作?eMMC特有的分区?
[ 1.585115] mmc2: new DDR MMC card at address 0001
[ 1.591821] mmcblk2: mmc2:0001 8GTF4R 7.28 GiB
[ 1.597900] mmcblk2boot0: mmc2:0001 8GTF4R partition 1 4.00 MiB
[ 1.605394] mmcblk2boot1: mmc2:0001 8GTF4R partition 2 4.00 MiB
[ 1.613083] mmcblk2: p1 p2
通过TF卡烧录 eMMC, 然而重新上电并没有反应:
dd if=/dev/mmcblk0 of=/dev/mmcblk2 bs=1M count=300
离线
https://www.cnblogs.com/helloworldtoyou/p/6053460.html
在同事的帮助下才知道emmc有boot1,boot2以及RPMB(Replay Protected Memory Block),GPAP(General Purpose Area Partitions,最多可以有4个),UDA(User Data Area)分区。而我们一般只知道UDA分区。
我们通常对emmc进行分区,也只是对UDA分区。boot1,boot2,RPMB分区是固定的,我们并不能控制器大小和分区格式。如下图所示(图片摘自网络):
....
这坑有点深了, 要研究一下了。
离线
http://trac.gateworks.com/wiki/MMC
卡特定数据(CSD)寄存器(EXT_CSD [179])用于配置加电时选择的分区。可以在Linux中通过mmc-utils应用程序进行配置,也可以在U-Boot中通过mmc partconf命令进行配置(请参见下文)。
感谢提醒, buildroot找到工具了:
# BR2_PACKAGE_MMC_UTILS is not set
离线
感谢提醒, buildroot找到工具了:
# BR2_PACKAGE_MMC_UTILS is not set
https://www.embeddedartists.com/wp-content/uploads/2020/04/Working_with_eMMC.pdf
https://manpages.debian.org/testing/mmc-utils/mmc.1.en.html
还是迷路了, 不知道用哪个子命令。
离线
找到命令了, 可能是这个: mmc bootpart 1 1 /dev/mmcblk2
现在问题来了, 怎么把 u-boot 烧到 boot0 ?
离线
找到一个A64的帖子参考, 先围观一下: https://whycan.cn/t_4437.html
离线
http://trac.gateworks.com/wiki/MMC
https://www.cnblogs.com/Cqlismy/p/12214305.html
# set boot partition to boot0
mmc bootpart enable 1 0 /dev/mmcblk2
# set boot partition to boot1
mmc bootpart enable 2 0 /dev/mmcblk2
# set boot partition to user
mmc bootpart enable 7 0 /dev/mmcblk2
上面三个执行任意一个, 然后再烧录eMMC:
dd if=/dev/mmcblk0 of=/dev/mmcblk2 bs=1M count=200
均不能启动, 这个eMMC有点难度啊。
离线
翻遍网络,终于找到写boot0和boot1的方法了:
这样就可以为所欲为写boot0:
echo 0 > /sys/block/mmcblk2boot0/force_ro
dd if=/dev/zero of=/dev/mmcblk2boot0 bs=1M count=4
这样就可以为所欲为写boot1:
echo 0 > /sys/block/mmcblk2boot1/force_ro
dd if=/dev/zero of=/dev/mmcblk2boot1 bs=1M count=48
我这块eMMC boot0 最大就4M, boot1 最大48M, 根据命令行反馈推测的:
# dd if=/dev/zero of=/dev/mmcblk2boot0 bs=1M count=5
dd: error writing '/dev/mmcblk2boot0': No space left on device
5+0 records in
4+0 records out
# dd if=/dev/zero of=/dev/mmcblk2boot2 bs=1M count=50
dd: error writing '/dev/mmcblk2boot2': No space left on device
50+0 records in
49+0 records out
离线