#MASTER / ARM 32 : #After having installed apt install pkg-config automake autopoint crossbuild-essential-armhf git clone git://git.savannah.gnu.org/grub.git && cd grub && ./bootstrap && ./configure --target=arm-linux-gnueabihf --with-platform=efi --prefix=/home/user/Desktop/grub/ && make -j 8 && make install /home/user/Desktop/grub/bin/grub-mkstandalone -o bootarm.efi -O arm-efi --directory /home/user/Desktop/grub/lib/grub/arm-efi #Then I created a GPT USB Stick with ESP/FAT32 partition (marked as EFI System Partition) in which /EFI/boot/bootarm.efi is placed, unmounted it, and made an image of it at /home/user/Desktop/esp/esp-master.img cd /home/user/Desktop/esp qemu-system-arm -M virt -m 512 -net none -monitor none -parallel none -L ./ -bios QEMU_EFI_ARM.fd -drive format=raw,file=esp-master.img ------------------------------------------------------------------------------------------------------ #MASTER / ARM 64 : git clone git://git.savannah.gnu.org/grub.git && cd grub && ./bootstrap && ./configure --target=aarch64-linux-gnu --with-platform=efi --prefix=/home/user/Desktop/grub-arm64-efi && make -j 8 && make install cd .. /home/user/Desktop/grub-arm64-efi/bin/grub-mkstandalone -o bootaa64.efi -O arm64-efi --directory /home/user/Desktop/grub-arm64-efi/lib/grub/arm64-efi/ qemu-system-aarch64 -M virt -cpu cortex-a57 -m 2048 -monitor none -parallel none -L ./ -bios QEMU_EFI_AA64.fd -drive format=raw,file=esp-master.img ------------------------------------------------------------------------------------------------------ QEMU_EFI_ARM firmwares : https://efi.akeo.ie/QEMU_EFI/ https://wiki.linaro.org/LEG/UEFIforQEMU wget http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-ARM/DEBUG_GCC5/QEMU_EFI.fd wget http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/latest/QEMU-ARM/RELEASE_GCC5/QEMU_EFI.fd Another one, split in 2 files (the first one can be used as bios) : https://packages.debian.org/buster/qemu-efi-arm seems that you can use "-flash firstFile -flash secondFile", instead of "-bios firstFile" ------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------ Crossbuilding u-boot.bin for ARM, using x86_64 computer (having crossbuild-essential-armhf installed) git clone git://git.denx.de/u-boot-efi.git cd u-boot-efi/ make ARCH=arm qemu_arm_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 8 #Running the /EFI/boot/bootarm.efi (placed into esp-master.img) from u-boot.bin bios : qemu-system-arm -M virt -m 512 -net none -monitor none -parallel none -L U-BOOT -bios u-boot.bin -drive format=raw,file=esp-master.img virtio scan virtio info virtio part load virtio 0:1 ${kernel_addr_r} EFI/boot/bootarm.efi bootefi ${kernel_addr_r} #Building the RFC modified GRUB mkdir /home/user/Desktop/grub-rfc cd /home/user/Desktop/grub-rfc git clone git://git.savannah.gnu.org/grub.git #modifying grub/include/grub/efi/pe32.h cd grub && ./bootstrap && ./configure --target=arm-linux-gnueabihf --with-platform=efi --prefix=/home/user/Desktop/grub-rfc/ && make -j 8 && make install cd .. /home/user/Desktop/grub-rfc/bin/grub-mkstandalone -o bootarm-rfc.efi -O arm-efi --directory /home/user/Desktop/grub-rfc/lib/grub/arm-efi #placing the file into an ESP and doing and image of it, named esp-rfc-arm.img #Running it on QEMU : qemu-system-arm -M virt -m 512 -net none -monitor none -parallel none -L U-BOOT -bios u-boot.bin -drive format=raw,file=esp-rfc-arm.img #Once inside QEMU : virtio scan load virtio 0:1 ${kernel_addr_r} EFI/boot/bootarm-rfc.efi bootefi ${kernel_addr_r} => Works with modified grub/include/grub/efi/pe32.h.