Оболочка UEFI не отвечает

Я эмулирую ОС на QEMU с архитектурой Arm64. Пытаюсь добавить в эмуляцию прошивку UEFI. Для этого я добавил эти строки в свою команду QEMU:

    -drive if=pflash,format=raw,unit=0,file=firmware/uefi/AARCH64_OVMF_CODE.fd,readonly=on \
    -drive if=pflash,format=raw,unit=1,file=firmware/uefi/AARCH64_OVMF_VARS.fd \

Это приведет к тому, что оболочка UEFI появится в моем терминале и на дисплее ramfb в окне QEMU. Но теперь у меня есть две проблемы, которые я пока не знаю, как решить:

  1. Оболочка не отвечает. Ввод таких команд, как help, ls и exit, ничего не дает. Ничего не происходит ни в терминале, ни на дисплее ramfb.
  2. Я получаю эту ошибку: BdsDxe: failed to load Boot0001 "UEFI Non-Block Boot Device" from VenMedia(1428F772-B64A-441E-B8C3-9EBDD7F893C7): Not Found. Я думаю, это означает, что UEFI не может найти мое ядро? Я попробовал добавить свое ядро ​​в качестве диска следующим образом: -drive file=myKernel.img. Но это не сработало.

Вот моя полная команда QEMU:

    qemu-system-aarch64 \
    -m 4G -cpu cortex-a76 \
    -machine virt,mte=off,virtualization=on,gic-version=3,kernel=myKernel.img \
    -display gtk,show-tabs=on,show-cursor=on -device ramfb \
    -drive if=pflash,format=raw,unit=0,file=firmware/uefi/AARCH64_OVMF_CODE.fd,readonly=on \
    -drive if=pflash,format=raw,unit=1,file=firmware/uefi/AARCH64_OVMF_VARS.fd \
    -serial stdio -s -S -rtc base=localtime,clock=host,driftfix=none -smp 8,sockets=2 &
    gdb-multiarch \
    -ex "set architechture aarch64" \
    -ex "file myKernel.elf" \
    -ex "target remote 127.0.0.1:1234" \

Вот как выглядит вывод оболочки UEFI:

UEFI firmware (version  built at 00:08:37 on Jun 14 2024)
BdsDxe: failed to load Boot0001 "UEFI Non-Block Boot Device" from VenMedia(1428F772-B64A-441E-B8C3-9EBDD7F893C7): Not Found
BdsDxe: loading Boot0002 "EFI Internal Shell" from Fv(64074AFE-340A-4BE6-94BA-91B5B4D0F71E)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
BdsDxe: starting Boot0002 "EFI Internal Shell" from Fv(64074AFE-340A-4BE6-94BA-91B5B4D0F71E)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)
UEFI Interactive Shell v2.2
EDK II
UEFI v2.70 (EDK II, 0x00010000)
Mapping table
      FS0: Alias(s):F0:
          VenMedia(1428F772-B64A-441E-B8C3-9EBDD7F893C7)
Press ESC in 1 seconds to skip startup.nsh or any other key to continue.
Shell> help
ls
exit
FSO:

Если у кого-нибудь есть идеи, почему возникают какие-либо ошибки или как их исправить, это было бы здорово.

Начните с удаления параметров командной строки, которые не нужны для загрузки в командную строку UEFI.

unixsmurf 19.06.2024 15:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

unixsmurf предложил удалить параметры командной строки, которые не нужны для загрузки оболочки UEFI. Я согрешил и должен был сделать это, прежде чем задавать вопрос. Но спасибо за предложение, потому что оно привело меня к ответу!

Все, что мне нужно было сделать, это изменить -serial stdio на -serial vc. -serial vc — графический режим последовательного порта. По какой-то причине режим последовательного порта stdio не позволял командам влиять на оболочку UEFI.

Редактировать
Недавно я обнаружил, что могу использовать -serial stdio и вводить прямо в ramfb, если использую флаг -bios для настройки прошивки. Но когда я настраиваю прошивку как диски, я могу использовать только окно -serial vc для взаимодействия с оболочкой UEFI.

Или, возможно, вам нужно было вводить текст в окне терминала, в котором вы вызвали qemu, а не в самом окне qemu?

Nate Eldredge 19.06.2024 21:13

Я пытался это сделать. Я вводил такие команды, как help, но окно терминала с qemu и окно qemu ramfb не обновлялись.

CorkiMain 19.06.2024 22:15

Другие вопросы по теме