ベアメタルRustへようこそ

こちらはベアメタルRustに関する独立した1日コースです。対象としているのは、Rustの基本的な部分に関しては習得済みな人で(例えば、本講座で)、Cなどの他の言語でベアメタル開発の経験があると理想的です。

今日、取り扱うのは、ベアメタルRustです。すなわち、OSなしでRustのコードを実行します。この章は以下のような構成になります:

  • no_std Rustとは?
  • マイクロコントローラ向けのファームウェア開発。
  • アプリケーションプロセッサ向けのブートローダ/カーネル開発。
  • ベアメタルRust開発に役立つクレートの紹介。

For the microcontroller part of the course we will use the BBC micro:bit v2 as an example. It's a development board based on the Nordic nRF52833 microcontroller with some LEDs and buttons, an I2C-connected accelerometer and compass, and an on-board SWD debugger.

まずはじめに、後ほど必要となるいくつかのツールをインストールします。gLinuxまたはDebianの場合は以下のようになります:

sudo apt install 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
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh

さらに、plugdevグループにmicro:bitプログラム用デバイスへのアクセスを付与します:

echo 'SUBSYSTEM=="hidraw", ATTRS{idVendor}=="0d28", MODE="0660", GROUP="logindev", TAG+="uaccess"' |\
  sudo tee /etc/udev/rules.d/50-microbit.rules
sudo udevadm control --reload-rules

MacOSの場合は以下のようになります:

xcode-select --install
brew install gdb picocom qemu
rustup update
rustup target add aarch64-unknown-none thumbv7em-none-eabihf
rustup component add llvm-tools-preview
cargo install cargo-binutils
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh