rom.sh: Support SeaUBoot for 64-bit x86 U-Boot

Same concept as SeaGRUB, but for U-Boot. SeaBIOS starts, but
has a bootorder file loading U-Boot first, from flash.

You can interrupt it with the ESC menu, to boot something else
in SeaBIOS, including GRUB.

With this, we can effectively provide extremely user-friendly
UEFI-first setups in Libreboot.

Take that, edk2!

Signed-off-by: Leah Rowe <leah@libreboot.org>
master
Leah Rowe 2024-11-21 12:29:05 +00:00
parent 02e66ae01a
commit 7d1fd1cc6a
3 changed files with 9 additions and 3 deletions

View File

@ -0,0 +1 @@
/rom@img/u-boot

Binary file not shown.

View File

@ -154,7 +154,9 @@ add_seabios()
[ "$payload_grub" = "y" ] && add_grub [ "$payload_grub" = "y" ] && add_grub
cprom && [ "$payload_grub" = "y" ] && pname="seagrub" && mkseagrub; : cprom
[ "$payload_uboot_amd64" = "y" ] && pname="seauboot" && cprom "seauboot"
[ "$payload_grub" = "y" ] && pname="seagrub" && mkseagrub; :
} }
add_grub() add_grub()
@ -210,11 +212,14 @@ add_uboot()
cprom() cprom()
{ {
newrom="bin/$target/${pname}_${target}_$initmode$displaymode.rom" newrom="bin/$target/${pname}_${target}_$initmode$displaymode.rom"
[ $# -gt 0 ] && newrom="${newrom%.rom}_${1%.gkb}.rom" [ $# -gt 0 ] && [ "$1" != "seauboot" ] && \
newrom="${newrom%.rom}_${1%.gkb}.rom"
x_ mkdir -p "bin/$target" x_ mkdir -p "bin/$target"
x_ cp "$tmprom" "$newrom" && [ $# -gt 0 ] && \ x_ cp "$tmprom" "$newrom" && [ $# -gt 0 ] && [ "$1" != "seauboot" ] && \
cbfs "$newrom" "config/data/grub/keymap/$1" keymap.gkb raw cbfs "$newrom" "config/data/grub/keymap/$1" keymap.gkb raw
[ $# -gt 0 ] && [ "$1" = "seauboot" ] && \
cbfs "$newrom" "config/data/grub/bootorder_uboot" "bootorder" raw
[ "$XBMK_RELEASE" = "y" ] || return 0 [ "$XBMK_RELEASE" = "y" ] || return 0
$dry mksha512sum "$newrom" "vendorhashes"; $dry ./vendor inject \ $dry mksha512sum "$newrom" "vendorhashes"; $dry ./vendor inject \