U-Boot среда на virtio FAT разделе

Вопрос или проблема

Я загружаю U-Boot в QEMU с помощью команды Yocto runqemu и пытаюсь сделать так, чтобы U-Boot загружал окружение из раздела FAT. Yocto построен из ветки master (312488228ad408fb0f29b2aa272e72cf87de8e93) с MACHINE=genericarm64.

Версия U-Boot — 2024.07, которая, похоже, содержит коммит, добавляющий поддержку загрузки окружения через интерфейс virtio, см. этот комментарий на StackOverflow.

Я включил следующие параметры:

CONFIG_ENV_IS_IN_FAT=y
# CONFIG_ENV_IS_IN_FLASH не установлен
CONFIG_ENV_FAT_INTERFACE="virtio"
CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
CONFIG_ENV_FAT_FILE="uboot.env"

Следующие параметры были добавлены при включении CONFIG_ENV_IS_IN_FAT:

CONFIG_SYS_MMC_ENV_DEV=0
CONFIG_SYS_MMC_ENV_PART=0

Я предполагаю, что конфигурация устройства и раздела в CONFIG_ENV_FAT_DEVICE_AND_PART правильная, так как fatls virtio 0:1 корректно отображает содержимое раздела. Поддержка FAT также включена:

CONFIG_FS_FAT=y
CONFIG_FAT_WRITE=y
CONFIG_FS_FAT_MAX_CLUSTSIZE=65536

Но я получаю ошибку, что virtio не поддерживается:

Загрузка окружения из FAT... ** Неверная спецификация устройства virtio 0 **

Что-то важное я упускаю?

Ответ или решение

Проблема, с которой вы столкнулись, связана с конфигурацией U-Boot для загрузки переменных окружения из FAT-раздела, подключенного через интерфейс Virtio. Давайте рассмотрим несколько шагов, чтобы устранить возникшую ошибку.

Проверка версии U-Boot

Сначала убедитесь, что действительно используете U-Boot версии 2024.07 или более поздней, так как именно в этой версии добавлена поддержка интернета Virtio для FAT. Используйте команду version в U-Boot для проверки.

Проверка конфигурации окружения

Вы уже правильно установили параметры конфигурации в вашем проекте Yocto. Тем не менее, давайте пройдемся по ним еще раз:

  1. Параметры FAT:

    CONFIG_ENV_IS_IN_FAT=y
    CONFIG_ENV_FAT_INTERFACE="virtio"
    CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
    CONFIG_ENV_FAT_FILE="uboot.env"

    Убедитесь, что CONFIG_ENV_FAT_DEVICE_AND_PART указывает на правильный номер устройства и номер сектора. У вас указано 0:1, что соответствует первому устройству и первому разделу, но убедитесь, что это действительно так.

  2. Параметры файловой системы FAT:

    CONFIG_FS_FAT=y
    CONFIG_FAT_WRITE=y

    Эти параметры должны быть включены для обеспечения поддержки FAT.

Проверка конфигурации Virtio

Несмотря на то, что FAT поддерживается, ошибку Bad device specification virtio 0 может вызывать неправильная или отсутствующая конфигурация интерфейса Virtio. Убедитесь, что ваши настройки для Virtio выполнены корректно:

  1. В defconfig для вашего устройства должны быть следующие параметры:

    CONFIG_VIRTIO=y
    CONFIG_VIRTIO_BLK=y
  2. Также убедитесь, что поддержка Virtio в вашем образе Yocto действительно включена. Используйте команду virtio-blk-list для проверки, доступны ли устройства Virtio.

Запуск U-Boot с правильными параметрами

Если всё вышеперечисленное настроено правильно, но проблема всё еще сохраняется, попробуйте следующее:

  1. Очистите кеш и пересоберите образ Yocto.
  2. Запустите U-Boot в QEMU с использованием runqemu, указав параметры, которые указаны для работы с вашим образом.

Пример команды для запуска:

runqemu genericarm64 qemuarm-virtio
  1. Убедитесь, что вы используете правильные параметры для загрузки в U-Boot.

Проверка логов U-Boot

Проверьте журналы и вывод U-Boot для получения дополнительной информации. Используйте команды printenv для вывода текущих переменных окружения и fatls для проверки, видит ли U-Boot содержимое вашего FAT-раздела.

Заключение

Если после выполнения всех этих шагов проблема не решена, возможно, стоит обратиться к сообществу U-Boot или к документации, чтобы проверить, нет ли еще специфичных изменений или ошибок, связанных с вашей конфигурацией или версией Yocto. Также могут быть полезные пасты на форумах или GitHub, если проблема распространенная.

Оцените материал
Добавить комментарий

Капча загружается...