ベアメタルRustへようこそ
こちらはベアメタルRustに関する独立した1日コースです。対象としているのは、Rustの基本的な部分に関しては習得済みな人で(例えば、本講座で)、Cなどの他の言語でベアメタル開発の経験があると理想的です。
今日、取り扱うのは、ベアメタルRustです。すなわち、OSなしでRustのコードを実行します。この章は以下のような構成になります:
no_std
Rustとは?- マイクロコントローラ向けのファームウェア開発。
- アプリケーションプロセッサ向けのブートローダ/カーネル開発。
- ベアメタルRust開発に役立つクレートの紹介。
マイクロコントローラ向けの学習ではBBC micro:bit v2を題材として使います。これは、Nordic nRF51822マイコンベースの開発ボード で、いくつかのLEDやボタンスイッチ、I2C接続の加速度センサやコンパス、そしてオンボードSWDデバッガを搭載しています。
まずはじめに、後ほど必要となるいくつかのツールをインストールします。gLinuxまたはDebianの場合は以下のようになります:
sudo apt install gcc-aarch64-linux-gnu gdb-multiarch libudev-dev picocom pkg-config qemu-system-arm
rustup update
rustup target add aarch64-unknown-none thumbv7em-none-eabihf
rustup component add llvm-tools-preview
cargo install cargo-binutils cargo-embed
さらに、plugdev
グループにmicro:bitプログラム用デバイスへのアクセスを付与します:
echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="0d28", MODE="0664", GROUP="plugdev"' |\
sudo tee /etc/udev/rules.d/50-microbit.rules
sudo udevadm control --reload-rules
MacOSの場合は以下のようになります:
xcode-select --install
brew install gdb picocom qemu
brew install --cask gcc-aarch64-embedded
rustup update
rustup target add aarch64-unknown-none thumbv7em-none-eabihf
rustup component add llvm-tools-preview
cargo install cargo-binutils cargo-embed