Skip to content

Commit 9b9baa8

Browse files
committed
Add updates for remaining rust-osdev projects
1 parent 2d222eb commit 9b9baa8

File tree

1 file changed

+50
-6
lines changed

1 file changed

+50
-6
lines changed

content/this-month/2020-09.md

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,6 @@ In this section, we give an overview of notable changes to the projects hosted u
3131

3232
[`rust-osdev`]: https://github.com/rust-osdev/about
3333

34-
### [`x86_64`](https://github.com/rust-osdev/x86_64)
35-
36-
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.
37-
38-
In September, …
39-
4034
### [`acpi`](https://github.com/rust-osdev/acpi)
4135
<span class="gray">(Section written by [@IsaacWoods](https://github.com/IsaacWoods))</span>
4236
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. Lots of work happened this month:
@@ -57,6 +51,32 @@ The `acpi` repository contains crates for parsing the ACPI tables – data struc
5751
is not supported. All types are reexported by the `acpi` crate, so users can access the same functionality from
5852
the main library.
5953

54+
### [`x86_64`](https://github.com/rust-osdev/x86_64)
55+
56+
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.
57+
58+
The crate received the following updates in September:
59+
60+
- [Add a function for the `nop` instruction](https://github.com/rust-osdev/x86_64/pull/174) <span class="gray">(published as `v0.11.4`)</span>
61+
- [Don't rely on promotion of `PageTableEntry::new` inside a `const fn`](https://github.com/rust-osdev/x86_64/pull/175) <span class="gray">(published as `v0.11.5`)</span>
62+
- Thanks a lot to [@ecstatic-morse](https://github.com/ecstatic-morse) and the Rust compiler team for preventing an upcoming breakage in our crate!
63+
- [Add `VirtAddr::is_null`](https://github.com/rust-osdev/x86_64/pull/180) <span class="gray">(published as `v0.11.8`)</span>
64+
- [Decouple instructions into a separate feature flag](https://github.com/rust-osdev/x86_64/pull/179) <span class="gray">(published as `v0.12.0`)</span>
65+
- See the [corresponding changelog entry](https://github.com/rust-osdev/x86_64/blob/master/Changelog.md#0120--2020-09-23) for a summary of the breaking changes introduced by this pull request.
66+
- [Fix build error on latest nightly](https://github.com/rust-osdev/x86_64/pull/182) caused by new `const_mut_refs` feature gate <span class="gray">(published as `v0.12.1`)</span>
67+
- [Add remaining GDT flags](https://github.com/rust-osdev/x86_64/pull/181), which also makes our GDT descriptors compatible with the `syscall`/`sysenter` instructions
68+
- [Fix another build error on latest nightly](https://github.com/rust-osdev/x86_64/pull/186), this time caused by the new `const_fn_fn_ptr_basics` feature gate <span class="gray">(published together with [#181](https://github.com/rust-osdev/x86_64/pull/181) as `v0.12.2`)</span>
69+
70+
Thanks to [@ecstatic-morse](https://github.com/ecstatic-morse), [@toku-sa-n](https://github.com/toku-sa-n), [@h33p](https://github.com/h33p), and [@josephlr](https://github.com/josephlr) for their contributions!
71+
72+
We would also like to welcome [@josephlr](https://github.com/josephlr) to our `x86_64` review and maintainance team!
73+
74+
### [`volatile`](https://github.com/rust-osdev/volatile)
75+
76+
The `volatile` crate provides safe wrapper types for implementing volatile read and write operations. This month, we published version `0.4.0`, which [completely rewrites the crate based on reference values](https://github.com/rust-osdev/volatile/pull/13). Instead of wrapping the target value directly as e.g. `Volatile<u32>`, the new implementation works by wrapping reference types such as `Volatile<&mut u32>`. See [our completely revamped documentation](https://docs.rs/volatile/0.4.1/volatile/struct.Volatile.html) for more details.
77+
78+
The main advantage of the new reference-based implementation is that it is now possible to work with volatile arrays and slices, at least on nightly Rust. Through the [`index`](https://docs.rs/volatile/0.4.1/volatile/struct.Volatile.html#method.index) and [`index_mut`](https://docs.rs/volatile/0.4.1/volatile/struct.Volatile.html#method.index_mut) methods it is possible to create sub-slices, which can then be read and written efficiently through the [`copy_into_slice`](https://docs.rs/volatile/0.4.1/volatile/struct.Volatile.html#method.copy_into_slice) and [`copy_from_slice`](https://docs.rs/volatile/0.4.1/volatile/struct.Volatile.html#method.copy_from_slice) methods. All these operations perform volatile memory accesses, so that the compiler won't optimize them away.
79+
6080
### [`pci_types`](https://github.com/rust-osdev/pci_types)
6181
<span class="gray">(Section written by [@IsaacWoods](https://github.com/IsaacWoods))</span>
6282
`pci_types` is a new library in the Rust OSDev organisation that provides types for accessing and configuring PCI
@@ -67,6 +87,30 @@ allows the library to access the PCIe configuration space in whichever way the p
6787

6888
Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their [contribution](https://github.com/rust-osdev/pci_types/pull/1)!
6989

90+
### [`uefi-rs`](https://github.com/rust-osdev/uefi-rs)
91+
92+
The `uefi-rs` crate provides safe and performant wrappers for [UEFI](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface), the successor to the BIOS. In September, the crate was [updated to Rust's new inline assembly](https://github.com/rust-osdev/uefi-rs/pull/167) implemenation. We also published version `0.6.0` of the crate, including all the improvements added in the past two months.
93+
94+
Thanks to [@toku-sa-n](https://github.com/toku-sa-n) for their contribution!
95+
96+
### [`bootloader`](https://github.com/rust-osdev/bootloader)
97+
98+
The [`bootloader` crate](https://github.com/rust-osdev/bootloader) implements a custom Rust-based bootloader for easy loading of 64-bit ELF executables. This month, we published versions `0.9.9` to `0.9.11` to fix build errors on the latest nightlies.
99+
100+
We also made some more progress on the rewrite with UEFI support. It now [passes additional framebuffer information](https://github.com/rust-osdev/bootloader/commit/3237429457d3df58080fa284d9c2b7138e3fff3a) and the [address of the RSDP structure of ACPI](https://github.com/rust-osdev/bootloader/commit/694d3139fe24bce0184da3bb9096e6540ee1fa3d) in the boot info. (We later updated the RSDP code to [use the new `rsdp` crate](https://github.com/rust-osdev/bootloader/commit/cb8345bd3c45fc3c56a631a3b416137c45f828f9)). The bootloader also gained support for [setting up a recursive page table mapping](https://github.com/rust-osdev/bootloader/commit/34a5da852ba8f6b0abfafb5c5a68adc4cae638fa), which makes it almost feature-equivalent with the current implementation. There are still a few things missings, but it should be ready to be published soon.
101+
102+
### [`cargo-xbuild`](https://github.com/rust-osdev/cargo-xbuild)
103+
104+
The `cargo-xbuild` project provides `cargo` command wrappers to cross-compile the sysroot crates `core` and `alloc`. This month, we merged some maintainance updates to increase platform compatibility:
105+
106+
- [Remove fs2 dependency for broader platform support](https://github.com/rust-osdev/cargo-xbuild/pull/91) <span class="gray">(published as `v0.6.1`)</span>
107+
108+
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).
109+
110+
### [`uart_16550`](https://github.com/rust-osdev/uart_16550)
111+
112+
The `uart_16550` crate provides basic support for serial port I/O for 16550-compatible UARTs. Like the `x86_64` and `bootloader` crates, this crate received some dependency updates this month to fix nightly breakage. In the process, we released versions `0.2.8` to `0.2.10`. Since none of these versions are semver-breaking, a normal `cargo update` should suffice to update to the latest version.
113+
70114
## Personal Projects
71115

72116
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.

0 commit comments

Comments
 (0)