From 8219955118fee56ccd3ca8a13a6350d0e15de418 Mon Sep 17 00:00:00 2001 From: Julien Olivain Date: Sat, 23 Dec 2023 22:29:48 +0100 Subject: [PATCH] configs/qemu_riscv64_virt_efi: new defconfig This defconfig enables edk2 UEFI shell and grub2 riscv64-efi boot of a Linux Kernel. Signed-off-by: Julien Olivain Signed-off-by: Yann E. MORIN --- DEVELOPERS | 2 ++ .../riscv64-virt-efi/assemble-flash-images | 11 ++++++ board/qemu/riscv64-virt-efi/genimage.cfg | 34 ++++++++++++++++++ board/qemu/riscv64-virt-efi/grub.cfg | 6 ++++ board/qemu/riscv64-virt-efi/readme.txt | 36 +++++++++++++++++++ configs/qemu_riscv64_virt_efi_defconfig | 19 ++++++++++ 6 files changed, 108 insertions(+) create mode 100755 board/qemu/riscv64-virt-efi/assemble-flash-images create mode 100644 board/qemu/riscv64-virt-efi/genimage.cfg create mode 100644 board/qemu/riscv64-virt-efi/grub.cfg create mode 100644 board/qemu/riscv64-virt-efi/readme.txt create mode 100644 configs/qemu_riscv64_virt_efi_defconfig diff --git a/DEVELOPERS b/DEVELOPERS index 834be54eb1..b5158ba986 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -1713,11 +1713,13 @@ F: configs/ts7680_defconfig F: package/paho-mqtt-c N: Julien Olivain +F: board/qemu/riscv64-virt-efi/ F: board/spike/ F: board/technexion/imx8mmpico/ F: board/technexion/imx8mpico/ F: configs/imx8mmpico_defconfig F: configs/imx8mpico_defconfig +F: configs/qemu_riscv64_virt_efi_defconfig F: configs/spike_riscv64_defconfig F: package/fluid-soundfont/ F: package/fluidsynth/ diff --git a/board/qemu/riscv64-virt-efi/assemble-flash-images b/board/qemu/riscv64-virt-efi/assemble-flash-images new file mode 100755 index 0000000000..abcaa2c93b --- /dev/null +++ b/board/qemu/riscv64-virt-efi/assemble-flash-images @@ -0,0 +1,11 @@ +#! /bin/sh + +set -e + +BOARD_DIR="$(dirname "$0")" + +cp -f "${BOARD_DIR}"/grub.cfg "${BINARIES_DIR}"/efi-part/EFI/BOOT/grub.cfg + +# The QEMU riscv64 virt machine expects flash devices to be 32M. +truncate -s 32M "${BINARIES_DIR}"/RISCV_VIRT_CODE.fd +truncate -s 32M "${BINARIES_DIR}"/RISCV_VIRT_VARS.fd diff --git a/board/qemu/riscv64-virt-efi/genimage.cfg b/board/qemu/riscv64-virt-efi/genimage.cfg new file mode 100644 index 0000000000..46950591e0 --- /dev/null +++ b/board/qemu/riscv64-virt-efi/genimage.cfg @@ -0,0 +1,34 @@ +image efi-part.vfat { + vfat { + file EFI { + image = "efi-part/EFI" + } + + file Image { + image = "Image" + } + } + + size = 64M +} + +image disk.img { + hdimage { + partition-table-type = "gpt" + } + + partition boot { + image = "efi-part.vfat" + partition-type-uuid = U + offset = 32K + bootable = true + } + + partition root { + # For partition-type-uuid value, see: + # https://uapi-group.org/specifications/specs/discoverable_partitions_specification/ + # SD_GPT_ROOT_RISCV64 + partition-type-uuid = 72ec70a6-cf74-40e6-bd49-4bda08e8f224 + image = "rootfs.ext2" + } +} diff --git a/board/qemu/riscv64-virt-efi/grub.cfg b/board/qemu/riscv64-virt-efi/grub.cfg new file mode 100644 index 0000000000..d99e19c4cd --- /dev/null +++ b/board/qemu/riscv64-virt-efi/grub.cfg @@ -0,0 +1,6 @@ +set default="0" +set timeout="5" + +menuentry "Buildroot" { + linux /Image root=PARTLABEL=root rootwait +} diff --git a/board/qemu/riscv64-virt-efi/readme.txt b/board/qemu/riscv64-virt-efi/readme.txt new file mode 100644 index 0000000000..6b9651a011 --- /dev/null +++ b/board/qemu/riscv64-virt-efi/readme.txt @@ -0,0 +1,36 @@ +Intro +===== + +This is a RISC-V 64bit UEFI Linux boot demo in QEmu virt machine. + +Build +===== + + make qemu_riscv64_virt_efi_defconfig + make + +Emulation +========= + +Run the emulation with: + + qemu-system-riscv64 \ + -M virt,pflash0=pflash0,pflash1=pflash1,acpi=off \ + -smp 4 \ + -m 1024 \ + -nographic \ + -blockdev node-name=pflash0,driver=file,read-only=on,filename=output/images/RISCV_VIRT_CODE.fd \ + -blockdev node-name=pflash1,driver=file,filename=output/images/RISCV_VIRT_VARS.fd \ + \ + -drive file=output/images/disk.img,format=raw,id=hd0 \ + -device virtio-blk-device,drive=hd0 \ + \ + -netdev user,id=net0 \ + -device virtio-net-device,netdev=net0 # qemu_riscv64_virt_efi_defconfig + +Note: for information, qemu version >= 8.0.0 is needed for this UEFI +Linux demo. It introduced the two pflash memories (previous versions +had only one). The host-qemu package in Buildroot (enabled in this +defconfig) is sufficient to run this demo. In case another qemu is +used (for example, from the host OS), make sure to check the version +requirement. diff --git a/configs/qemu_riscv64_virt_efi_defconfig b/configs/qemu_riscv64_virt_efi_defconfig new file mode 100644 index 0000000000..79aadf78ca --- /dev/null +++ b/configs/qemu_riscv64_virt_efi_defconfig @@ -0,0 +1,19 @@ +BR2_riscv=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y +BR2_SYSTEM_DHCP="eth0" +BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh board/qemu/riscv64-virt-efi/assemble-flash-images support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG) -c board/qemu/riscv64-virt-efi/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.69" +BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y +BR2_TARGET_ROOTFS_EXT2=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_EDK2=y +BR2_TARGET_GRUB2=y +BR2_TARGET_GRUB2_RISCV64_EFI=y +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_GENIMAGE=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_QEMU=y +BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y