Rust のプラン 9
R9 は、Plan9 カーネルを Rust で再実装したものです。これは、オリジナルの Plan 9 ソース コードからインスピレーションを得ているだけでなく、多くの点でそこから派生しています。
カーネルを構築するには、 cargo
とxtask
パターンを使用します。
x86_64 用の r9 をビルドするには、便利な場所に git リポジトリのクローンを作成していることを前提としています。次に、トップレベルのディレクトリに移動し、 cargo xtask build --arch x86-64
実行します。
aarch64 用にビルドするには、 cargo xtask build --arch aarch64
を実行します (現在、Raspberry Pi 3 のみがサポートされています)。
他にも便利なxtask
サブコマンドがあります。利用可能な内容を確認するには、 cargo xtask help
を実行します。
現時点では、r9 は自己ホストではありません。
cargo xtask dist
cargo xtask qemu
dist には、 llvm-objcopy
が必要です。これは Rust ツールチェーン パスに存在すると予想されます。以下を実行してインストールできます。
rustup component add llvm-tools
No such file or directory (os error 2)
メッセージが表示された場合は、rust ツールチェーンとは別にllvm
インストールし、次のように設定します。
OBJCOPY=$(which llvm-objcopy) cargo xtask qemukvm
No such file or directory (os error 2)
メッセージが続く場合は、 qemu
またはqemu-kvm
がインストールされていること、およびqemu-system-x86_64
バイナリがパス (aarch64 の場合はqemu-system-aarch64
) にあることを確認してください。
R9 は、サポートされているさまざまなアーキテクチャの qemu を使用して実行できます。
アーチ | プラットフォーム | コマンドライン |
---|---|---|
aarch64 | ラスピ3b | カーゴ xtask qemu --arch aarch64 --verbose |
aarch64 | ラスピ4b | カーゴ xtask qemu --arch aarch64 --config raspi4b --verbose |
x86-64 | q35 | カーゴ xtask qemu --arch x86-64 --verbose |
x86-64 (kvm あり) | q35 | カーゴ xtask qemu --arch x86-64 --kvm --verbose |
リスカ | 仮想 | カーゴ xtask qemu --arch riscv64 --verbose |
R9 は多かれ少なかれ次のハードウェアで実行されています。
TFTP サーバーをセットアップできると仮定し (幸運なことに、信じられないほど面倒ですが、それだけの価値があるため、dnsmasq は時々機能します)、ネットブート ディレクトリの場所を仮定すると、次のコマンドを使用してバイナリをビルドしてコピーできます。
cargo xtask dist --arch aarch64 --verbose && cp target/aarch64-unknown-none-elf/debug/aarch64-qemu.gz ../netboot/kernel8.img
これにより、圧縮されたバイナリがコピーされるため、ネットワーク経由でコピーする方がはるかに高速になります。
Raspberry Pi ファームウェアは、カーネルの前にconfig.txt
をロードします。ここでは、使用する UART などを設定できます。 miniuartを使用するために以下の内容を設定します。
enable_uart=1
core_freq_min=500