git: 85ec78b846 - main - 2026Q3 status: boot loader improvements

From: Warner Losh <imp_at_FreeBSD.org>
Date: Wed, 21 Oct 2026 21:03:33 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/doc/commit/?id=85ec78b8469348832b096e623e1d74976c316aa4

commit 85ec78b8469348832b096e623e1d74976c316aa4
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2026-10-19 01:00:30 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2026-10-21 21:01:39 +0000

    2026Q3 status: boot loader improvements
    
    Add my boot loader improvement report.
---
 .../boot-loader-improvements.adoc                  | 49 ++++++++++++++++++++++
 1 file changed, 49 insertions(+)

diff --git a/website/content/en/status/report-2026-07-2026-09/boot-loader-improvements.adoc b/website/content/en/status/report-2026-07-2026-09/boot-loader-improvements.adoc
new file mode 100644
index 0000000000..5463b850d7
--- /dev/null
+++ b/website/content/en/status/report-2026-07-2026-09/boot-loader-improvements.adoc
@@ -0,0 +1,49 @@
+=== Boot Loader Improvements
+
+Links: +
+link:https://reviews.freebsd.org/D58008[Boot loader test framework] URL: link:https://reviews.freebsd.org/D58008[] +
+link:https://reviews.freebsd.org/D58073[XZ decompression for EFI memory disks] URL: link:https://reviews.freebsd.org/D58073[] +
+link:https://reviews.freebsd.org/D59418[Dynamic loader memory disks] URL: link:https://reviews.freebsd.org/D59418[] +
+link:https://reviews.freebsd.org/D59423[Independent EFI HTTP devices] URL: link:https://reviews.freebsd.org/D59423[] +
+link:https://reviews.freebsd.org/D59428[DHCP initial memory-disk option] URL: link:https://reviews.freebsd.org/D59428[] +
+link:https://cgit.freebsd.org/src/commit/?id=9ecc2493ca5fbba852e175674b5cb8975b99af84[EFI chain-boot partition fix] URL: link:https://cgit.freebsd.org/src/commit/?id=9ecc2493ca5fbba852e175674b5cb8975b99af84[]
+
+Contact: Warner Losh <imp@FreeBSD.org>
+
+Work this quarter expanded the boot loader's support for compressed images, memory disks, and HTTP network booting, with an eye to both iPXE integration, and man:loader.efi[8] completeness.
+It also introduced a QEMU-based test framework covering many of FreeBSD's boot combinations.
+
+The loader can now read files compressed with XZ or Zstandard in the same way that it already handled gzip and bzip2 files.
+XZ support is enabled by default in the BIOS and EFI loaders, including support for compressed memory-disk images such as FreeBSD installation images.
+Zstandard support is available as a build option.
+
+Memory-disk handling was generalized so that the loader can create an `md` device dynamically.
+This provides a fallback on systems whose UEFI firmware does not implement the RamDisk protocol, a situation found on some smaller and embedded systems.
+The resulting memory disk is exported to the kernel and can contain both the kernel and the root filesystem.
+Downloaded memory-disk images now use the correct UEFI memory type, and downloads can be interrupted with Escape.
+This replaces the need to use the [.filename]#memdisk_uefi.efi# third-party add-in that people needed previously for iPXE integration.
+Now [.filename]#loader.efi# can also download images via iPXE's download services, requireing only basic networking DXE modules in the UEFI firmware image.
+
+EFI HTTP support previously depended on the firmware having loaded [.filename]#loader.efi# through UEFI HTTP Boot and was restricted to the server selected by the firmware.
+The loader now accepts arbitrary `http[N]://host[:port]/path` device specifications.
+These can be used as `rootdev`, in [.filename]#loader.conf#, or interactively, regardless of how the loader itself was started.
+The implementation can either reuse an existing loader network configuration or ask the firmware network stack to perform DHCP.
+
+The DHCP client now requests a FreeBSD vendor option containing the URL of an initial memory-disk image.
+With this option, a machine can start [.filename]#loader.efi# directly over the network, discover a detached root image through DHCP, retrieve that image over HTTP, and boot from it.
+Care was taken to transfer ownership of the network interface between the loader's native network stack and the UEFI HTTP stack.
+This is necessary because each stack needs different access to the firmware's network protocols.
+
+A new [.filename]#tools/boot/boot-test.sh# framework uses QEMU to test booting across aarch64, amd64, armv7, powerpc64, powerpc64le, and riscv64.
+It exercises the applicable BIOS, UEFI, OpenFirmware, and PReP environments with CD, MBR, GPT, network, and memory-disk configurations, as well as the Lua, Forth, and simple loaders.
+HTTP network-boot and [.filename]#gptboot.efi# chain-boot tests were added later in the quarter.
+The framework is not yet an installed test because it builds and tests several target architectures from one host.
+
+The chain-boot tests accompanied a fix for systems that use [.filename]#gptboot.efi# to select between A/B system partitions.
+After being chain-loaded, [.filename]#loader.efi# could skip the selected partition and boot the other system partition instead.
+The selected partition is now tried first, while the normal search of sibling partitions remains as a fallback.
+A separate loader change that interfered with some ZFS chain-boot configurations was reverted.
+
+Other work added a man:loader.kboot[8] manual page, build knobs for omitting the x86 BIOS and userboot loaders from UEFI-only systems, and defensive checks for firmware that advertises unusable graphics output protocols.
+
+Sponsor: Netflix