You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use new UEFI bootloader and UEFI bootloader API crate (theseus-os#792)
* Removes old assumptions/requirements that all sections
in the kernel base image are loaded into physically-contiguous
memory, especially the stack and bootloader info.
* IOW, we stop relying upon a fixed `KERNEL_OFFSET` to
calculate virtual addresses from physical addresses and vice versa;
instead, we actually translate addresses via the initial page table.
* Thus, we must obtain the address of the GDT used to boot
secondary CPUs (APs on x86) and pass it through the various
init routines so that it can be used when booting secondary CPUs.
* `PageRange` and `FrameRange` constructors will now return an
empty range if invoked with a size of 0 bytes, instead of panicking.
* The major changes in this commit is to introduce new crates that
support building Theseus for and booting it on UEFI bootloaders.
* `tools/uefi-builder` is now multi-architecture,
but aarch64 support is a WIP.
* The separate `theseus-os/uefi-bootloader` repo is a fork of
`rust-osdev/bootloader` but heavily changed to support Theseus's
needs and additional architectures.
* aarch64 is still a WIP here too.
* Currently we manually ensure that the same version of the
`uefi-bootloader*` crates are used in the Theseus workspace
and in the `tools/uefi-builder/*` crates. Ideally this would be
ensured automatically in the future.
* `uefi-builder` consists of separate, per-arch crates; we can combine
them once <rust-lang/cargo#10030> is fixed.
Co-authored-by: Kevin Boos <kevinaboos@gmail.com>
0 commit comments