Ласкаво просимо до Rust на голому залізі

Це окремий одноденний курс про Rust на голому залізі, призначений для людей, які знайомі з основами Rust (можливо, після завершення комплексного курсу Rust), а в ідеалі також мають певний досвід програмування на голому залізі якоюсь іншою мовою, такою як C.

Сьогодні ми поговоримо про Rust на 'голому залізі': запуск коду Rust без операційної системи під нами. Цей розділ буде розділено на кілька частин:

  • Що таке no_std Rust?
  • Написання мікропрограм для мікроконтролерів.
  • Написання коду завантажувача/ядра для прикладних процесорів.
  • Кілька корисних крейтів для розробки Rust на голому залізі.

Для частини курсу, присвяченої мікроконтролеру, ми використаємо BBC micro:bit v2 як приклад. Це плата розробки на основі мікроконтролера Nordic nRF52833 із деякими світлодіодами та кнопками, акселерометром і компасом, підключеними до 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
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=="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
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/probe-rs/probe-rs/releases/latest/download/probe-rs-tools-installer.sh | sh