Rustで組込みプログラミングや自作OS作成をするには

「Rustで始める自作組込みOS入門」という本というかドキュメントの公開を始めました。

これは以前からつくっていたErkOSという自作OSでの経験を元にして、どうやったらRustで自作組込みOSの最初の一歩を踏み出せるか、というものをドキュメントにしたものです。
このドキュメントはこの前の技術書展の告知が来たあたりから構想を練っていて、すきま時間にちまちまと書き進めていたものですが、とりあえず、プロセスの切り替えっぽいところまでの説明を終えることができたので公開しました。

組込みでRustをやる話や自作OSを書く話というのは先駆者がたくさんいて、僕自身もそれらの資料を参考にしつつ書き進めて来ました。
一応、それらの既存のものとは差別化はしているつもりではあるものの、既存のものを完全に上回るというものではないです。内容もまだまだ足りない。

以前、RustでOSを書くプロジェクトもろもろでいくつかOSを書く際に参考になりそうなプロジェクトをまとめましたが、情報も古くなってきたので、改めて参考になるプロジェクトを紹介していきたいと思います。

Redox

RustでデスクトップOSを書くというプロジェクト。完成度はかなり高く、GUIツールなどもすべてRustで書き直す、とかなり本格的。
最近のブログポストによると実際のハードウェアで動くための課題はかなりクリアできているようで、
今はコンパイラそのものを改良してRedox上でRedoxをビルドすることを目指しているらしい。

このRedoxプロジェクトから派生したクレートも役に立つものが多い

Tock

Rustで書かれたCortex-M向けの組込みOS。SOSPで論文を出していいたりとOSそのもの構造も興味深い。
かつてはRustコンパイラに手を加えたりするものが主流でしたが、このTockはnightlyコンパイラだけでコンパイルできるのも特徴。

最近、Googleが発表したOpenSKというUSBのセキュリティキーのオープンな実装を発表したが、そこで使われているのもこのTockです。

Rust Embeddedグループ

Rustにはいくつかの公式ワーキンググループがあって、そのうちの1つがこのEmbeddedワーキンググループです。
各種ドキュメントや組込み開発で使えるクレートを公開しています。
主にCortex-MやCortex-A、RISC-Vをターゲットにしています。

The Embedonomiconは一からベアメタルプログラミングするための手引になっていてとても参考になります。

RaspberryPiを使ったOS開発のチュートリアルはGICv2にも対応しているようなので、Cortex-Aで自作OSしたい人は参考になるかもしれません。

OS開発ということにフォーカスしているわけではないですが、個々のコンポーネントを書く際はかなり参考になります。

Rust OSDev

非公式グループですが、OSを書く、ということに焦点を置いたグループです。
こちらはx86系のアーキテクチャをたーゲットにしています。

UEFIのアプリケーションを書くのに便利なuefiクレートなど、x86系の自作OSに役立つクレートを多く出しています。

特にこのグループのメンバーの一人であるPhilippさんの自作OSブログは内容が充実していて、自作OSでのテストの書き方やヒープアロケータのデザインと実装といった他のアーキテクチャでも使える項目の解説も充実しています。

日本語の資料

今まで紹介したものはほとんどが英語のものでしたが、日本語のリソースとして@LDScellさんがEmbeddedグループのドキュメントの和訳を公開している他、
「組込み/ベアメタルRustクックブック」という資料を公開しています。