使用正确的偏移量将分区复制到 emmc

使用正确的偏移量将分区复制到 emmc

我正在尝试填充 emmc 以便在基于 STM32MP1 的主板上启动自定义 Linux 操作系统。 这里这是分区的模式:

TF-A复制到e•MMC的两个启动区域分区(隐藏分区)。

用户区采用 GPT 分区。U-Boot 在 GPT 头之后 17 KB 偏移处启动。

userfs 分区预先填充了 ext4 分区。

Opt     Part    Name     Type       Device  Offset      Binary
P       0x01    fsbl1    Binary     mmc1    boot1       tf-a.stm32
P       0x02    fsbl2    Binary     mmc1    boot2       tf-a.stm32
P       0x03    ssbl     Binary     mmc1    0x00080000  u-boot.stm32
P       0x10    bootfs   System     mmc1    0x00280000  bootfs.ext4.stm32
P       0x11    vendorfs FileSytem  mmc1    0x04280000  vendorfs.ext4.bin
P       0x12    rootfs   FileSytem  mmc1    0x05280000  rootfs.ext4.bin
P       0x13    userfs   FileSytem  mmc1    0x35280000  userfs.ext4.bin 

我有源分区文件:

tf-a-myimage-trusted.stm32
u-boot-myimage-trusted.stm32
st-image-bootfs-openstlinux-eglfs-myimage.ext4
st-image-vendorfs-openstlinux-eglfs-myimage.ext4
st-image-rootfs-openstlinux-eglfs-myimage.ext4
st-image-userfs-openstlinux-eglfs-myimage.ext4

1.如何将ext4分区转换为ext4.bin分区?

我的emmc在目标上显示如下:

# ls -l /dev/mmcblk2*
brw-rw---- 1 root disk 179, 16 Apr 18 08:03 /dev/mmcblk2
brw-rw---- 1 root disk 179, 32 Apr 18 08:03 /dev/mmcblk2boot0
brw-rw---- 1 root disk 179, 48 Apr 18 08:03 /dev/mmcblk2boot1
crw------- 1 root root 245,  0 Apr 18 08:03 /dev/mmcblk2rpmb

据我所知,我必须将 tf-a 图像复制到 mmcblk2boot0 和 mmcblk2boot1 中,然后将其他图像连同它们的偏移量一起复制到 mmcblk2 中(当然我将使用生成的 tsv 文件中的实际偏移量)。

2. 这些命令正确吗?

dd if=/media/usb/tf-a-myimage-trusted.stm32 of=/dev/mmcblk2boot0 bs=8M
dd if=/media/usb/tf-a-myimage-trusted.stm32 of=/dev/mmcblk2boot1 bs=8M
dd if=/media/usb/u-boot-myimage-trusted.stm32 of=/dev/mmcblk2 conv=sparse seek=524288c bs=8M
dd if=/media/usb/st-image-bootfs-openstlinux-eglfs-myimage.ext4 of=/dev/mmcblk2 conv=sparse seek=1024 bs=512
dd if=/media/usb/st-image-vendorfs-openstlinux-eglfs-myimage.ext4 of=/dev/mmcblk2 conv=sparse seek=5120 bs=512
dd if=/media/usb/st-image-rootfs-openstlinux-eglfs-myimage.ext4 of=/dev/mmcblk2 conv=sparse seek=136192 bs=512
dd if=/media/usb/st-image-userfs-openstlinux-eglfs-myimage.ext4 of=/dev/mmcblk2 conv=sparse seek=1741824 bs=512

答案1

STMP15x 上使用的布局意味着 eMMC 用户分区中有一个 GPT 分区(与 SD 卡上一样)

您可以在目标(例如 sgdisk)上使用 gpt 命令在用户区域中创建分区表:

$> sgdisk --resize-table=128 -a 1 \
-n 1:XXXX:XXXX          -c 1:ssbl \
-n 2:XXXX:XXXX          -c 2:bootfs \
-n 3:XXXX:XXXX          -c 3:vendorfs \
-n 4:XXXX:XXXX          -c 4:rootfs \
-n 5:XXXX:              -c 5:userffs \
-p /dev/mmcblk2

XXXX => 需要计算偏移量

然后您可以复制每个分区中的每个二进制文件 Y => mmcblk2pY

例如:

https://wiki.st.com/stm32mpu/wiki/How_to_update_U-Boot#Update_of_e-E2-80-A2MMC_with_the_Linux_dd_command

dd if=/media/usb/st-image-bootfs-openstlinux-eglfs-myimage.ext4 of=/dev/mmcblk2p2 conv=sparse seek=1024 bs=512

或者你可以使用:

./create_sdcard_from_flashlayout.sh to generated the user part of eMMC

该脚本源自: https://wiki.st.com/stm32mpu/wiki/How_to_populate_the_SD_card_with_dd_command

问候

帕特里克

相关内容