Добро пожаловать в Bare Metal Rust
Это самостоятельный однодневный курс о bare-metal Rust, рассчитанный на людей, знакомых с основами Rust (возможно, после прохождения курса Comprehensive Rust), и желательно также имеющих опыт bare-metal программирования на каком-либо другом языке, например C.
Сегодня мы поговорим о «bare-metal» Rust: запуске кода Rust без операционной системы под ним. Это будет разделено на несколько частей:
- Что такое
no_stdRust? - Написание прошивки для микроконтроллеров.
- Написание кода загрузчика или ядра для прикладных процессоров.
- Некоторые полезные крейты для разработки на bare-metal Rust.
Для части курса о микроконтроллерах в качестве примера мы будем использовать BBC micro:bit v2. Это отладочная плата на основе микроконтроллера Nordic nRF52833 с несколькими светодиодами и кнопками, акселерометром и компасом, подключёнными по 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». Если вы используете Linux-среду на Chromebook, нужно открыть доступ к USB-устройству для Linux через chrome://os-settings/crostini/sharedUsbDevices.
В 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