gpt4 book ai didi

yocto - 如何为 Variscite iMX6 的 Yocto SD 卡镜像格式化分区

转载 作者:行者123 更新时间:2023-12-01 10:05:56 28 4
gpt4 key购买 nike

我正在考虑为 Freescale Variscite VAR-SOM-MX6 生成我自己的 IMAGE_FSTYPES=sdcard 图像。我已经复制了 meta-fsl-arm/classes/image_types_fsl.bbclass 类并稍微修改它,以便有三个分区而不是两个。我希望包括第三个格式化为 FAT (vfat) 的分区,以便可以将文件添加到 SD 卡上,这样它们就不会与引导分区或根文件系统中的文件并排放置。

我在创建新分区的地方添加了 generate_imx_sdcard() 函数:

generate_imx_sdcard () {
# Create partition table
parted -s ${SDCARD} mklabel msdos
parted -s ${SDCARD} unit KiB mkpart primary fat32 ${IMAGE_ROOTFS_ALIGNMENT} $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED})
parted -s ${SDCARD} unit KiB mkpart primary $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED}) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE)
# Line below is the new partition I have added
parted -s ${SDCARD} unit KiB mkpart primary fat32 $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE) $(expr ${IMAGE_ROOTFS_ALIGNMENT} \+ ${BOOT_SPACE_ALIGNED} \+ $ROOTFS_SIZE \+ ${THIRD_PARTITION})
parted ${SDCARD} print

我已确保整个 sdcard 端都包含这个,我将新分区大小 ${THIRD_PARTITION} 添加到总 sdcard(设备)大小:

IMAGE_CMD_sdcard () {
if [ -z "${SDCARD_ROOTFS}" ]; then
bberror "SDCARD_ROOTFS is undefined. To use sdcard image from Freescale's BSP it needs to be defined."
exit 1
fi
# Align boot partition and calculate total SD card image size
BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1)
BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE_ALIGNED} - ${BOOT_SPACE_ALIGNED} % ${IMAGE_ROOTFS_ALIGNMENT})
SDCARD_SIZE=$(expr ${IMAGE_ROOTFS_ALIGNMENT} + ${BOOT_SPACE_ALIGNED} + $ROOTFS_SIZE + ${IMAGE_ROOTFS_ALIGNMENT} + ${THIRD_PARTITION})

当我对图层进行 bitbake 并将输出的 SD 卡镜像刻录到 SD 卡时,分区大小合适且可用,但是我遇到的问题是,如何格式化这个新创建的分区?

我知道执行此操作的常规方法类似于 mkfs.vfat -n "Partition Name"/dev/sdd,我在其中提供设备,但我不确定由于没有设备标识符,只有 ${SDCARD} 变量,因此如何在 Yocto 中执行此操作。我知道如果要将分区格式化为 ext4 文件系统,则可以提供偏移量来进行格式化,但是如果我希望将其格式化为 vfat,似乎没有这样做的选项。

如有任何帮助,我们将不胜感激。

最佳答案

我不确定这是否仍然与您 Brendan 相关,但它可能会帮助到这里寻求帮助的其他人。我通过为第三个分区创建一个镜像文件来设法格式化分区,方法类似于引导,例如:

SDIMG_THIRD_TYPE ?= "胖"
SDIMG_THIRD = "${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.${SDIMG_THIRD_TYPE}"

然后用

跟进

THIRD_BLOCKS=$(LC_ALL=C parted -s ${SDIMG} unit b print | awk '/3/{ print substr($4, 1, length($4 -1))/512/2 }' )

mkfs.vfat -n "PART_NAME"-S 512 -C ${SDIMG_THIRD} $THIRD_BLOCKS

请记住,THIRD_BLOCKS 中的数字 3 应该是顺序中您的分区的编号(我的是第三个)。

当然,稍后在代码中使用 dd 来烧录它,其中包含以下内容:

dd if=${SDIMG_THIRD} of=${SDIMG} conv=notrunc seek=1 bs=$(expr 1024\* ${BOOT_SPACE_ALIGNED} + ${IMAGE_ROOTFS_ALIGNMENT}\* 1024 + ${ROOTFS_SIZE}\* 1024) && 同步 && 同步

附言您不必为 ROOTFS 设置静态大小,这也可以从 yocto 图像配方本身完成。我这样做只是为了展示一个例子。希望这可以帮助。

关于yocto - 如何为 Variscite iMX6 的 Yocto SD 卡镜像格式化分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807017/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com