[Buildroot] [PATCH 7/8] package/edk2-images: new package

Kory Maincent kory.maincent at bootlin.com
Tue Sep 14 09:34:56 UTC 2021


In order to add support for EFI boot from the emulator, this patch add a
package to download the EFI BIOS prebuilt binary from:
https://www.kraxel.org/repos/jenkins/edk2/

Signed-off-by: Kory Maincent <kory.maincent at bootlin.com>
---
 DEVELOPERS                         |  3 ++
 package/Config.in.host             |  1 +
 package/edk2-images/Config.in.host | 26 ++++++++++++++
 package/edk2-images/edk2-images.mk | 32 +++++++++++++++++
 package/edk2-images/rpm2cpio.sh    | 58 ++++++++++++++++++++++++++++++
 5 files changed, 120 insertions(+)
 create mode 100644 package/edk2-images/Config.in.host
 create mode 100644 package/edk2-images/edk2-images.mk
 create mode 100755 package/edk2-images/rpm2cpio.sh

diff --git a/DEVELOPERS b/DEVELOPERS
index 42b5becb7e..a69703f6da 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1503,6 +1503,9 @@ N:	Koen Martens <gmc at sonologic.nl>
 F:	package/capnproto/
 F:	package/linuxconsoletools/
 
+N:	Köry Maincent <kory.maincent at bootlin.com>
+F:	package/edk2-images
+
 N:	Kurt Van Dijck <dev.kurt at vandijck-laurijssen.be>
 F:	package/bcusdk/
 F:	package/libpthsem/
diff --git a/package/Config.in.host b/package/Config.in.host
index 064c98af3d..9e3c15c5d3 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -20,6 +20,7 @@ menu "Host utilities"
 	source "package/dtc/Config.in.host"
 	source "package/e2fsprogs/Config.in.host"
 	source "package/e2tools/Config.in.host"
+	source "package/edk2-images/Config.in.host"
 	source "package/environment-setup/Config.in.host"
 	source "package/erofs-utils/Config.in.host"
 	source "package/eudev/Config.in.host"
