Я эмулирую ОС на 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. Но теперь у меня есть две проблемы, которые я пока не знаю, как решить:
help, ls и exit, ничего не дает. Ничего не происходит ни в терминале, ни на дисплее ramfb.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:
Если у кого-нибудь есть идеи, почему возникают какие-либо ошибки или как их исправить, это было бы здорово.





unixsmurf предложил удалить параметры командной строки, которые не нужны для загрузки оболочки UEFI. Я согрешил и должен был сделать это, прежде чем задавать вопрос. Но спасибо за предложение, потому что оно привело меня к ответу!
Все, что мне нужно было сделать, это изменить -serial stdio на -serial vc. -serial vc — графический режим последовательного порта. По какой-то причине режим последовательного порта stdio не позволял командам влиять на оболочку UEFI.
Редактировать
Недавно я обнаружил, что могу использовать -serial stdio и вводить прямо в ramfb, если использую флаг -bios для настройки прошивки. Но когда я настраиваю прошивку как диски, я могу использовать только окно -serial vc для взаимодействия с оболочкой UEFI.
Или, возможно, вам нужно было вводить текст в окне терминала, в котором вы вызвали qemu, а не в самом окне qemu?
Я пытался это сделать. Я вводил такие команды, как help, но окно терминала с qemu и окно qemu ramfb не обновлялись.
Начните с удаления параметров командной строки, которые не нужны для загрузки в командную строку UEFI.