Package: flash-kernel Version: 3.84 Severity: wishlist Instead of starting the Linux kernel from U-Boot we may want to start an EFI application like grub or iPXE. Let us use a new hook @@UBOOT_PREBOOT_EXTRA@@ in the boot.scr generation for this purpose. The related hook files are to be placed in /etc/flash-kernel/preboot.d or /usr/share/flash-kernel/preboot.d.
Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de> --- README | 19 +++++++++++-------- bootscript/all/bootscr.uboot-generic | 2 ++ bootscript/arm64/bootscr.uboot-generic | 2 ++ debian/dirs | 2 ++ functions | 19 +++++++++++++++++++ 5 files changed, 36 insertions(+), 8 deletions(-) diff --git a/README b/README index 555adaf..1348ccf 100644 --- a/README +++ b/README @@ -200,9 +200,9 @@ Configuration files currently supported: * /etc/flash-kernels/bootscript (directory). The files referenced via the Boot-Script-Name field are installed here. -* /etc/flash-kernel/ubootenv.d can be used to add or override u-boot - script snippets. See "Adding U-Boot Commands for Pre-Boot Execution" - below for more details. +* /etc/flash-kernel/ubootenv.d and /etc/flash-kernel/preboot.d can be used to + add or override u-boot script snippets. See "Adding U-Boot Commands for + Pre-Boot Execution" below for more details. * /etc/default/flash-kernel currently contains the following variables: - LINUX_KERNEL_CMDLINE, which should be used by bootscripts to set kernel @@ -229,10 +229,13 @@ Adding U-Boot Commands for Pre-Boot Execution Packages can drop in files containing U-Boot commands to be executed by a platform's bootscript before starting the OS. These files should be -dropped in /usr/share/flash-kernel/ubootenv.d. Users can add additional +dropped in /usr/share/flash-kernel/ubootenv.d and +/usr/share/flash-kernel/preboot.d. Users can add additional stubs, or override stubs provided by packages, by adding files to -/etc/flash-kernel/ubootenv.d. Files in the /etc path that have the same -name as files in the /usr path will override the /usr counterparts. +/etc/flash-kernel/ubootenv.d and /etc/flash-kernel/preboot.d. Files in the +/etc path that have the same name as files in the /usr path will override the +/usr counterparts. -Platform bootscripts must contain the @@UBOOT_ENV_EXTRA@@ macro for the -contents of these stubs to be incorporated. +Platform bootscripts must contain the @@UBOOT_ENV_EXTRA@@ and +@@UBOOT_PREBOOT_EXTRA@@ macros for the contents of these stubs to be +incorporated. diff --git a/bootscript/all/bootscr.uboot-generic b/bootscript/all/bootscr.uboot-generic index db4066a..abbeeb8 100644 --- a/bootscript/all/bootscr.uboot-generic +++ b/bootscript/all/bootscr.uboot-generic @@ -48,6 +48,8 @@ else setenv partition ${distro_bootpart} fi +@@UBOOT_PREBOOT_EXTRA@@ + load ${devtype} ${devnum}:${partition} ${kernel_addr_r} ${prefix}vmlinuz-${fk_kvers} \ && load ${devtype} ${devnum}:${partition} ${fdt_addr_r} ${prefix}${fdtpath} \ && load ${devtype} ${devnum}:${partition} ${ramdisk_addr_r} ${prefix}initrd.img-${fk_kvers} \ diff --git a/bootscript/arm64/bootscr.uboot-generic b/bootscript/arm64/bootscr.uboot-generic index 568b3b5..33f90d2 100644 --- a/bootscript/arm64/bootscr.uboot-generic +++ b/bootscript/arm64/bootscr.uboot-generic @@ -41,6 +41,8 @@ else setenv partition ${distro_bootpart} fi +@@UBOOT_PREBOOT_EXTRA@@ + load ${devtype} ${devnum}:${partition} ${kernel_addr_r} ${prefix}vmlinuz-${fk_kvers} \ && load ${devtype} ${devnum}:${partition} ${fdt_addr_r} ${prefix}${fdtpath} \ && load ${devtype} ${devnum}:${partition} ${ramdisk_addr_r} ${prefix}initrd.img-${fk_kvers} \ diff --git a/debian/dirs b/debian/dirs index 2788a14..6293c8f 100644 --- a/debian/dirs +++ b/debian/dirs @@ -1,3 +1,5 @@ usr/sbin +etc/flash-kernel/preboot.d +usr/share/flash-kernel/preboot.d etc/flash-kernel/ubootenv.d usr/share/flash-kernel/ubootenv.d diff --git a/functions b/functions index b2ae5be..f1e17a6 100644 --- a/functions +++ b/functions @@ -304,6 +304,19 @@ gen_kernel() { } >"$output" } +gen_preboot() { + PRESTUBDIRS="/etc/flash-kernel/preboot.d /usr/share/flash-kernel/preboot.d" + PRESTUBS="$(find $PRESTUBDIRS -type f -regex '.*/[0-9a-zA-Z_-]+' -printf '%f\n' | LC_ALL=C sort -u)" + for file in $PRESTUBS; do + for dir in $PRESTUBDIRS; do + if [ -f $dir/$file ]; then + cat $dir/$file + break + fi + done + done +} + gen_ubootenv() { ENVSTUBDIRS="/etc/flash-kernel/ubootenv.d /usr/share/flash-kernel/ubootenv.d" ENVSTUBS="$(find $ENVSTUBDIRS -type f -regex '.*/[0-9a-zA-Z_-]+' -printf '%f\n' | LC_ALL=C sort -u)" @@ -460,6 +473,8 @@ mkimage_script() { local ubootenv="$(mktemp --tmpdir=$tmpdir)" gen_ubootenv > $ubootenv + local preboot="$(mktemp --tmpdir=$tmpdir)" + gen_preboot > $preboot printf "Generating boot script u-boot image... " >&2 sed -e "s/@@KERNEL_VERSION@@/$kvers/g" \ @@ -468,6 +483,10 @@ mkimage_script() { -e "/@@UBOOT_ENV_EXTRA@@/{ s/@@UBOOT_ENV_EXTRA@@//g r $ubootenv + }" < $sdata > $tdata \ + -e "/@@UBOOT_PREBOOT_EXTRA@@/{ + s/@@UBOOT_PREBOOT_EXTRA@@//g + r $preboot }" < $sdata > $tdata mkimage -A "$mkarch" -O linux -T script -C none -a "$saddr" -e "$saddr" \ -n "$sdesc" -d "$tdata" "$script" >&2 1>/dev/null -- 2.14.1