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::CSinstructions::tables::load_tssinstructions::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)。