Search code examples
operating-systemqemuarm64uefi

UEFI Shell Is Unresponsive


I'm emulating an OS on QEMU with Arm64 architecture. I'm trying to add UEFI firmware to the emulation. To do this, I added these lines to my QEMU command:

    -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 \

This gets the UEFI shell to appear in my terminal and in the ramfb display in QEMU's window. But now I have two problems I don't know how to fix yet:

  1. The shell is unresponsive. Entering commands like help, ls, and exit does nothing. Nothing happens in the terminal or the ramfb display.
  2. I get this error: BdsDxe: failed to load Boot0001 "UEFI Non-Block Boot Device" from VenMedia(1428F772-B64A-441E-B8C3-9EBDD7F893C7): Not Found. I think this means UEFI can't find my kernel? I've tried adding my kernel as a drive like this: -drive file=myKernel.img. But that did not work.

Here's my full QEMU command:

    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" \

Here's what the UEFI shell output looks like:

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:

If anyone has any ideas why either of the errors are happening, or how to fix them, that'd be awesome.


Solution

  • unixsmurf suggested pruning away command-line options that aren't necessary to boot the UEFI shell. I have sinned and should have done this before posting the question. But thanks for the suggestion because it led me to the answer!

    All I had to do was change -serial stdio to -serial vc. -serial vc is the graphical mode for the serial port. For some reason the stdio serial port mode did not allow commands to affect the UEFI shell.