ベアメタル Rust へようこそ

これはベアメタル Rust に関する単独の 1 日コースであり、Rust の基礎 (おそらく Comprehensive Rust コースを修了して)に慣れていて、できれば C などの他の言語でベアメタルプログラミングの経験もある人を対象として います。

今日は「ベアメタル」Rust、つまりその下に OS がない状態で Rust コードを 実行することについて話します。内容はいくつかのパートに分かれています:

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

このコースのマイクロコントローラーのパートでは、 BBC micro:bit v2 を例として使用します。これは、 Nordic nRF52833 マイクロコントローラーをベースにした 開発ボード で、いくつかの LED とボタン、 I2C 接続の加速度計とコンパス、そしてオンボードの SWD デバッガーを備えて います。

まず、後で必要になるいくつかのツールをインストールしましょう。gLinux または Debian の場合:

sudo apt install gdb-multiarch libudev-dev picocom pkg-config qemu-system-arm build-essential
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

デバイスが利用可能であれば、lsusb の出力に “NXP ARM mbed” と表示される はずです。Chromebook 上の Linux 環境を使用している場合は、 chrome://os-settings/crostini/sharedUsbDevices を介して USB デバイスを Linux と共有する必要があります。

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