Вопрос или проблема
Я загружаю 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. Тем не менее, давайте пройдемся по ним еще раз:
-
Параметры 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
, что соответствует первому устройству и первому разделу, но убедитесь, что это действительно так. -
Параметры файловой системы FAT:
CONFIG_FS_FAT=y CONFIG_FAT_WRITE=y
Эти параметры должны быть включены для обеспечения поддержки FAT.
Проверка конфигурации Virtio
Несмотря на то, что FAT поддерживается, ошибку Bad device specification virtio 0 может вызывать неправильная или отсутствующая конфигурация интерфейса Virtio. Убедитесь, что ваши настройки для Virtio выполнены корректно:
-
В
defconfig
для вашего устройства должны быть следующие параметры:CONFIG_VIRTIO=y CONFIG_VIRTIO_BLK=y
-
Также убедитесь, что поддержка Virtio в вашем образе Yocto действительно включена. Используйте команду
virtio-blk-list
для проверки, доступны ли устройства Virtio.
Запуск U-Boot с правильными параметрами
Если всё вышеперечисленное настроено правильно, но проблема всё еще сохраняется, попробуйте следующее:
- Очистите кеш и пересоберите образ Yocto.
- Запустите U-Boot в QEMU с использованием
runqemu
, указав параметры, которые указаны для работы с вашим образом.
Пример команды для запуска:
runqemu genericarm64 qemuarm-virtio
- Убедитесь, что вы используете правильные параметры для загрузки в U-Boot.
Проверка логов U-Boot
Проверьте журналы и вывод U-Boot для получения дополнительной информации. Используйте команды printenv
для вывода текущих переменных окружения и fatls
для проверки, видит ли U-Boot содержимое вашего FAT-раздела.
Заключение
Если после выполнения всех этих шагов проблема не решена, возможно, стоит обратиться к сообществу U-Boot или к документации, чтобы проверить, нет ли еще специфичных изменений или ошибок, связанных с вашей конфигурацией или версией Yocto. Также могут быть полезные пасты на форумах или GitHub, если проблема распространенная.