[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