- oreboot
- "coreboot without the C".
- アーキテクチャはx86、aarch64ならびにRISC-Vをサポート。
- 自身で多くのドライバを抱えずにLinuxBootに依存。
- Rust RaspberryPi OS のチュートリアル
- Initialisation, UART driver, simple bootloader, JTAG, exception levels, exception handling, page tables.
- キャッシュメンテナンスとRustの初期化に関してちょっと疑わしいところがあるので、製品コードで真似するには必ずしも良い例ではありません。
cargo-call-stack
- RaspberryPi OS チュートリアルはMMUやキャッシュを有効化する前にRustコードを実行しています。これにより、例えばスタックメモリをreadしたりwriteしたりすることになります。しかし:
- MMUとキャッシュを有効化していないと、アラインされていないアクセスはフォールトを引き起こします。そのチュートリアルでは、コンパイラがアラインされていないアクセスを生成しない
+strict-align
オプションをセットするaarch64-unknown-none
をターゲットとしてビルドしているので大丈夫なはずですが、一般的には大丈夫とは限りません。
- もしVM上で実行していたとすると、キャッシュコヒーレンシーの問題を起こすことがあります。問題なのはVMがキャッシュを無効化したまま直接メモリにアクセスしているのに対し、ホストは同じメモリに対してキャッシュ可能なエイリアスを持ってしまうということです。ホストが仮に明示的にメモリにアクセスしないとしても、投機的なアクセスによりキャッシュフィルが起きることがあり、そうなるとVMかホストのどちらかによる変更が失われてしまいます。この(ハイパーバイザなしで直接ハードウェアで実行する)場合には問題にはなりませんが、一般的には良くないパターンです。