rust-osdev 組織が提供する、Rust でのベアメタル OS 開発を支える crate/ツール群。[[concepts/blog-os-rust-kernel]](Writing an OS in Rust)で多用される。[[concepts/bare-metal-rust-freestanding]] の上で動く。
bootimage
github.com/rust-osdev/bootimage。Rust 製カーネルから起動可能なディスクイメージを生成するツール。- ブートローダを自作するのは大抵割に合わないため、これでブート部分を肩代わりする。
bootloader
github.com/rust-osdev/bootloader。experimental な pure-Rust の x86 ブートローダ。- 起動時に CPU をリアルモード(16bit)→ プロテクトモード(32bit)→ ロングモード(64bit)へ遷移させ、ページングを設定する。BIOS 系(先発 BIOS / 後発 UEFI)。
- 既にページングとガードページを設定済みなので、カーネルはこれを修正してページテーブルを操作する(
[[concepts/virtual-memory-mapping-strategies]])。
x86_64 crate
- x86-64 の低レベル構造を型安全に扱うライブラリ。記事中で「偉大」と評される。
- 提供物:
structures::paging(PageTableEntry/PageTableFlags/PhysFrame/Translate)、structures::idt(IDT)、registers::segmentation::CS、instructions::tables::load_tss、instructions::interrupts::int3()など。 [[concepts/x86-interrupt-handling]]と[[concepts/virtual-memory-mapping-strategies]]の実装で IDT/GDT/TSS とページテーブルを操作する API を担う。
周辺
- 実行・検証は QEMU(page fault のハンドラ未登録で boot ループしチカチカする現象が有名)。
- 関連 OS 実装:
[[entities/xv6]]、[[entities/redox-slab-allocator]](Redox OS)。