我正在尝试填充 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
例如:
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
问候
帕特里克