git: 2ce9741087 - main - Status/2023Q2/kboot.adoc: Add report

From: Lorenzo Salvadore <>
Date: Tue, 25 Jul 2023 09:10:32 UTC
The branch main has been updated by salvadore:


commit 2ce97410877595e425d9a0109b77914980772d06
Author:     Warner Losh <>
AuthorDate: 2023-07-25 08:28:30 +0000
Commit:     Lorenzo Salvadore <>
CommitDate: 2023-07-25 09:05:55 +0000

    Status/2023Q2/kboot.adoc: Add report
    Reviewed by:    grahamperrin, status (Pau Amma <>)
    Approved by:    carlavilla (mentor, implicit)
    Pull Request:
 .../en/status/report-2023-04-2023-06/kboot.adoc    | 56 ++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/website/content/en/status/report-2023-04-2023-06/kboot.adoc b/website/content/en/status/report-2023-04-2023-06/kboot.adoc
new file mode 100644
index 0000000000..c6a199cfa1
--- /dev/null
+++ b/website/content/en/status/report-2023-04-2023-06/kboot.adoc
@@ -0,0 +1,56 @@
+=== LinuxBoot FreeBSD on aarch64
+Contact: Warner Losh <>
+Links: +
+link:[LinuxBoot Project] URL: link:[]+
+link:[BSDCan 2023 kboot talk slides] URL: link:[]
+LinuxBoot is an effort to create a clean, robust, auditable and repeatable boot firmware.
+What originally started as a specific project at Google has grown to encompass any boot environment that uses Linux to launch the final operating system.
+Many platforms now support this environment, and in some cases it is the only available boot environment.
+In addition, some embedded boxes have a LinuxBoot environment hard-coded that is quite hard to change, and being able to reboot into FreeBSD is desirable.
+The old Sony PlayStation 3 port used a boot loader called 'kboot' to boot the FreeBSD port from its Linux kernel (all predating the LinuxBoot project).
+That code has been greatly expanded, made generic with easily replaceable per-architecture plug ins.
+The normal FreeBSD [.filename]#/boot/loader# is built as a Linux binary that reads in the FreeBSD kernel, modules and tunables.
+It places them into memory as if it were running in a pre-boot environment, then loads that image into the Linux kernel with man:kexec_load[2] and does a special reboot to that image.
+For UEFI-enabled systems, it passes the UEFI memory table and pointer to UEFI runtime services to the new kernel.
+It supports loading files from the host's filesystem, from any man:loader[8]-supported filesystem on the host's block devices (including pools that span multiple devices), from ram disk images and from files downloaded over the network.
+Any mix of these is available.
+So, for example, configuration overrides can be loaded from the host's filesystem whilst the kernel loads from dedicated storage (say NVME) or a ram disk image.
+It supports a host console running over stdin/stdout.
+It supports explicit locations such as `/dev/nvme0ns1:/boot/loader/gerbil.conf` for where to load filesystems from.
+It supports ZFS boot environments, including the boot-once feature.
+Additional details about kboot, what it supports and some general background can be found in Warner's BSDcan talk (slides linked above).
+FreeBSD/aarch64 now can boot from Linux in a LinuxBoot environment, with support and functionality comparable to man:loader.efi[8].
+Memory layout passed in for GICv3 workarounds.
+Need patch for aarch64 kernel for the GICv3 workaround (link:[]).
+FreBSD/amd64 support is in progress and is maybe 80% done.
+The amd64 boot environment places more requirements on the boot loader to provide data for the kernel than aarch64, due to amd64 being an older port.
+All sources for data in the BIOS enviornment had to be provided by the boot loader since the kernel had no access to them from long mode.
+While UEFI and ACPI provide ways for the kernel to get this data, much of the data must still be provided by the boot loader.
+The kernel panics during initialization since all these prerequisites have not been discovered and implemented.
+PowerPC builds, but nothing more of its state is known.
+Attempts to acquire a suitable Playstation 3 proved to be too time consuming for the author.
+==== Help Needed
+1. man:loader.kboot[8] needs to be written.
+It should document how to use [.filename]#loader.kboot#, how to create images, and the use cases that work today.
+1. Finish amd64 support.
+1. The current elf arch-specific metadata code is copied from efi.
+Unifying the kboot and efi copies is needed.
+While they are mostly the same, sharing is complicated by remaining compile-time differences.
+In addition, the build infrastructure makes sharing awkward.
+1. It would be nice to add riscv64 support.
+1. PowerPC testing (it has been untested since the refactoring started).
+1. Creating a script to repackage EDK-II image (say, from QEMU) as a linux-boot image with a Linux kernel built on FreeBSD for CI testing.
+1. Testing it from the coreboot LinuxBoot.
+Sponsored by: Netflix, Inc