我正在考虑为飞思卡尔Variscite VAR-SOM-MX6生成自己的IMAGE_FSTYPES=sdcard
图像。我复制了meta-fsl-arm/classes/image_types_fsl.bbclass
类并对其进行了轻微修改,以便有三个分区而不是两个分区。 我希望包括格式化为 FAT (vfat( 的第三个分区,以便可以将文件添加到 sdcard 上,这样它们就不会与引导分区或根文件系统中的文件并排。
我对创建新分区的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})
当我对图层进行位烘焙并将输出 SD 卡图像刻录到 SD 卡时,分区大小合适且可用,但我遇到的问题/问题是,如何格式化这个新创建的分区?
我知道这样做的常规方法是类似于mkfs.vfat -n "Partition Name" /dev/sdd
,我在其中提供设备,但是我不确定如何在 Yocto 中执行此操作,因为没有设备标识符,只有${SDCARD}
变量。 我知道,如果要将分区格式化为 ext4 文件系统,则可以提供偏移量来进行格式化,但是如果我希望将其格式化为 vfat,似乎没有选项可以执行此操作。
任何帮助将不胜感激。
我不确定这是否仍然与你布伦丹相关,但它可能会帮助任何来这里寻求帮助的人。我设法通过执行类似于引导的操作来格式化分区,方法是为第三个分区创建一个映像文件,例如:
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
附言您不必为 ROOTFS 设置静态大小,这也可以从 yocto 图像配方本身完成。我这样做只是为了展示一个例子。希望这有帮助。
从我的角度来看,如果要编辑SD卡图像,image_types_fsl.bbclass中用于生成SD卡图像的方法有点复杂且容易出错。
我建议您使用 wic 来创建您的图像。