The embedonomicon
The embedonomicon は、#![no_std] アプリケーションをゼロから作成するプロセスと、
Cortex-M マイクロコントローラ向けのアーキテクチャ固有の機能を反復的に構築していく
プロセスを順を追って説明します。
目的
この本を読むことで、以下を学べます
-
#![no_std]アプリケーションを構築する方法。これは#![no_std]ライブラリを構築するよりもはるかに複雑です。というのも、対象システムでは OS が 動作していない可能性があり(あるいは OS 自体を構築しようとしているかもしれません)、 またそのプログラムが対象環境で動作する唯一のプロセス(あるいは最初のプロセス)である 可能性があるためです。 その場合、プログラムを対象システム向けにカスタマイズする必要があるかもしれません。 -
Rust プログラムのメモリレイアウトを細かく制御するためのテクニック。リンカ、 リンカスクリプト、および Rust プログラムの ABI をある程度制御できる Rust の機能に ついて学びます。
-
静的にオーバーライドできるデフォルト機能を実装するテクニック(ランタイムコストなし)。
対象読者
この本は主に次の 2 つの読者層を対象としています:
-
エコシステムがまだサポートしていないアーキテクチャ(たとえば Rust 1.28 時点の Cortex-R)や、Rust がサポートを獲得したばかりのアーキテクチャ(たとえば将来的には Xtensa かもしれません)に対して、ベアメタルサポートを立ち上げたい人。
-
cortex-m-rt、msp430-rt、riscv-rtのような ランタイム クレートの 一風変わった実装に興味がある人。
翻訳
この本は、有志のボランティアによって翻訳されています。ここにあなたの 翻訳を掲載したい場合は、それを追加する PR を作成してください。
要件
この本は自己完結しています。読者は Cortex-M アーキテクチャに精通している 必要はなく、Cortex-M マイクロコントローラにアクセスできる必要もありません – この 本に含まれる例はすべて QEMU でテストできます。ただし、この本の例を実行して確認するには、 以下のツールをインストールする必要があります:
-
この本のすべてのコードは 2024 エディションを使用しています。2024 の機能や イディオムに慣れていない場合は、
edition guideを確認してください。 -
ARM Cortex-M コンパイルをサポートする Rust 1.89 以降のツールチェーン。
-
cargo-binutils。v0.1.4 以降。 -
ARM エミュレーションをサポートする QEMU。
qemu-system-armプログラムが コンピュータにインストールされている必要があります。 -
ARM サポート付きの GDB。
セットアップ例
すべての OS に共通の手順
$ # Rust ツールチェーン
$ # ゼロから始める場合は、https://rustup.rs/ から rustup を入手してください
$ rustup default stable
$ # ツールチェーンはこれより新しい必要があります
$ rustc -V
rustc 1.89.0 (29483883e 2025-08-04)
$ rustup target add thumbv7m-none-eabi
$ # cargo-binutils
$ cargo install cargo-binutils
$ rustup component add llvm-tools
macOS
$ # arm-none-eabi-gdb
$ # 最初に `brew tap Caskroom/tap` を実行する必要があるかもしれません
$ brew install --cask gcc-arm-embedded
$ # QEMU
$ brew install qemu
Ubuntu 16.04
$ # arm-none-eabi-gdb
$ sudo apt install gdb-arm-none-eabi
$ # QEMU
$ sudo apt install qemu-system-arm
Ubuntu 18.04 (またはそれ以降) または Debian
$ # gdb-multiarch -- gdb を起動したいときは `gdb-multiarch` を使用します
$ sudo apt install gdb-multiarch
$ # QEMU
$ sudo apt install qemu-system-arm
Windows
-
arm-none-eabi-gdb。 GNU Arm Embedded Toolchain には GDB が含まれています。
ARM からツールチェーンバンドルをインストールする (任意の手順) (Ubuntu 18.04 でテスト済み)
- 2018 年後半に Cortex-M マイクロコントローラ向けで GCC’s linker to LLD への切り替えが行われたため、gcc-arm-none-eabi はもはや 不要です。 それでもこのツールチェーンを使用したい場合は、 こちら からインストールし、以下の手順に従ってください:
$ tar xvjf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2
$ mv gcc-arm-none-eabi-<version_downloaded> <your_desired_path> # 任意
$ export PATH=${PATH}:<path_to_arm_none_eabi_folder>/bin # 永続化するには、この行を .bashrc に追加します