ARM Cortex-M33 ๋ง์ดํฌ๋ก์ปจํธ๋กค๋ฌ๋ฅผ ์ํ Rust ์๋ฒ ๋๋ ์์คํ ํ๋ก์ ํธ์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ SungDB MCP๋ฅผ ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์๊ณผ ๋๋ฒ๊น ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค.
- ARM Cortex-M33์์ Rust ์ธ์ด๋ก ์๋ฒ ๋๋ ์์คํ ๊ตฌํ
- Hello World ์ถ๋ ฅ ๋ฐ ๊ธฐ๋ณธ์ ์ธ ์์คํ ๊ธฐ๋ฅ ๊ตฌํ
- Context Switch ์๋ฎฌ๋ ์ด์
- ํด๋ก ์ ์ด ๋ฐ ์ํ ์ฒดํฌ ๊ธฐ๋ฅ
- SungDB MCP๋ฅผ ํ์ฉํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๋ถ์ ๋ฐ ๊ฒ์ฆ
- Semihosting์ ํตํ ์ฝ์ ์ถ๋ ฅ
- ์์คํ ๋ฒ์ ๋ฐ ์ํ ์ ๋ณด ํ์
- ์คํ ๋ณ์ vs ์ ์ญ ๋ณ์ ์์น ๋ถ์
- ํจ์ ์ฃผ์ (TEXT ์์ญ) ํ์ธ
- ์์ ๋ฐ์ดํฐ (RODATA ์์ญ) ์์น ์ถ์
- ARM ๋ ์ง์คํฐ ์ํ ์ ์ฅ/๋ณต์
- ํ์คํฌ ๊ฐ ์ปจํ ์คํธ ์ ํ ๋ฐ๋ชจ
- ์์คํ ํด๋ก ํ์ฑํ/๋นํ์ฑํ
- ํด๋ก ์ํ ๋ชจ๋ํฐ๋ง
heapless
ํฌ๋ ์ดํธ๋ฅผ ํ์ฉํ ์คํ ๊ธฐ๋ฐ ์ปฌ๋ ์ - ๋์ ํฌ๊ธฐ ๋ฒกํฐ ๋ฐ ๋ฌธ์์ด ์ฒ๋ฆฌ
- Rust: 1.89.0+
- Target:
thumbv8m.main-none-eabihf
(Cortex-M33 with FPU) - Tools:
gdb-multiarch
,arm-none-eabi-*
toolchain - Debugger: SungDB MCP
cortex-m = "0.7" # ARM Cortex-M ํ๋์จ์ด ์ถ์ํ
cortex-m-rt = "0.7" # ๋ฐํ์ ๋ฐ ์์ ์ฝ๋
cortex-m-semihosting = "0.5" # ๋๋ฒ๊น
์ฉ semihosting
panic-halt = "0.2" # ํจ๋ ํธ๋ค๋ฌ
heapless = "0.8" # ํ ์๋ ์ปฌ๋ ์
embedded-hal = "1.0" # ์๋ฒ ๋๋ ํ๋์จ์ด ์ถ์ํ ๊ณ์ธต
cortex-m33-rust/
โโโ ๐ Cargo.toml # Rust ํ๋ก์ ํธ ์ค์
โโโ ๐ Makefile # ๋น๋ ์๋ํ
โโโ ๐ README.md # ์ด ๋ฌธ์
โโโ ๐ MEMORY_ANALYSIS_REPORT.md # ์์ธ ๋ฉ๋ชจ๋ฆฌ ๋ถ์ ๋ฆฌํฌํธ
โโโ ๐ .cargo/
โ โโโ ๐ config.toml # Cargo ๋น๋ ์ค์
โโโ ๐ src/
โ โโโ ๐ main.rs # ๋ฉ์ธ ์์ค ์ฝ๋
โโโ ๐ linker/
โโโ ๐ memory.x # ๋ง์ปค ์คํฌ๋ฆฝํธ
# Rust ์ค์น (์ด๋ฏธ ์ค์น๋ ๊ฒฝ์ฐ ๊ฑด๋๋ฐ๊ธฐ)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
# ARM ํ๊ฒ ์ถ๊ฐ
rustup target add thumbv8m.main-none-eabihf
# ํ์ ๋๊ตฌ ์ค์น
cargo install cargo-binutils
rustup component add llvm-tools-preview
# ARM GDB ์ค์น (Ubuntu/Debian)
sudo apt install gdb-multiarch
# ๋ฆด๋ฆฌ์ฆ ๋น๋
make release
# ๋๋
cargo build --release
# ๋๋ฒ๊ทธ ๋น๋
make debug
# ๋๋
cargo build
# ๋ฐ์ด๋๋ฆฌ ์ ๋ณด ํ์ธ
make size
# SungDB MCP๋ฅผ ์ฌ์ฉํ ๋๋ฒ๊น
# (๋ณ๋ ํฐ๋ฏธ๋์์ SungDB MCP ์๋ฒ ์คํ ํ์)
# GDB ์ค๋น
make gdb-prep
# ๋ฐ์ด๋๋ฆฌ ์์น: target/thumbv8m.main-none-eabihf/debug/main
์์ธํ ๋ฉ๋ชจ๋ฆฌ ๋ถ์ ๊ฒฐ๊ณผ๋ MEMORY_ANALYSIS_REPORT.md
๋ฅผ ์ฐธ์กฐํ์ธ์.
- SungDB MCP: ARM Cortex-M33 ์๋ฒฝ ์ง์
- ๋ฉ๋ชจ๋ฆฌ ์์ญ: TEXT, RODATA, STACK ์์ญ ์ ํํ ๋ถ์
- ํจ์ ์ถ์ : ๋ชจ๋ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ํํ ์๋ณ
- ์ปดํ์ผ๋ฌ ์ต์ ํ ๋ฐฉ์ง:
#[no_mangle]
,#[inline(never)]
์์ฑ์ผ๋ก ํจ์ ๋ณด์กด - ์ค์ ํ๋์จ์ด ์ ๊ทผ:
ptr::write_volatile()
,ptr::read_volatile()
์ฌ์ฉ - ์ ์ญ ๋ณ์ ํ์ฉ: ์ค์ ๋ฉ๋ชจ๋ฆฌ ์กฐ์์ผ๋ก ์ต์ ํ ๋ฐฉ์ง
- ์คํ ๊ฐ๋ฅ์ฑ ํ์ธ: QEMU์์ ์คํ ์๋ ์ฑ๊ณต (lockup๊น์ง ๋๋ฌ)
- ๋ฐ์ด๋๋ฆฌ ์์ฑ: ELF ํ์ผ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ (128KB)
- ์คํ ๊ฐ๋ฅ์ฑ: QEMU์์ ๋ก๋ ๋ฐ ์คํ ์๋ ํ์ธ
- ๋ฉ๋ชจ๋ฆฌ ๋ถ์: SungDB MCP๋ก C ํ๋ก์ ํธ์ ๋์ผํ ๋ถ์ ๋ฐฉ๋ฒ๋ก ์ ์ฉ ๊ฐ๋ฅ
- ์ต์ ํ ๋ฌธ์ : Rust์ zero-cost abstraction์ผ๋ก ์ธํ ์ฝ๋ ์ต์ ํ ํน์ฑ
๊ธฐ๋ฅ | ์ํ | ์ค๋ช |
---|---|---|
์ธ์ ๊ด๋ฆฌ | โ | gdb_start , gdb_terminate ์ ์ |
๋ฐ์ด๋๋ฆฌ ๋ก๋ | โ | ELF ํ์ผ ๋ก๋ ์ฑ๊ณต |
์ํคํ ์ฒ ์ค์ | โ | ARMv8-M.main ์ค์ ์๋ฃ |
๋ฉ๋ชจ๋ฆฌ ๋ถ์ | โ | examine , info files ์ ์ |
ํจ์ ์ถ์ | โ | print , info functions ์ ์ |
- โ TEXT ์์ญ: ํจ์๋ค์ด FLASH(0x10000000~)์ ๋ฐฐ์น
- โ RODATA ์์ญ: ์์๋ค์ด FLASH์ ์ ์ฅ
- โ STACK ์์ญ: RAM ์ต์์(0x10080000)์์ ํํฅ ์ฑ์ฅ
โ ๏ธ DATA/BSS: ์ ์ญ ๋ณ์ ์์์ผ๋ก ๋น ์น์ โ ๏ธ HEAP: ํ์ฌ ๋ฏธ์ฌ์ฉ (heapless
์ฌ์ฉ)
# ํ์ฌ ์ํ
$ arm-none-eabi-objdump -h target/thumbv8m.main-none-eabihf/release/main
# โ .text ์น์
์์, ๋๋ฒ๊ทธ ์ ๋ณด๋ง ์กด์ฌ
# ํด๊ฒฐ ๋ฐฉ์
# 1. ๋ง์ปค ์คํฌ๋ฆฝํธ ์์
# 2. ์ค์ ํ๋์จ์ด ์ ๊ทผ ์ฝ๋ ์ถ๊ฐ
# 3. ์ปดํ์ผ๋ฌ ์ต์ ํ ์ค์ ์กฐ์
// ํด๊ฒฐ ๋ฐฉ์
#[no_mangle]
pub extern "C" fn main() -> ! {
// ์ค์ ํ๋์จ์ด ๋ ์ง์คํฐ ์ ๊ทผ ์ถ๊ฐ
unsafe {
core::ptr::write_volatile(0x4000_0000 as *mut u32, 0x1234);
}
loop {}
}
- ์คํ ๊ฐ๋ฅํ Rust ๋ฐ์ด๋๋ฆฌ ์์ฑ
- ์ค์ ํ๋์จ์ด ์ฃผ๋ณ์ฅ์น ์ ์ด ์ฝ๋ ์ถ๊ฐ
- QEMU ํ๊ฒฝ์์ ์คํ ํ ์คํธ
- ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ ๊ตฌํ
- ํ์ด๋จธ ๋ฐ GPIO ์ ์ด
- RTOS ๊ธฐ๋ฐ ๋ฉํฐํ์คํน
- USB ํต์ ๊ตฌํ
- ๋ฌด์ ํต์ ๋ชจ๋ ์ฐ๋
- OTA(Over-The-Air) ์ ๋ฐ์ดํธ
- ์ด ๋ ํฌ์งํ ๋ฆฌ๋ฅผ Fork
- ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (
git checkout -b feature/amazing-feature
) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add amazing feature'
) - ๋ธ๋์น์ Push (
git push origin feature/amazing-feature
) - Pull Request ์์ฑ
- SungDB MCP - FastMCP ๊ธฐ๋ฐ GDB ์๋ฒ
- cortex-m - ARM Cortex-M ํ๋์จ์ด ์ถ์ํ
- heapless - ํ ์๋ ์ปฌ๋ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- cortex-m-hello-world - C ์ธ์ด ์ฐธ์กฐ ๊ตฌํ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ผ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
๐ฌ ๊ฐ๋ฐ์: SungDB MCP Team
๐
์์ฑ์ผ: 2024๋
12์ 4์ผ
๐๏ธ ์ํคํ
์ฒ: ARM Cortex-M33 (ARMv8-M.main)
๐ฆ ์ธ์ด: Rust 1.89.0