This Month in Rust OSDev (July 2021)
Welcome to a new issue of "This Month in Rust OSDev". In these posts, we give a regular overview of notable changes in the Rust operating system development ecosystem.
This series is openly developed on GitHub. Feel free to open pull requests there with content you would like to see in the next issue. If you find some issues on this page, please report them by creating an issue or using our comment form at the bottom of this page.
Project Updates
In this section, we give an overview of notable changes to the projects hosted under the rust-osdev
organization.
uefi-rs
The uefi
crate provides safe and performant wrappers for UEFI, the successor to the BIOS. In July, we merged the following changes:
- Add support for getting/setting variables
- Better logger that includes filename and line
- device path: add constants for all subtypes
- device path: change the length type to u16
- Implement
BootServices::protocols_per_handle
- Add method to get variable names
- Better
fmt::Debug
forTime
struct +fmt::Display
- Fix
BltRegion::Full
bounds check - Fix procedural macros
- device path: add header struct
- device path: add iter method and test
Thanks to @nicholasbishop, @MaulingMoneky, @phip1611 and @necauqua for their contributions!
acpi
The acpi
repository contains crates for parsing the ACPI tables – data structures that the firmware of modern computers use to relay information about the hardware to the OS.
This month:
- Definitions were added for the FADT's fixed and architecture flags
- Table signatures were added for more static tables
- AML: support was added for the
DefPowerResource
opcode - AML: support was added for the
DefThermalZone
opcode - AML: support was added for the
DefExternal
opcode - AML: support was added for the
DefConcat
opcode - AML: support was added for the
DefConcatRes
opcode - AML: support was added for the
DefMid
opcode
These changes were published as acpi v3.1.0
and aml v0.14.0
. Thanks to @ethindp
and @toku-sa-n for their contributions.
multiboot2
The multiboot2
crate provides abstraction types for the boot information of multiboot2 bootloaders.
In July, our multiboot2
maintenance team gained @phip1611 as a new member. Welcome!
The following changes were merged this month:
- much improved debug output of BootInformation + enum TagType (published as
v0.11.0
) - Set up CI on Github Actions
- Add multiboot2 magic number
- Fixing future compiler error "unaligned_references" (82523)
- Rust edition 2018 + formatting + clippy
- Breaking:
load
returns a result now (no more assertions that could panic) - Renamed multiboot2 bootloader magic constant
- Cargo toml prepare release v0.12 + changelog (published as
v0.12.0
) - Rename old Github urls in README
x86_64
The x86_64
crate provides various abstractions for x86_64
systems, including wrappers for CPU instructions, access to processor-specific registers, and abstraction types for architecture-specific structures such as page tables and descriptor tables.
In July, we merged the following improvements:
- feat(idt): make it available in the stable Rust
- gdt: Fix off-by-one error in from_raw_slice()
- Make align_up and align_down const
- Add a SelectorErrorCode to segment_not_present in IDT
- Add flags for CR0, CR4 and XCR0, as well as extra checks for modification of XCR0
- fix(Changelog.md): typo #278
- feat(instructions): define
tables::sgdt
- Create a CI script for automated releases
- CI: Use more efficient crates.io API endpoint
- Release version to 0.14.4
- Rename XCr0 and CR4 flags
Thanks to @budde25 and @toku-sa-n for their contributions.
Call for Participation
Want to contribute to a Rust OSDev project, but don't know where to start? Pick up one of these outstanding issues in one of our projects and get started!
No tasks were proposed for this section.
If you maintain a Rust OSDev project and are looking for contributors, especially for tasks suited to people
getting started in this space, please create a PR against the
next
branch with the tasks you want to include in the next issue.
Personal Projects
In this section, we describe updates to personal projects that are not directly related to the rust-osdev
organization. Feel free to create a pull request with the updates of your OS project for the next post.
phil-opp/blog_os
(Section written by @phil-opp)
This month, the Writing an OS in Rust blog received the following updates:
- Translate first two posts into Russian
- Thanks to @MrZloHex for the translation and @SnejUgal and @vdjagilev for reviewing!
- docs: update version of crates
- Replace MS doc link in german
- Typo fixes in the Paging Implementation, Allocator Designs, and Async Await posts.
Thanks to @Foo-x, @adi-g15, @Kalbiq, and @MrZloHex for their contributions.
Join Us?
Are you interested in Rust-based operating system development? Our rust-osdev
organization is always open to new members and new projects. Just let us know if you want to join! A good way for getting in touch is our Zulip chat.