他のプロジェクト

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