- Fix bug stemming from treating an exclusive range as an inclusive ranges
- Update
uefi
dependency tov0.20
- Implemented sorting of uefi memory maps
- Run
cargo update
to fix build on nightly
- Fix internal error in Cargo.toml setup that prevented publishing 0.11.1
- New
set_boot_config
method to configure the boot process (frame buffer dimensions and log output). This is the result of a set of PRs: - Add
bios
anduefi
cargo features - Boot Info: Add a
FrameBuffer::into_buffer
method for taking ownership
- Correctly allocate last frame in memory descriptor
- Correctness fixes for stage2
- Fix: treat
kernel_slice_end
as an exclusive bound when checking for overlaps
- Map BIOS stage-4 at lower address to avoid conflicts with the kernel
- Create kernel stack with correct size and set up a guard page
Major rewrite of the bootloader
crate with various breaking changes:
- Separate API crate: The bootloader is now split into two parts: An API crate to make kernels loadable by the bootloader and the actual bootloader implementation. This makes the build process for kernels much easier and faster.
- New config system: Instead of configuring the bootloader via a special table in the
Cargo.toml
, the configuration now happens through a normal Rust struct, which is part of theentry_point!
macro. The macro then serializes the config struct at compile time and places it in a special ELF output section. The compile time serialization happens through a manually implementedconst fn
of the config struct. - Load the kernel at runtime: The bootloader is now able to load files from FAT partitions at runtime. Thus, we don't need to link the kernel into the bootloader executable anymore. As a result, we don't need to recompile the bootloader on kernel changes anymore. We also load the config at runtime from the kernel's ELF section, which eliminates the second reason for recompiling the bootloader as well.
- Split into sub-crates: Since the bootloader build process does not need access to the kernel executable or its
Cargo.toml
anymore, we can build the different parts of the bootloader independently. For example, the BIOS boot sector is now a separate crate, and the UEFI bootloader is too. - Library to create disk images: To create an abstraction the complex build steps of the different bootloader executables, we compile them inside cargo build scripts. At the top level, we provide a
bootloader
library crate, which compiles everything as part of its build script. This library includes functions for creating BIOS and UEFI disk images for a given kernel. These functions can be used e.g. from a builder crate or a build script of the downstream operating system.
See our migration guides for details.
- Add dynamic range configuration (#229)
- Fix boot for machines that report memory regions at high physical addresses (see #259)
- Correct typos in
src/binary/level_4_entries.rs
(#228)
- Add support for position independent executables (#206)
- Add optional ASLR (#221)
- Logger: nicer font rendering into framebuffer (#213)
- Fix warnings on latest nightly (
maybe_uninit_extra
is no longer feature-gated) (#222) - Rework
UsedLevel4Entries
(#219) - Add small doc-comment to entry_point! macro (#220)
- Remove feature flag for
lang_items
,asm
andglobal_asm
(#210) - Use
set_reg
method ofCS
,DS
,ES
andSS
segment structs (#211)
- Fix
asm
imports on latest nightly (#209)
- Add support for framebuffer configuration (#179)
- Fix
relocation-model
field name in the target spec json (#186)- This effectively changes the
relocation-model
frompic
tostatic
. Please report if you encounter any issues because of this. - This fixes the compilation warnings on the latest nightlies.
- This effectively changes the
- Identity-map GDT into kernel address space to fix
iretq
(#175) - Uefi: Look for an ACPI2 RSDP first (#174)
- Don't check target architecture for builder crate to support cross-compiling (#176)
- Fix build on latest Rust nightlies by updating
uefi-rs
dependency (#170)- Also: Fix warnings about
.intel_syntax
attribute in assembly code
- Also: Fix warnings about
- Fix build on latest Rust nightly by updating to
uefi
v0.9.0 (#162) - Fix higher half kernels by identity mapping context switch fn earlier (#161)
- Also: improve reporting of mapping errors
- Change register used in setting SS in stage_4 (#156)
- Use new
asm!
syntax instead of deprecatedllvm_asm!
(#154) - Reduce the number of used unstable features of x86_64 crate (#155)
- Fix docs.rs build: Don't enable any features
- Rewrite for UEFI support (#130)
- Includes a new build process that no longer uses the
bootimage
crate. See the Readme for details.
- Includes a new build process that no longer uses the
- Set
relocation-model: static
andpanic-strategy: abort
andfix .intel_syntax
warnings (#185)- Fixes warnings on the latest Rust nightlies.
- This effectively changes the
relocation-model
andpanic-strategy
. Please report if you encounter any issues because of this.
- Fix nightly regression by manually passing --gc-sections (#168)
- Reduce the number of used unstable features of x86_64 crate (backport #155)
- Replace all remaining
lea
s withmov
+offset
(#140)
- Fix linker errors on latest nightlies (#139)
- Fix "panic message is not a string literal" warning (#138)
(accidental release)
- Fix build on latest nightly by updating x86_64 to v0.13.2 (#135)
- Update
Cargo.lock
to fix nightly breakage (#129)
- Update
x86_64
again to version 0.12.1 to fixconst fn
-related build errors on latest nightly
- Run
cargo update
to fix build errors ofx86_64
on latest nightly
- Enable rlibc dependency only with
binary
feature (#126)
- Make bootloader buildable with
-Zbuild-std
(#125)
- Change 1st stage int 13h addressing (#123)
- Fix warning by renaming
_improper_ctypes_check
functions (#122)
- Update x86_64 dependency to version 0.11.0 (#117)
- Nightly Breakage: Use
llvm_asm!
instead of deprecatedasm!
(#108)
- SSE feature: remove inline assembly + don't set reserved bits (#105)
- Breaking: Identity-map complete vga region (0xa0000 to 0xc0000) (#104)
- Implement boot-info-address (#101)
- Add basic support for ELF thread local storage segments (#96)
- Fix docs.rs build (see commit 01671dbe449b85b3c0ea73c5796cc8f9661585ee)
- Objcopy replaces
.
chars with_
chars (#94)
- Update x86_64 dependency (#92)
- Move architecture checks from build script into lib.rs (#91)
- Remove unnecessary
extern C
on panic handler to fix not-ffi-safe warning (#85)
- Change the way the kernel entry point is called to honor alignment ABI (#81)
- Add a Cargo Feature for Enabling SSE (#77)
- Breaking: Parse bootloader configuration from kernel's Cargo.toml (#73)
- At least version 0.7.7 of
bootimage
is required now.
- At least version 0.7.7 of
- Configurable kernel stack size, better non-x86_64 errors (#72)
- Dynamically map kernel stack, boot info, physical memory and recursive table (#71)
- Run cargo update (improves compile times because of trimmed down upstream dependencies)
- Breaking: Only include dependencies when
binary
feature is enabled (#68)- For manual builds, the
binary
feature must be enabled when building - For builds using
bootimage
, at least version 0.7.6 ofbootimage
is required now.
- For manual builds, the
- Use volatile accesses in VGA code and make font dependency optional (#67)
- Making the dependency optional should improve compile times when the VGA text mode is used.
- Update CI badge, use latest version of x86_64 crate and rustfmt (#63)
- Remove stabilized publish-lockfile feature (#62)
- Make the physical memory offset configurable through a
BOOTLOADER_PHYSICAL_MEMORY_OFFSET
environment variable (#58). - Use a stripped copy of the kernel binary (debug info removed) to reduce load times (#59).
- Breaking: Don't set the
#[cfg(not(test))]
attribute for the entry point function in theentry_point
macro- With custom test frameworks, it's possible to use the normal entry point also in test environments
- To get the old behavior, you can add the
#[cfg(not(test))]
attribute to theentry_point
invocation
- Additional assertions for the passed
KERNEL
executable- check that the executable exists (for better error messages)
- check that the executable has a non-empty text section (an empty text section occurs when no entry point is set)
- Mention minimal required bootimage version in error message when
KERNEL
environment variable is not set.
- Remove redundant import that caused a warning
- Add a
package.metadata.bootloader.target
key to the Cargo.toml that can be used by tools such asbootimage
.
- Breaking: Change the build system: Use a build script that expects a
KERNEL
environment variable instead of using a separatebuilder
executable as before. See #51 and #53 for more information.- This makes the bootloader incompatible with versions
0.6.*
and earlier of thebootimage
tool. - The bootloader also requires the
llvm-tools-preview
rustup component now.
- This makes the bootloader incompatible with versions
- The level 4 page table is only recursively mapped if the
recursive_page_table
feature is enabled. - Rename
BootInfo::p4_table_addr
toBootInfo::recursive_page_table_addr
(only present if the cargo feature is enabled) - Remove
From<PhysFrameRange>
implementations for x86_64FrameRange
- This only works when the versions align, so it is not a good general solution.
- Remove unimplemented
BootInfo::package
field. - Make
BootInfo
non-exhaustive so that we can add additional fields later.
- Add a
map_physical_memory
feature that maps the complete physical memory to the virtual address space atBootInfo::physical_memory_offset
. - Re-export
BootInfo
at the root.