Как да форматирате дялове за Yocto sdcard изображение за Variscite iMX6

Гледам да генерирам собствено IMAGE_FSTYPES=sdcard изображение за Freescale Variscite VAR-SOM-MX6. Копирах класа 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})

Когато изпека своя слой и запиша изходното изображение на sdcard на SD карта, дяловете са с подходящ размер и са налични, но въпросът/проблемът, който имам, е как да форматирам този новосъздаден дял?

Разбирам, че обичайният метод за извършване на това би бил нещо подобно на mkfs.vfat -n "Partition Name" /dev/sdd, където доставям устройство, но не съм сигурен как да направя това в Yocto, тъй като няма идентификатор на устройство, а само променливата ${SDCARD}. Разбирам, че ако дялът трябваше да бъде форматиран като файлова система ext4, тогава би било възможно да се осигурят отмествания за извършване на форматирането, но изглежда, че няма опция да се направи това, ако искам да бъде форматиран като vfat.

Всяка помощ ще бъде високо оценена.


person Brendan    schedule 21.08.2017    source източник


Отговори (2)


Не съм сигурен дали това все още е от значение за теб, Брендън, но може да помогне на всеки друг, който идва тук да търси помощ. Успях да форматирам дяла, като направих нещо подобно като при зареждането, като създадох файл с изображение за третия дял като:

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

Имайте предвид, че числото 3 в THIRD_BLOCKS трябва да е номерът на вашия дял в реда (моят беше третият).

И, разбира се, по-късно в кода, записвайки го с 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. Направих го само за да покажа пример. Надявам се това да помогне.

person sigmasrb    schedule 04.04.2018

От моя гледна точка начинът, използван в image_types_fsl.bbclass за генериране на изображение на SD карта, е малко сложен и податлив на грешки, ако искате да го редактирате.

Предлагам ви да използвате wic, за да създадете изображение вместо това.

person BenKwan    schedule 22.08.2017