From 11d3e978d7b32539aac6aeac83a9025d57cbd2ca Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 10 Dec 2020 14:06:07 +0100 Subject: [PATCH 01/15] Add draft for December status update --- content/this-month/2020-12/index.md | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 content/this-month/2020-12/index.md diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md new file mode 100644 index 00000000..f101f8cf --- /dev/null +++ b/content/this-month/2020-12/index.md @@ -0,0 +1,56 @@ ++++ +title = "This Month in Rust OSDev (December 2020)" +date = 0000-01-01 + +[extra] +month = "December 2020" +authors = [ + "phil-opp", + # add yourself here +] ++++ + +Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will give a regular overview of notable changes in the Rust operating system development ecosystem. + + + +This series is openly developed [on GitHub](https://github.com/rust-osdev/homepage/). 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](https://github.com/rust-osdev/homepage/issues/new). + + + +## Project Updates + +In this section, we give an overview of notable changes to the projects hosted under the [`rust-osdev`] organization. + +[`rust-osdev`]: https://github.com/rust-osdev/about + +### [`x86_64`](https://github.com/rust-osdev/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 December, … + +## 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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. + +### [`phil-opp/blog_os`](https://github.com/phil-opp/blog_os) + +(Section written by [@phil-opp](https://github.com/phil-opp)) + +This month, ... + +## 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 [gitter channel](https://gitter.im/rust-osdev/Lobby). + + + \ No newline at end of file From 20d31ca7e856f3c87f3e60fd4a32ea35d0393fe3 Mon Sep 17 00:00:00 2001 From: Luc Street Date: Fri, 18 Dec 2020 23:20:05 -0800 Subject: [PATCH 02/15] Add v0.1.1 update to lucis-fluxum/ps2-rs --- content/this-month/2020-12/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index f101f8cf..e6e3bcfa 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -46,6 +46,14 @@ In this section, we describe updates to personal projects that are not directly This month, ... +### [`lucis-fluxum/ps2-rs`](https://github.com/lucis-fluxum/ps2-rs) + +(Section written by [@lucis-fluxum](https://github.com/lucis-fluxum)) + +I pushed [release v0.1.1](https://docs.rs/ps2/0.1.1/ps2/) this month, which is mainly a documentation update aiming +to improve understanding of how to use the library. I've also added links to some reading material that helped me +understand the PS/2 protocol better and much of the surrounding terminology. May the old keyboards live on! + ## 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 [gitter channel](https://gitter.im/rust-osdev/Lobby). @@ -53,4 +61,4 @@ Are you interested in Rust-based operating system development? Our `rust-osdev` \ No newline at end of file +--> From 8ec589593cee44d84b691e0d861d81f9e3d715ab Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 12:26:42 +0100 Subject: [PATCH 03/15] Add changes for x86_64 --- content/this-month/2020-12/index.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index e6e3bcfa..2748f543 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -34,7 +34,33 @@ In this section, we give an overview of notable changes to the projects hosted u 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 December, … +In December, we published the following three new releases: + +#### [`v0.12.4`](https://github.com/rust-osdev/x86_64/pull/220) + +- [Add and fix some intra-doc links](https://github.com/rust-osdev/x86_64/pull/208) +- [GDT: Add `load_unchecked`, `from_raw_slice`, and `as_raw_slice`](https://github.com/rust-osdev/x86_64/pull/210) +- [Fix bad conversion from llvm_asm! to asm!](https://github.com/rust-osdev/x86_64/pull/218) + - _Heads up:_ [Rust does not check the assembly in `asm!` unless its used](https://github.com/rust-lang/rust/issues/80440) + +#### [`v0.13.0` (breaking)](https://github.com/rust-osdev/x86_64/pull/223) + +- [Also return flags for `MapperAllSizes::translate()`](https://github.com/rust-osdev/x86_64/pull/207) +- [Restructure the `TranslateResult` type and create separate `Translate` trait](https://github.com/rust-osdev/x86_64/pull/211) +- [Rename `PhysToVirt` trait to `PageTableFrameMapping`](https://github.com/rust-osdev/x86_64/pull/214)) +- [Use custom error types instead of `()`](https://github.com/rust-osdev/x86_64/pull/199)) +- [Remove deprecated items](https://github.com/rust-osdev/x86_64/pull/223/commits/2df2b97cb53e593b89ab2dbee6669e63d4898386): `UnusedPhysFrame`, `ExceptionStackFrame`, `VirtAddr::new_unchecked`, `interrupts::enable_interrupts_and_hlt` +- [Make `DescriptorTablePointer::base` a `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/215)) +- [Change return type of `read_rip` to `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/216)) +- [Make writing the RFLAGS register unsafe](https://github.com/rust-osdev/x86_64/pull/219)) +- [Remove `PortReadWrite` trait, which is no longer needed](https://github.com/rust-osdev/x86_64/pull/217)) +- [Relaxe `Sized` requirement for `FrameAllocator` in `Mapper::map_to](https://github.com/rust-osdev/x86_64/pull/204) + +#### [`v0.13.1`](https://github.com/rust-osdev/x86_64/commit/4d5058c1a1c3873294b92a628be0bb151d37ca6a) + +- [PCID support instructions](https://github.com/rust-osdev/x86_64/pull/169) + +Thanks to [@mental32](https://github.com/mental32), [@vinaychandra](https://github.com/vinaychandra), [@tomaka](https://github.com/tomaka), [@haraldh](https://github.com/haraldh), [@tscs37](https://github.com/tscs37), and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! ## Personal Projects From 3c7bb0c698ae8e9b894625a612dcaef8af1a9b5c Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 13:08:45 +0100 Subject: [PATCH 04/15] Add changes for cargo-xbuild --- content/this-month/2020-12/index.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 2748f543..199cb96c 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -62,6 +62,16 @@ In December, we published the following three new releases: Thanks to [@mental32](https://github.com/mental32), [@vinaychandra](https://github.com/vinaychandra), [@tomaka](https://github.com/tomaka), [@haraldh](https://github.com/haraldh), [@tscs37](https://github.com/tscs37), and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! +### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) + +The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged a small error reporting improvement: + +- [Don't panic on metadata errors](https://github.com/rust-osdev/cargo-xbuild/pull/100) (published as `v0.6.4`) + +Thanks to [@parasyte](https://github.com/parasyte) for this contribution! + +Even though we still maintain the `cargo-xbuild` crate, we recommend switching to cargo's own `build-std` feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available [in our Readme](https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo). + ## 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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. From b9f1a16076664e78d0ccb9983242ded922d4c119 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 13:21:34 +0100 Subject: [PATCH 05/15] Add changes for volatile --- content/this-month/2020-12/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 199cb96c..04c4a391 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -62,6 +62,12 @@ In December, we published the following three new releases: Thanks to [@mental32](https://github.com/mental32), [@vinaychandra](https://github.com/vinaychandra), [@tomaka](https://github.com/tomaka), [@haraldh](https://github.com/haraldh), [@tscs37](https://github.com/tscs37), and [@toku-sa-n](https://github.com/toku-sa-n) for their contributions! +### [`volatile`](https://github.com/rust-osdev/volatile) + +The `volatile` crate provides a safe wrapper type for implementing volatile read and write operations. This is useful for accessing memory regions that have side-effects, such as memory-mapped hardware registers or framebuffers. In December, we added to new methods for creating read/write-only `Volatile` instances: + +- [Add methods to restrict access](https://github.com/rust-osdev/volatile/pull/19) (published as `v0.4.3`) + ### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged a small error reporting improvement: From c5511045497e038c6664ef0098a94827deefefd1 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 13:24:01 +0100 Subject: [PATCH 06/15] Add changes for bootimage --- content/this-month/2020-12/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 04c4a391..666ab2b3 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -68,6 +68,12 @@ The `volatile` crate provides a safe wrapper type for implementing volatile read - [Add methods to restrict access](https://github.com/rust-osdev/volatile/pull/19) (published as `v0.4.3`) +### [`bootimage`](https://github.com/rust-osdev/bootimage) + +The `bootimage` tool allows the creation of bootable disk images for `bootloader`-based kernels. It also provides a runner executable for `cargo` to make `cargo run` and `cargo test` work using QEMU. This month, we fixed a nightly breakage: + +- [Fix nightly breakage of doctests in workspaces](https://github.com/rust-osdev/bootimage/pull/69) (published as `v0.10.2`) + ### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild) The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged a small error reporting improvement: From cbd624268aaae408cb21fc9456769f1f143cd41c Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 13:29:30 +0100 Subject: [PATCH 07/15] Add updates for bootloader --- content/this-month/2020-12/index.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 666ab2b3..d624afd0 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -84,6 +84,15 @@ Thanks to [@parasyte](https://github.com/parasyte) for this contribution! Even though we still maintain the `cargo-xbuild` crate, we recommend switching to cargo's own `build-std` feature that is always up-to-date with the latest Rust/Cargo changes. We wrote a short guide on how to switch to it, which is available [in our Readme](https://github.com/rust-osdev/cargo-xbuild#alternative-the-build-std-feature-of-cargo). +### [`bootloader`](https://github.com/rust-osdev/bootloader) + +The `bootloader` crate implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. In December, we merged the following changes: + +- [Document the build process](https://github.com/rust-osdev/bootloader/pull/134) +- [Fix CI after breaking change of Github Actions](https://github.com/rust-osdev/bootloader/compare/530b26f86ae0c7cf8906de0d7f5184bb206bcb7c...d8f7a20bb24e9f1d36f86010e1ce00bdfc51d045) + +Thanks to [@Luis-Hebendanz](https://github.com/Luis-Hebendanz) for their contribution! + ## 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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. From 6f6bfe6e209e019bff860ed23c9279421b1316aa Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Sat, 2 Jan 2021 19:11:08 +0100 Subject: [PATCH 08/15] Add updates for linked-list-allocator --- content/this-month/2020-12/index.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index d624afd0..753b3c92 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -103,6 +103,23 @@ In this section, we describe updates to personal projects that are not directly This month, ... +### [`phil-opp/linked-list-allocator`](https://github.com/phil-opp/linked-list-allocator) + +(Section written by [@phil-opp](https://github.com/phil-opp)) + +The `linked_list_allocator` crate provides a simple heap allocator that is usable on `no_std` systems. It keeps track of free memory blocks by turning them into a linked list data structure. + +In December, the crate received the following updates: + +- [Use new nightly Allocator trait](https://github.com/phil-opp/linked-list-allocator/pull/42) +- [Build on stable without features](https://github.com/phil-opp/linked-list-allocator/pull/43) (published as `v0.8.7`) +- [Fix: do not require alloc crate](https://github.com/phil-opp/linked-list-allocator/pull/44) (published as `v0.8.8`) +- [Don't require nightly for `use_spin` feature](https://github.com/phil-opp/linked-list-allocator/pull/46) (published as `v0.8.9`) +- [Make hole module public for external uses](https://github.com/phil-opp/linked-list-allocator/pull/47) (published as `v0.8.10`) +- [Add new use_spin_nightly feature](https://github.com/phil-opp/linked-list-allocator/pull/49) (published as `v0.8.11`) + +Thanks to [@haraldh](https://github.com/haraldh), [@MarcoCicognani](https://github.com/MarcoCicognani), and [@thalesfragoso](https://github.com/thalesfragoso) for their contributions!. + ### [`lucis-fluxum/ps2-rs`](https://github.com/lucis-fluxum/ps2-rs) (Section written by [@lucis-fluxum](https://github.com/lucis-fluxum)) From a68917897dcfb72b7ff0920df2b3a7eafcfd3493 Mon Sep 17 00:00:00 2001 From: Gabriel Majeri Date: Mon, 4 Jan 2021 12:48:02 +0200 Subject: [PATCH 09/15] Add December updates for the `uefi-rs` project (#35) --- content/this-month/2020-12/index.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 753b3c92..75ae672b 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -93,6 +93,17 @@ The `bootloader` crate implements a custom Rust-based bootloader for easy loadin Thanks to [@Luis-Hebendanz](https://github.com/Luis-Hebendanz) for their contribution! +### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs) + +The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In December, we merged the following changes: + +- [Clarify how new protocols can be defined](https://github.com/rust-osdev/uefi-rs/pull/185) +- [Add support for the device path protocol](https://github.com/rust-osdev/uefi-rs/pull/187) +- [Fix breakage with the latest nightlies](https://github.com/rust-osdev/uefi-rs/pull/188) +- [Publish new versions of the crates](https://github.com/rust-osdev/uefi-rs/pull/189) + +Thanks to [@avirule](https://github.com/avirule) for their contribution! + ## 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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. From ef1d0a248471affa6f0cb2ee17bdc8282d53f4f9 Mon Sep 17 00:00:00 2001 From: Isaac Woods Date: Mon, 4 Jan 2021 15:14:57 +0000 Subject: [PATCH 10/15] Fix typo in December 2020 x86_64 updates --- content/this-month/2020-12/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 75ae672b..090090bd 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -54,7 +54,7 @@ In December, we published the following three new releases: - [Change return type of `read_rip` to `VirtAddr`](https://github.com/rust-osdev/x86_64/pull/216)) - [Make writing the RFLAGS register unsafe](https://github.com/rust-osdev/x86_64/pull/219)) - [Remove `PortReadWrite` trait, which is no longer needed](https://github.com/rust-osdev/x86_64/pull/217)) -- [Relaxe `Sized` requirement for `FrameAllocator` in `Mapper::map_to](https://github.com/rust-osdev/x86_64/pull/204) +- [Relaxe `Sized` requirement for `FrameAllocator` in `Mapper::map_to`](https://github.com/rust-osdev/x86_64/pull/204) #### [`v0.13.1`](https://github.com/rust-osdev/x86_64/commit/4d5058c1a1c3873294b92a628be0bb151d37ca6a) From e325d42790749a290d03cc3a9faa4e3a9961ffd2 Mon Sep 17 00:00:00 2001 From: Isaac Woods Date: Mon, 4 Jan 2021 15:38:32 +0000 Subject: [PATCH 11/15] December 2020: add changes for ACPI crates --- content/this-month/2020-12/index.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 090090bd..3a248084 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -6,6 +6,7 @@ date = 0000-01-01 month = "December 2020" authors = [ "phil-opp", + "IsaacWoods", # add yourself here ] +++ @@ -104,6 +105,18 @@ The `uefi` crate provides safe and performant wrappers for [UEFI](https://en.wik Thanks to [@avirule](https://github.com/avirule) for their contribution! +### [`acpi`](https://github.com/rust-osdev/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. In December, we: + +- [Exposed the Power Management Timer, part of the ACPI hardware platform](https://github.com/rust-osdev/acpi/pull/83). Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution! +- [Improved the behaviour of the BIOS RSDP search algorithm](https://github.com/rust-osdev/acpi/issues/79). If + you're coming across the same problem as the reporter, try updating to `rsdp v1.1.0` or `acpi v2.2.0`. +- [Improved codegen for the `choice!` macro](https://github.com/rust-osdev/acpi/commit/47c4aec17e7995beeaad004447505ab08b84578a). This fixes limitations in how large parsers can get before they break `rustc`'s type limit. + The new version allows better ergonomics, but also generates much less work for the type checker and so speeds up the compilation of the `aml` crate. +- Fixed a few bugs in the handling of `DefBuffer` and `DefPackage` objects ([1](https://github.com/rust-osdev/acpi/commit/4286dfc6a9f683dc652cd019bbc6d018e96e8359), [2](https://github.com/rust-osdev/acpi/commit/0c64768a9eb415a0a9081adf0ebec2ff3aa50503), [3](https://github.com/rust-osdev/acpi/commit/6146d0fa2d22a4191f5d13bd653f8d45c1edb796)). + ## 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](https://github.com/rust-osdev/homepage/pulls) with the updates of your OS project for the next post. From ad84e70147b94e8c1a20f5427e357c3f41faf666 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 7 Jan 2021 18:45:40 +0100 Subject: [PATCH 12/15] Add a comment form --- content/this-month/2020-12/index.md | 2 +- templates/page.html | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/content/this-month/2020-12/index.md b/content/this-month/2020-12/index.md index 3a248084..832683f4 100644 --- a/content/this-month/2020-12/index.md +++ b/content/this-month/2020-12/index.md @@ -15,7 +15,7 @@ Welcome to a new issue of _"This Month in Rust OSDev"_. In these posts, we will -This series is openly developed [on GitHub](https://github.com/rust-osdev/homepage/). 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](https://github.com/rust-osdev/homepage/issues/new). +This series is openly developed [on GitHub](https://github.com/rust-osdev/homepage/). 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](https://github.com/rust-osdev/homepage/issues/new) or using our new [_comment form_](#comment-form) at the bottom of this page.