Skip to content

Commit

Permalink
kboot status report for 2023 Q2
Browse files Browse the repository at this point in the history
Sponsored by:		Netflix
  • Loading branch information
bsdimp committed Jul 10, 2023
1 parent 89fc451 commit f530e2d
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions website/content/en/status/report-2023-04-2023-06/kboot.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
=== LinuxBoot FreeBSD on aarch64

Contact: Warner Losh <imp@bsdimp.com>

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

0 comments on commit f530e2d

Please sign in to comment.