-
Notifications
You must be signed in to change notification settings - Fork 324
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sponsored by: Netflix
- Loading branch information
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
52 changes: 52 additions & 0 deletions
52
website/content/en/status/report-2023-04-2023-06/kboot.adoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |