Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH] configs/qemu_aarch64_ebbr: new defconfig
@ 2022-09-14 14:08 Vincent Stehlé
  2022-09-14 20:25 ` Giulio Benetti
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Vincent Stehlé @ 2022-09-14 14:08 UTC (permalink / raw)
  To: buildroot; +Cc: Romain Naour, Vincent Stehlé

Add a defconfig to build an AArch64 U-Boot based firmware implementing the
subset of UEFI defined by EBBR[1], as well as a Linux OS disk image booting
with UEFI, to run on Qemu.

The generated firmware binary can also be used to install or run another OS
supporting the EBBR specification.

[1]: https://github.com/ARM-software/ebbr

Signed-off-by: Vincent Stehlé <vincent.stehle@arm.com>
Cc: Romain Naour <romain.naour@gmail.com>
---


Hi,

I would prefer to add my work e-mail in DEVELOPERS for this defconfig.
Please let me know if this is ok or if I should keep a single e-mail
address.
Thanks!

Best regards,
Vincent.


 DEVELOPERS                            |   3 +
 board/qemu/aarch64-ebbr/genimage.cfg  |  31 ++++++++
 board/qemu/aarch64-ebbr/grub.cfg      |   6 ++
 board/qemu/aarch64-ebbr/post-image.sh |  11 +++
 board/qemu/aarch64-ebbr/readme.txt    | 103 ++++++++++++++++++++++++++
 board/qemu/aarch64-ebbr/u-boot.config |  34 +++++++++
 configs/qemu_aarch64_ebbr_defconfig   |  53 +++++++++++++
 7 files changed, 241 insertions(+)
 create mode 100644 board/qemu/aarch64-ebbr/genimage.cfg
 create mode 100644 board/qemu/aarch64-ebbr/grub.cfg
 create mode 100755 board/qemu/aarch64-ebbr/post-image.sh
 create mode 100644 board/qemu/aarch64-ebbr/readme.txt
 create mode 100644 board/qemu/aarch64-ebbr/u-boot.config
 create mode 100644 configs/qemu_aarch64_ebbr_defconfig

diff --git a/DEVELOPERS b/DEVELOPERS
index a707b0e5e1..ea856b5a7a 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2999,6 +2999,9 @@ N:	Vincent Prince <vincent.prince.fr@gmail.com>
 F:	package/nss-myhostname/
 F:	package/utp_com/
 
+N:	Vincent Stehlé <vincent.stehle@arm.com>
+F:	configs/qemu_aarch64_ebbr_defconfig
+
 N:	Vincent Stehlé <vincent.stehle@laposte.net>
 F:	board/bananapi/bananapi-m2-zero/
 F:	configs/bananapi_m2_zero_defconfig
diff --git a/board/qemu/aarch64-ebbr/genimage.cfg b/board/qemu/aarch64-ebbr/genimage.cfg
new file mode 100644
index 0000000000..9a49e072f5
--- /dev/null
+++ b/board/qemu/aarch64-ebbr/genimage.cfg
@@ -0,0 +1,31 @@
+image efi-part.vfat {
+	vfat {
+		file EFI {
+			image = "efi-part/EFI"
+		}
+
+		file Image {
+			image = "Image"
+		}
+	}
+
+	size = 128M
+}
+
+image disk.img {
+	hdimage {
+		partition-table-type = "gpt"
+	}
+
+	partition boot {
+		image = "efi-part.vfat"
+		partition-type-uuid = c12a7328-f81f-11d2-ba4b-00a0c93ec93b
+		offset = 32K
+		bootable = true
+	}
+
+	partition root {
+		partition-type-uuid = b921b045-1df0-41c3-af44-4c6f280d3fae
+		image = "rootfs.ext2"
+	}
+}
diff --git a/board/qemu/aarch64-ebbr/grub.cfg b/board/qemu/aarch64-ebbr/grub.cfg
new file mode 100644
index 0000000000..d99e19c4cd
--- /dev/null
+++ b/board/qemu/aarch64-ebbr/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/aarch64-ebbr/post-image.sh b/board/qemu/aarch64-ebbr/post-image.sh
new file mode 100755
index 0000000000..c884a8b6f6
--- /dev/null
+++ b/board/qemu/aarch64-ebbr/post-image.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -eu
+
+BOARD_DIR=$(dirname "$0")
+
+# Create flash.bin TF-A FIP image from bl1.bin and fip.bin
+dd if="${BINARIES_DIR}/bl1.bin" of="${BINARIES_DIR}/flash.bin" bs=1M
+dd if="${BINARIES_DIR}/fip.bin" of="${BINARIES_DIR}/flash.bin" seek=64 bs=4096 conv=notrunc
+
+# Override the default GRUB configuration file with our own.
+cp -f "${BOARD_DIR}/grub.cfg" "${BINARIES_DIR}/efi-part/EFI/BOOT/grub.cfg"
diff --git a/board/qemu/aarch64-ebbr/readme.txt b/board/qemu/aarch64-ebbr/readme.txt
new file mode 100644
index 0000000000..a2027dad44
--- /dev/null
+++ b/board/qemu/aarch64-ebbr/readme.txt
@@ -0,0 +1,103 @@
+Introduction
+============
+
+The qemu_aarch64_ebbr_defconfig is meant to illustrate some aspects of the Arm
+EBBR specification[1] and the Arm SystemReady IR[2] compliance program.
+It allows building an AArch64 U-Boot based firmware implementing the subset of
+UEFI defined by EBBR, as well as a Linux OS disk image booting with UEFI, to run
+on Qemu.
+
+Building
+========
+
+  $ make qemu_aarch64_ebbr_defconfig
+  $ make
+
+Generated files under output/images:
+
+* flash.bin: A firmware image comprising TF-A, OP-TEE and the U-Boot bootloader.
+
+* disk.img: An OS disk image comprising the GRUB bootloader, the Linux kernel
+  and the root filesystem.
+
+Running under Qemu
+==================
+
+Run the emulation with:
+
+  qemu-system-aarch64 \
+      -M virt,secure=on \
+      -bios output/images/flash.bin \
+      -cpu cortex-a53 \
+      -device virtio-blk-device,drive=hd0 \
+      -device virtio-net-device,netdev=eth0 \
+      -device virtio-rng-device,rng=rng0 \
+      -drive file=output/images/disk.img,if=none,format=raw,id=hd0 \
+      -m 1024 \
+      -netdev user,id=eth0 \
+      -no-acpi \
+      -nographic \
+      -object rng-random,filename=/dev/urandom,id=rng0 \
+      -rtc base=utc,clock=host \
+      -smp 2 # qemu_aarch64_ebbr_defconfig
+
+The login prompt will appear in the terminal that started Qemu.
+
+Using the EBBR firmware to run another OS under Qemu
+----------------------------------------------------
+
+It is possible to use the generated firmware binary to install or run another OS
+supporting the EBBR specification.
+
+To run another OS on emulation using a live or pre-installed image, use the same
+Qemu command line as for the generated OS but adapt the OS image path in the
+-drive stanza.
+The image generated by the aarch64_efi_defconfig or the Arm ACS-IR images[3] are
+examples of pre-installed OS images.
+
+To install another OS using an installer iso image, prepare a destination disk
+image first with:
+
+  qemu-img create -f qcow2 disk.qcow2 10G
+
+Then run the OS installer iso image on emulation with:
+
+  qemu-system-aarch64 \
+      -M virt,secure=on \
+      -bios output/images/flash.bin \
+      -cpu cortex-a53 \
+      -device virtio-blk-device,drive=hd1 \
+      -device virtio-blk-device,drive=hd0 \
+      -device virtio-net-device,netdev=eth0 \
+      -device virtio-rng-device,rng=rng0 \
+      -drive file=<iso>,if=none,format=raw,readonly=on,id=hd0 \
+      -drive file=disk.qcow2,if=none,id=hd1 \
+      -m 1024 \
+      -netdev user,id=eth0 \
+      -no-acpi \
+      -nographic \
+      -object rng-random,filename=/dev/urandom,id=rng0 \
+      -rtc base=utc,clock=host \
+      -smp 2
+
+The installation medium will show up under the Linux OS installer as /dev/vda
+and the destination disk as /dev/vdb.
+To reboot into the installed OS, use the same Qemu command line as for the
+installation, but without the two stanzas
+referring to hd0.
+Linux distributions such as Debian, Fedora, openSUSE or Ubuntu provide an OS
+installer iso image.
+
+Miscellaneous
+=============
+
+This configuration is inspired by the qemu_aarch64_virt_defconfig, the
+aarch64_efi_defconfig and the Arm SystemReady IR IoT Integration, Test, and
+Certification Guide[4].
+
+Firmware update is currently not supported.
+
+[1]: https://github.com/ARM-software/ebbr
+[2]: https://developer.arm.com/Architectures/Arm%20SystemReady%20IR
+[3]: https://github.com/ARM-software/arm-systemready/tree/main/IR/prebuilt_images
+[4]: https://developer.arm.com/documentation/DUI1101/1-1/?lang=en
diff --git a/board/qemu/aarch64-ebbr/u-boot.config b/board/qemu/aarch64-ebbr/u-boot.config
new file mode 100644
index 0000000000..94aae9d2aa
--- /dev/null
+++ b/board/qemu/aarch64-ebbr/u-boot.config
@@ -0,0 +1,34 @@
+CONFIG_BOOTM_EFI=y
+CONFIG_CMD_BOOTEFI=y
+CONFIG_CMD_BOOTEFI_HELLO=y
+CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y
+CONFIG_CMD_BOOTEFI_SELFTEST=y
+CONFIG_CMD_EFIDEBUG=y
+CONFIG_CMD_EFI_VARIABLE_FILE_STORE=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_NVEDIT_EFI=y
+CONFIG_CMD_RNG=y
+CONFIG_CMD_RTC=y
+CONFIG_DM_RTC=y
+CONFIG_EFI_DEVICE_PATH_TO_TEXT=y
+CONFIG_EFI_GET_TIME=y
+CONFIG_EFI_HAVE_RUNTIME_RESET=y
+CONFIG_EFI_LOADER=y
+CONFIG_EFI_LOADER_HII=y
+CONFIG_EFI_MM_COMM_TEE=y
+CONFIG_EFI_PARTITION=y
+CONFIG_EFI_SECURE_BOOT=y
+CONFIG_EFI_SET_TIME=y
+CONFIG_EFI_UNICODE_CAPITALIZATION=y
+CONFIG_EFI_UNICODE_COLLATION_PROTOCOL2=y
+CONFIG_EFI_VARIABLE_FILE_STORE=y
+CONFIG_FAT_WRITE=y
+CONFIG_FIT=y
+CONFIG_FS_FAT=y
+CONFIG_OF_LIBFDT=y
+CONFIG_OPTEE=y
+CONFIG_PARTITION_TYPE_GUID=y
+CONFIG_RNG_OPTEE=y
+CONFIG_RTC_EMULATION=y
+CONFIG_SCMI_FIRMWARE=y
+CONFIG_TEE=y
diff --git a/configs/qemu_aarch64_ebbr_defconfig b/configs/qemu_aarch64_ebbr_defconfig
new file mode 100644
index 0000000000..c8a516ddaa
--- /dev/null
+++ b/configs/qemu_aarch64_ebbr_defconfig
@@ -0,0 +1,53 @@
+# Architecture
+BR2_aarch64=y
+
+# Toolchain, required for GRUB
+BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
+
+# Image
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh board/qemu/aarch64-ebbr/post-image.sh support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG) -c board/qemu/aarch64-ebbr/genimage.cfg"
+
+# Linux headers
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_17=y
+
+# Kernel
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19.8"
+BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
+BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+
+# Packages
+BR2_PACKAGE_OPTEE_CLIENT=y
+
+# Filesystem
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="200M"
+# BR2_TARGET_ROOTFS_TAR is not set
+
+# Firmware and bootloader
+BR2_TARGET_ARM_TRUSTED_FIRMWARE=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_CUSTOM_VERSION_VALUE="v2.7"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_PLATFORM="qemu"
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_FIP=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_BL32_OPTEE=y
+BR2_TARGET_ARM_TRUSTED_FIRMWARE_UBOOT_AS_BL33=y
+BR2_TARGET_GRUB2=y
+BR2_TARGET_OPTEE_OS=y
+BR2_TARGET_OPTEE_OS_NEEDS_DTC=y
+BR2_TARGET_OPTEE_OS_PLATFORM="vexpress-qemu_armv8a"
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2022.07"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="qemu_arm64"
+BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="board/qemu/aarch64-ebbr/u-boot.config"
+BR2_TARGET_UBOOT_NEEDS_OPENSSL=y
+
+# Host tools
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
-- 
2.35.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-10-31 12:07 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-14 14:08 [Buildroot] [PATCH] configs/qemu_aarch64_ebbr: new defconfig Vincent Stehlé
2022-09-14 20:25 ` Giulio Benetti
2022-09-15 15:03   ` Vincent Stehlé
2022-09-15 19:07     ` Giulio Benetti
2022-09-16  7:29       ` Vincent Stehlé
2022-09-14 20:49 ` Romain Naour
2022-09-15 15:06   ` Vincent Stehlé
2022-09-16  7:41 ` [Buildroot] [PATCH v2] " Vincent Stehlé
2022-10-31 12:07   ` Thomas Petazzoni via buildroot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox