From f530e2df5696d9dc06f91348a44c30349cea042c Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Thu, 6 Jul 2023 18:18:08 -0600 Subject: [PATCH] kboot status report for 2023 Q2 Sponsored by: Netflix --- .../status/report-2023-04-2023-06/kboot.adoc | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 website/content/en/status/report-2023-04-2023-06/kboot.adoc 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 000000000000..8e310768ee24 --- /dev/null +++ b/website/content/en/status/report-2023-04-2023-06/kboot.adoc @@ -0,0 +1,52 @@ +=== LinuxBoot FreeBSD on aarch64 + +Contact: Warner Losh + +Links: + +link:https://www.linuxboot.org/[LinuxBoot Project] URL: link:https://www.linuxboot.org/[]+ +link:https://docs.google.com/presentation/d/1N5Jp6XzYWv9Z9RhhETC-e6tFkqRHvp-ldRDW_9h2JCw/edit?usp=sharing[BSDCan 2023 kboot talk slides] URL: link:https://docs.google.com/presentation/d/1N5Jp6XzYWv9Z9RhhETC-e6tFkqRHvp-ldRDW_9h2JCw/edit?usp=sharing[] + +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. +This sort of environment is available on many platforms, and in some cases is the only available boot environment. +In addition, some embedded boxes have a Linux boot 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 accomplish this in that environment. +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 and then loads that image into the Linux kernel with man:kexec_load[2] and does a special reboot to that kernel 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 configuration overrides can be loaded from the host's filesystem, but the kernel can be loaded 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. + +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:https://reviews.freebsd.org/D40902[] + +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 kenrel 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 loader.kboot, how to create images, and the different 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, compile-time differences remain that complicate sharing. + +In addtion, 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. Help 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. + +Sponsored by: Netflix, Inc