Bootloader ISO EFI Support

pull/13212/head
klaases 2021-12-07 15:56:07 -08:00
parent c3ea9c298c
commit 694c9cc0ef
7 changed files with 237 additions and 35 deletions

View File

@ -0,0 +1,7 @@
set default="0"
set timeout="1"
menuentry "Buildroot" {
linux __KERNEL_PATH__ root=/dev/sr0 console=ttyS0,115200
initrd __INITRD_PATH__
}

View File

@ -0,0 +1,15 @@
#!/bin/sh
set -e
BOARD_DIR=$(dirname "$0")
# Detect boot strategy, EFI or BIOS
if [ -d "$BINARIES_DIR/efi-part/" ]; then
cp -f "$BOARD_DIR/grub-efi.cfg" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg"
else
cp -f "$BOARD_DIR/grub-bios.cfg" "$TARGET_DIR/boot/grub/grub.cfg"
# Copy grub 1st stage to binaries, required for genimage
cp -f "$TARGET_DIR/lib/grub/i386-pc/boot.img" "$BINARIES_DIR"
fi

View File

@ -0,0 +1,8 @@
#!/bin/sh
set -e
UUID=$(dumpe2fs "$BINARIES_DIR/rootfs.ext2" 2>/dev/null | sed -n 's/^Filesystem UUID: *\(.*\)/\1/p')
sed -i "s/UUID_TMP/$UUID/g" "$BINARIES_DIR/efi-part/EFI/BOOT/grub.cfg"
sed "s/UUID_TMP/$UUID/g" board/pc/genimage-efi.cfg > "$BINARIES_DIR/genimage-efi.cfg"
support/scripts/genimage.sh -c "$BINARIES_DIR/genimage-efi.cfg"

View File

@ -0,0 +1,42 @@
# Architecture
BR2_x86_64=y
# Toolchain
BR2_TOOLCHAIN_BUILDROOT_WCHAR=y
# System
BR2_SYSTEM_DHCP="eth0"
# Required tools to create bootable media
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
# Bootloader
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_X86_64_EFI=y
BR2_TARGET_GRUB2_BUILTIN_CONFIG="$(BR2_EXTERNAL_minimal_PATH)/board/iso/x86_64/grub-stub.cfg"
BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat squash4 part_msdos part_gpt normal efi_gop udf iso9660 search search_fs_file search_fs_uuid search_label"
# Filesystem / image
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
# BR2_TARGET_ROOTFS_TAR is not set
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_minimal_PATH)/board/iso/x86_64/post-build.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_minimal_PATH)/board/iso/x86_64/post-image.sh"
BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_minimal_PATH)/board/iso/x86_64/genimage.cfg"
# Linux headers same as kernel, a 4.19 series
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.182"
BR2_LINUX_KERNEL_USE_ARCH_DEFAULT_CONFIG=y
BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
BR2_CCACHE=y
# Packages
BR2_PACKAGE_ACPID=y

View File

@ -1,21 +1,37 @@
# Configure building the minikube ISO.
# Architecture
BR2_x86_64=y
BR2_CCACHE=y
BR2_OPTIMIZE_2=y
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/patches"
BR2_TOOLCHAIN_BUILDROOT_VENDOR="minikube"
BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
# Tool chain
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
BR2_TOOLCHAIN_BUILDROOT_VENDOR="minikube"
# System
BR2_SYSTEM_BIN_SH_BASH=y
BR2_GCC_ENABLE_LTO=y
BR2_INIT_SYSTEMD=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_TARGET_GENERIC_HOSTNAME="minikube"
BR2_TARGET_GENERIC_ISSUE="Welcome to minikube"
BR2_TARGET_GENERIC_PASSWD_SHA512=y
BR2_INIT_SYSTEMD=y
BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/permissions"
BR2_SYSTEM_BIN_SH_BASH=y
# Filesystem / image
# BR2_TARGET_GENERIC_GETTY is not set
BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/permissions"
BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/users"
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/rootfs-overlay"
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_TARGET_ROOTFS_ISO9660=y
# Linux Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.202"
@ -23,40 +39,40 @@ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/linux_defconfig"
BR2_LINUX_KERNEL_LZ4=y
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
BR2_PACKAGE_GZIP=y
BR2_PACKAGE_XZ=y
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_SYSDIG=y
BR2_PACKAGE_FINDUTILS=y
BR2_PACKAGE_GIT=y
BR2_PACKAGE_CIFS_UTILS=y
BR2_PACKAGE_E2TOOLS=y
BR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_SSHFS=y
BR2_PACKAGE_XFSPROGS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SYSSTAT=y
BR2_PACKAGE_LUAJIT=y
BR2_PACKAGE_LZ4=y
BR2_PACKAGE_LZ4_PROGS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBCURL_CURL=y
# Packages
BR2_PACKAGE_ACL=y
BR2_PACKAGE_BRIDGE_UTILS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_CIFS_UTILS=y
BR2_PACKAGE_CONNTRACK_TOOLS=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_E2TOOLS=y
BR2_PACKAGE_EBTABLES=y
BR2_PACKAGE_ETHTOOL=y
BR2_PACKAGE_FINDUTILS=y
BR2_PACKAGE_GIT=y
BR2_PACKAGE_GZIP=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_IPROUTE2=y
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_SOCAT=y
BR2_PACKAGE_SUDO=y
BR2_PACKAGE_ACL=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_LIBCURL_CURL=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LUAJIT=y
BR2_PACKAGE_LZ4_PROGS=y
BR2_PACKAGE_LZ4=y
BR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_OPENVMTOOLS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_PSMISC=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_SOCAT=y
BR2_PACKAGE_SSHFS=y
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_SUDO=y
BR2_PACKAGE_SYSDIG=y
BR2_PACKAGE_SYSSTAT=y
BR2_PACKAGE_SYSTEMD_LOGIND=y
BR2_PACKAGE_SYSTEMD_MACHINED=y
BR2_PACKAGE_TAR=y
@ -65,9 +81,50 @@ BR2_PACKAGE_UTIL_LINUX_LOSETUP=y
BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y
BR2_PACKAGE_UTIL_LINUX_NSENTER=y
BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_TARGET_ROOTFS_ISO9660=y
BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/isolinux.cfg"
BR2_PACKAGE_XFSPROGS=y
BR2_PACKAGE_XZ=y
# Tricky part is to figure out isolinux.
# Replace with grub.cfg.
# BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/isolinux.cfg"
BR2_TARGET_SYSLINUX=y
BR2_PACKAGE_HOST_E2TOOLS=y
BR2_PACKAGE_HOST_PYTHON=y
# ===
# Anders' diff from bios to efi boot.
# --- pc_x86_64_bios_defconfig 2021-12-04 14:32:29.058592857 +0100
# +++ pc_x86_64_efi_defconfig 2021-12-04 14:32:29.058592857 +0100
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
# Required tools to create bootable media
# (The actual boot partition is a DOS disk, that's why the extra tools)
BR2_PACKAGE_HOST_DOSFSTOOLS=y # +efi
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y # +efi
# Bootloader
# (For minikube, we also need to replace "isolinux" with "grub2")
BR2_TARGET_GRUB2=y
BR2_TARGET_GRUB2_X86_64_EFI=y # +efi
# Filesystem / image
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
# BR2_TARGET_ROOTFS_TAR is not set
# -BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
# -BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg"
# Maybe we do not need this post-build script?
BR2_ROOTFS_POST_BUILD_SCRIPT="board/pc/post-build.sh"
# What does this do and do we need it?
BR2_ROOTFS_POST_IMAGE_SCRIPT="board/pc/post-image-efi.sh" # +efi
# Linux headers same as kernel, a 4.19 series
# BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y # already in mk.

