Как отформатировать разделы для образа SD-карты Yocto для Variscite iMX6

Я собираюсь создать собственное изображение IMAGE_FSTYPES=sdcard для Freescale Variscite VAR-SOM-MX6. Я скопировал класс 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

Я убедился, что общая сторона SD-карты соответствует этому, включив это, где я добавляю новый размер раздела ${THIRD_PARTITION} к общему размеру 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})

Когда я создаю свой слой и записываю выходной образ SD-карты на 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