The embedonomicon
embedonomiconは、#![no_std]
アプリケーションをスクラッチから作成するプロセスと、
Cortex-Mマイクロコントローラ向けにアーキテクチャ固有の機能を作るイテレーティブなプロセスを案内します。
目的
本書を読むことで、次のことを学べます。
#[no_std]
アプリケーションのビルド方法。これは、#![no_std]
ライブラリをビルドするより、はるかに複雑です。 なぜなら、ターゲットシステムではOSが動いていないからです(もしくは、OSを作ろうとしているかもしれません!)。 そして、プログラムは、ターゲット上で動作する唯一(もしくは、最初の1つ)のプロセスになります。 この場合、プログラムは、ターゲットシステム向けにカスタマイズが必要です。
- Rustプログラムのメモリレイアウトを細かく制御するためのコツ。 リンカ、リンカスクリプト、および、RustプログラムのABIの一部を制御できるようにするRustの機能について学びます。
- (実行時にコストがかからない)静的オーバーライド可能なデフォルト機能を実装する秘訣。
対象読者
本書は主に、2つの読者を対象としています。
- エコシステムがまだサポートしていないアーキテクチャ(例えば、Rust 1.28におけるCortex-R)や、 Rustがサポートを始めたばかりのアーキテクチャ(例えば、Extensaは将来サポートされるかもしれません)に対して、 ベアメタルでのブートを提供したい人々
cortex-m-rt
、msp430-rt
、riscv-rt
のようなランタイムクレートの珍しい実装方法について興味がある人々。
要求事項
本書は、自己完結しています。読者は、Cortex-Mアーキテクチャについて詳しかったり、Cortex-Mマイクロコントローラを持っている必要はありません。 本書内の例は、全てQEMU上でテストできます。しかしながら、本書内の例を実行したり調査するため、次のツールをインストールする必要があります。
- 本書内の全コードは、2018エディションを使います。2018エディションの機能やイディオムを知らない場合は、
エディションガイド
を確認して下さい。
- Rust 1.31以上のツールチェインとARM Cortex-Mコンパイルのサポート
-
cargo-binutils
。v0.1.4以上。
- ARMエミュレーションをサポートしているQEMU。
qemu-system-arm
がインストールされていなければなりません。
- ARMサポートのGDB。
設定例
全てのOSに共通する手順です。
$ # Rustツールチェイン
$ # 1からやる場合、https://rustup.rs/からrustupを入手して下さい
$ rustup default stable
$ # ツールチェインは、これより新しくなければなりません
$ rustc -V
rustc 1.31.0 (abe02cefd 2018-12-04)
$ rustup target add thumbv7m-none-eabi
$ # cargo-binutils
$ cargo install cargo-binutils
$ rustup component add llvm-tools-preview
macOS
$ # arm-none-eabi-gdb
$ # 最初に`brew tap Caskroom/tap`を実行しなければならないかもしれません
$ brew cask install 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 or Debian
$ # gdb-multiarch。gdbを起動する時は、`gdb-multiarch`を使って下さい
$ sudo apt install gdb-multiarch
$ # QEMU
$ sudo apt install qemu-system-arm
Windows
-
arm-none-eabi-gdb。 GDBを含むGNU Arm Embeddedツールチェイン
(オプションのステップ)(Ubuntu 18.04でテスト済み)ARMからツールチェイン一式をインストール
- 最近の2018では、Cortex-Mマイクロコントローラ向けのリンカが、GCCのリンカから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に追加します。