View File

@ -0,0 +1,73 @@
BR2_x86_64=y
BR2_CCACHE=y
BR2_OPTIMIZE_2=y
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/patches"
BR2_TOOLCHAIN_BUILDROOT_VENDOR="minikube"
BR2_TOOLCHAIN_BUILDROOT_GLIBC=y
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_GCC_ENABLE_LTO=y
BR2_TARGET_GENERIC_HOSTNAME="minikube"
BR2_TARGET_GENERIC_ISSUE="Welcome to minikube"
BR2_TARGET_GENERIC_PASSWD_SHA512=y
BR2_INIT_SYSTEMD=y
BR2_ROOTFS_DEVICE_TABLE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/permissions"
BR2_SYSTEM_BIN_SH_BASH=y
# BR2_TARGET_GENERIC_GETTY is not set
BR2_ROOTFS_USERS_TABLES="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/users"
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/rootfs-overlay"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.202"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/linux_defconfig"
BR2_LINUX_KERNEL_LZ4=y
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
BR2_PACKAGE_GZIP=y
BR2_PACKAGE_XZ=y
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_SYSDIG=y
BR2_PACKAGE_FINDUTILS=y
BR2_PACKAGE_GIT=y
BR2_PACKAGE_CIFS_UTILS=y
BR2_PACKAGE_E2TOOLS=y
BR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_SSHFS=y
BR2_PACKAGE_XFSPROGS=y
BR2_PACKAGE_PARTED=y
BR2_PACKAGE_SYSSTAT=y
BR2_PACKAGE_LUAJIT=y
BR2_PACKAGE_LZ4=y
BR2_PACKAGE_LZ4_PROGS=y
BR2_PACKAGE_CA_CERTIFICATES=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_LIBCURL_CURL=y
BR2_PACKAGE_BRIDGE_UTILS=y
BR2_PACKAGE_CONNTRACK_TOOLS=y
BR2_PACKAGE_EBTABLES=y
BR2_PACKAGE_ETHTOOL=y
BR2_PACKAGE_IPROUTE2=y
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_RSYNC=y
BR2_PACKAGE_SOCAT=y
BR2_PACKAGE_SUDO=y
BR2_PACKAGE_ACL=y
BR2_PACKAGE_COREUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_OPENVMTOOLS=y
BR2_PACKAGE_PROCPS_NG=y
BR2_PACKAGE_PSMISC=y
BR2_PACKAGE_SYSTEMD_LOGIND=y
BR2_PACKAGE_SYSTEMD_MACHINED=y
BR2_PACKAGE_TAR=y
BR2_PACKAGE_UTIL_LINUX_BINARIES=y
BR2_PACKAGE_UTIL_LINUX_LOSETUP=y
BR2_PACKAGE_UTIL_LINUX_NOLOGIN=y
BR2_PACKAGE_UTIL_LINUX_NSENTER=y
BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_TARGET_ROOTFS_ISO9660=y
BR2_TARGET_ROOTFS_ISO9660_BOOT_MENU="$(BR2_EXTERNAL_MINIKUBE_PATH)/board/coreos/minikube/isolinux.cfg"
BR2_TARGET_SYSLINUX=y
BR2_PACKAGE_HOST_E2TOOLS=y
BR2_PACKAGE_HOST_PYTHON=y

View File

@ -426,7 +426,7 @@ func (d *Driver) extractKernel(isoPath string) error {
}{
{"/boot/bzimage", "bzimage"},
{"/boot/initrd", "initrd"},
{"/isolinux/isolinux.cfg", "isolinux.cfg"},
{"/grub/grub.cfg", "grub.cfg"},
} {
fullDestPath := d.ResolveStorePath(f.destPath)
if err := ExtractFile(isoPath, f.pathInIso, fullDestPath); err != nil {