diff --git a/package/edk2-images/Config.in.host b/package/edk2-images/Config.in.host
new file mode 100644
index 0000000000..ca105c757c
--- /dev/null
+++ b/package/edk2-images/Config.in.host
@@ -0,0 +1,26 @@
+config BR2_PACKAGE_HOST_EDK2_IMAGES
+	bool "host edk2-images"
+	help
+	  Downloads and installs pre-compiled EDK2 EFI BIOS images.
+	  They are typically useful to allow Qemu to emulate an x86 or
+	  x86-64 system with an EFI-compliant BIOS.
+
+	  https://www.kraxel.org/repos/jenkins/edk2/
+
+if BR2_PACKAGE_HOST_EDK2_IMAGES
+
+choice
+	prompt "EFI Architecture"
+	default BR2_PACKAGE_HOST_EDK2_IMAGES_IA32
+	help
+	  select the desired architecture
+
+config BR2_PACKAGE_HOST_EDK2_IMAGES_IA32
+	bool "ia32"
+
+config BR2_PACKAGE_HOST_EDK2_IMAGES_X64
+	bool "x64"
+
+endchoice
+
+endif
diff --git a/package/edk2-images/edk2-images.mk b/package/edk2-images/edk2-images.mk
new file mode 100644
index 0000000000..067bb4fcf7
--- /dev/null
+++ b/package/edk2-images/edk2-images.mk
@@ -0,0 +1,32 @@
+################################################################################
+#
+# edk2-images
+#
+################################################################################
+
+EDK2_IMAGES_VERSION = 20210804.42.gcf7c650592
+ifeq ($(BR2_PACKAGE_HOST_EDK2_IMAGES_IA32),y)
+EDK2_IMAGES_ARCH = ia32
+else
+EDK2_IMAGES_ARCH = x64
+endif
+EDK2_IMAGES_SITE = https://www.kraxel.org/repos/jenkins/edk2
+EDK2_IMAGES_SOURCE = edk2.git-ovmf-$(EDK2_IMAGES_ARCH)-0-$(EDK2_IMAGES_VERSION).noarch.rpm
+EDK2_IMAGES_LICENSE = BSD-2-Clause-Patent
+
+HOST_EDK2_IMAGES_INSTALL_DIR = $(HOST_DIR)/usr/share/ovmf-$(EDK2_IMAGES_ARCH)
+
+HOST_EDK2_IMAGES_DEPENDENCIES = host-cpio
+
+define HOST_EDK2_IMAGES_EXTRACT_CMDS
+	$(HOST_EDK2_IMAGES_PKGDIR)/rpm2cpio.sh $(HOST_EDK2_IMAGES_DL_DIR)/$(HOST_EDK2_IMAGES_SOURCE) | \
+		$(HOST_DIR)/bin/cpio -dimv -D $(@D)
+endef
+
+define HOST_EDK2_IMAGES_INSTALL_CMDS
+	rm -rf $(HOST_EDK2_IMAGES_INSTALL_DIR)
+	mkdir -p $(HOST_EDK2_IMAGES_INSTALL_DIR)
+	cp -af $(@D)/usr/share/edk2.git/ovmf-$(EDK2_IMAGES_ARCH)/* $(HOST_EDK2_IMAGES_INSTALL_DIR)/
+endef
+
+$(eval $(host-generic-package))
diff --git a/package/edk2-images/rpm2cpio.sh b/package/edk2-images/rpm2cpio.sh
new file mode 100755
index 0000000000..acedaefa22
--- /dev/null
+++ b/package/edk2-images/rpm2cpio.sh
@@ -0,0 +1,58 @@
+#!/bin/sh -efu
+
+# Script imported from the rpm Github repository.
+# https://github.com/rpm-software-management/rpm/blob/master/scripts/rpm2cpio.sh
+
+fatal() {
+	echo "$*" >&2
+	exit 1
+}
+
+pkg="$1"
+[ -n "$pkg" ] && [ -e "$pkg" ] ||
+	fatal "No package supplied"
+
+_dd() {
+	local o="$1"; shift
+	dd if="$pkg" skip="$o" iflag=skip_bytes status=none $*
+}
+
+calcsize() {
+	offset=$(($1 + 8))
+
+	local i b b0 b1 b2 b3 b4 b5 b6 b7
+
+	i=0
+	while [ $i -lt 8 ]; do
+		b="$(_dd $(($offset + $i)) bs=1 count=1)"
+		[ -z "$b" ] &&
+			b="0" ||
+			b="$(exec printf '%u\n' "'$b")"
+		eval "b$i=\$b"
+		i=$(($i + 1))
+	done
+
+	rsize=$((8 + ((($b0 << 24) + ($b1 << 16) + ($b2 << 8) + $b3) << 4) + ($b4 << 24) + ($b5 << 16) + ($b6 << 8) + $b7))
+	offset=$(($offset + $rsize))
+}
+
+case "$(_dd 0 bs=8 count=1)" in
+	"$(printf '\355\253\356\333')"*) ;; # '\xed\xab\xee\xdb'
+	*) fatal "File doesn't look like rpm: $pkg" ;;
+esac
+
+calcsize 96
+sigsize=$rsize
+
+calcsize $(($offset + (8 - ($sigsize % 8)) % 8))
+hdrsize=$rsize
+
+case "$(_dd $offset bs=3 count=1)" in
+	"$(printf '\102\132')"*) _dd $offset | bunzip2 ;; # '\x42\x5a'
+	"$(printf '\037\213')"*) _dd $offset | gunzip  ;; # '\x1f\x8b'
+	"$(printf '\375\067')"*) _dd $offset | xzcat   ;; # '\xfd\x37'
+	"$(printf '\135\000')"*) _dd $offset | unlzma  ;; # '\x5d\x00'
+	"$(printf '\050\265')"*) _dd $offset | unzstd  ;; # '\x28\xb5'
+	*) fatal "Unrecognized rpm file: $pkg" ;;
+esac
+
-- 
2.25.1



More information about the buildroot mailing list