如何为Variscite iMX6格式化Yocto sdcard图像的分区

时间:2017-08-21 23:51:04

标签: yocto bitbake build-system openembedded imx6

我正在为Freescale Variscite VAR-SOM-MX6生成我自己的OverconstrainedError图像。我复制了IMAGE_FSTYPES=sdcard类并对其进行了稍微修改,以便有三个分区而不是两个分区。我希望包含格式化为FAT(vfat)的第三个分区,以便可以将文件添加到SD卡中,以便它们不会与启动分区或根文件系统中的文件并排放置。

我添加了meta-fsl-arm/classes/image_types_fsl.bbclass函数,我在其中创建了一个新分区:

generate_imx_sdcard()

我已经确保总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图像刻录到SD卡时,分区大小合适且可用但是我遇到的问题是,如何格式化这个新创建的分区?

我理解这样做的常规方法就像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}) 一样,我提供了一个设备,但我不确定如何在Yocto中解决这个问题,因为没有设备标识符,只是mkfs.vfat -n "Partition Name" /dev/sdd变量。据我所知,如果要将分区格式化为ext4文件系统,那么就可以提供偏移量来进行格式化,但是如果我想将它格式化为vfat,似乎没有选项可以执行此操作。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

从我的角度来看,image_types_fsl.bbclass中用于生成SD卡图像的方式有点复杂且容易出错,如果你想编辑它。

我建议您使用wic代替创建图片。

答案 1 :(得分:0)

我不确定这对你们Brendan来说是否仍然是一个相关的东西,但它可能会帮助那些来这里寻求帮助的人。通过为第三个分区创建一个图像文件,我设法通过执行类似于启动的操作来格式化分区,如:

SDIMG_THIRD_TYPE ?= "fat" 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) && sync && sync

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