【uboot】MMC的代码分布

问题一:从下图可知mmc有3个分区,uboot是储存在分区1吗?有没有分区0?


问题二:zImage和设备树以及根文件系统都保存在分区2?

  1. uboot 存储在 boot1 分区,也就是 /dev/mmcblk1boot0 分区;
  2. zImage 设备树 根文件系统都保存在分区 2,也就是 /dev/mmcblkp2 分区;

    图片来自:eMMC · Linux Kernel Internals

问:要如何在 u-boot 处升级 u-boot?
答:参考博客:U-Boot命令之EMMC和SD卡操作命令_一只青木呀的博客-CSDN博客_mmc read

问:要如何在 u-boot 出访问 boot2 分区?
答:参考博客:https://www.daimajiaoliu.com/daima/47229f0d3100400

# 在 linux 处,用 shell 命令写入数据:
echo 0 > /sys/block/mmcblk1boot1/force_ro && echo ABCD | dd of=/dev/mmcblk1boot1 bs=4 count=1 seek=0 && sync
# 重启设备,
reboot

# 在 u-boot 处切换到 boot2 分区
=> mmc dev 1 2 
# 读取 boot2 分区的数据到 RAM 中,偏移为 0,大小为 1 块
=> mmc read 80800000 0 1
# 打印 RAM 空间的数据
=> md.b 80800000 

问:如何知道 mmc dev 1 2 为切换到 boot2 分区?
答:在 github 搜索关键字 MMC_PART_BOOT2 可得以下结果;
image

问:为何 mmc part 没有显示 boot 分区?
答:看 u-boot 代码,只是读取了 MBR 分区表,并 Print all primary/logical partitions,所以不会显示 boot 分区;


MBR分区表解释见:https://www.jianshu.com/p/c3ce40e3069a

问:为何 boot1、boot2 分区大小都为 4MB?
[ 2.059249] mmcblk1boot0: mmc1:0001 008GB0 partition 1 4.00 MiB
[ 2.065829] mmcblk1boot1: mmc1:0001 008GB0 partition 2 4.00 MiB
答:见博客:linux mmc分区_eMMC 原理 3 :分区管理_负智年帖的博客-CSDN博客

1 个赞
  1. uboot 存储在 boot1 分区,也就是 /dev/mmcblk1boot0 分区;关于你说的这个是下面这个吗?

不是,原因见下:

问:为何 mmc part 没有显示 boot 分区?
答:看 u-boot 代码,只是读取了 MBR 分区表,并 Print all primary/logical partitions,所以不会显示 boot 分区;

请问一下,你是根据哪里看的内核,设备树,文件系统都在/dev/mmcblkp2 分区里面

能否具体解释一下,在该文件没找到

阅读文件:Uboot-2017.03/include/configs/mx6ullevk.h

能否具体解释一下,在该文件没找到

没找到什么?你要找什么?

你是怎么判断内核,设备树,文件系统都在/dev/mmcblkp2 分区里?根据你的回答在mx6ullevk.h里找到,能否详细说明一下

文件系统:
image

dtb、zImage

1 个赞

我有一个疑问这个分区是下载软件生成的还是我们固件?

100ask,提供的烧录工具,是在 ram 中运行 u-boot;然后接收电脑的 usb 数据,也就是 100ask-imx6ull-pro-512d-systemv-v1.img 文件,将其写入 emmc;

emmc 前 1k 空间用来存储 partition table;分区的制作,和 分区表 是由 buildroot 最后打包的时候制作的;如下图:

请问一下,buildroot这个分区是可以自己配置?还是固定的不能修改的?

可以自己修改,配合 u-boot 一起修改,不然系统起不来;
文件为:

Buildroot_2020.02.x/board/100ask/nxp-imx6ull/genimage.cfg