به Bare Metal Rust خوش آمدید

این یک دوره مستقل یک روزه در مورد bare-metal Rust است که با هدف افرادی که با اصول Rust آشنا هستند (شاید از اتمام دوره جامع Rust) و در حالت ایده آل نیز تجربه برنامه‌نویسی bare-metal به زبان دیگری را دارند، مانند C می‌باشد.

امروز ما در مورد'bare-metal' Rust صحبت خواهیم کرد: اجرای کد Rust بدون سیستم‌عامل در ادامه به چند بخش تقسیم خواهد شد:

  • این no_std Rust چیست؟
  • نوشتنfirmware برای میکروکنترلرها.
  • نوشتن کد bootloader / kernel برای پردازنده‌های برنامه.
  • برخی از crateهای مفید برای توسعه bare-metal Rust.

برای بخش میکروکنترلر دوره ما از BBC micro:bit v2 به عنوان مثال استفاده خواهیم کرد. این یک برد توسعه مبتنی بر میکروکنترلر Nordic nRF52833 با چند LED و دکمه، شتاب‌سنج و قطب‌نما متصل به I2C و یک دیباگر SWD روی برد است.

برای شروع، ابزارهایی را که بعداً به آنها نیاز خواهیم داشت نصب کنید. در لینوکس یا دبیان:

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=="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
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