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