Welcome to Bare Metal Rust
์ด ๊ณผ์ ์ Rust์ ๋ํด ์ด๋์ ๋ ๊ฒฝํ์ด ์๊ณ (์๋ง๋ Comprehensive Rust ๊ณผ์ ์ ํตํด) C์ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด๋ก bare-metal ํ๋ก๊ทธ๋๋ฐ์ ํด ๋ณธ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ bare-metal Rust์ ๊ดํ ๋ ๋ฆฝ์ ์ธ 1์ผ ๊ณผ์ ์ ๋๋ค.
์ค๋์ OS๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Rust ์ฝ๋๋ฅผ ์คํํ๋ โbare-metalโ Rust์ ๊ดํด ์์๋ด ๋๋ค. ๋ณธ ๊ฐ์์ ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
no_std
Rust๋ ๋ฌด์์ธ๊ฐ์?- ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ์ฉ ํ์จ์ด ์์ฑ
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก์ธ์๋ฅผ ์ํ ๋ถํธ๋ก๋ / ์ปค๋ ์ฝ๋ ์์ฑ
- bare-metal Rust ๊ฐ๋ฐ์ ์ํ ์ ์ฉํ ํฌ๋ ์ดํธ
์ด ๊ฐ์์์๋ BBC micro:bit v2๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ Nordic nRF51822 ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ์ ๊ธฐ๋ฐํ ๊ฐ๋ฐ ๋ณด๋๋ก์จ, LED์ ๋ฒํผ, 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 cargo-embed
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 cargo-embed