Ch01. 툴체인 설정 - Hongjayeong-02/Basic_SoC_implementation GitHub Wiki

Ch01. 툴체인 설정

(Bare-metal-C-00-필수개념) 이 챕터는 코드가 아니라 어떤 도구로 어떻게 빌드/플래시하는지를 정리한다. 원서는 Windows + STM32CubeIDE를 쓰지만, 이 저장소는 Linux CLI로 진행한다.

1. 이론

1.1 CubeIDE vs 이 저장소의 차이

STM32CubeIDE는 에디터+컴파일러+디버거+플래시툴이 하나의 GUI로 묶인 통합 환경이다. 이 저장소는 같은 일을 여러 개별 CLI 도구를 직접 조합해서 한다 — 뒤에서 GUI가 대신 누르던 버튼들이 실제로 무슨 명령어를 실행하는지 눈으로 볼 수 있다는 장점이 있다.

1.2 도구별 역할

도구 역할 이 저장소에서의 위치
arm-none-eabi-gcc 크로스 컴파일러. x86 PC에서 ARM Cortex-M용 기계어를 생산 모든 챕터의 .c를 .o로, 최종적으로 .elf로
GNU Make 빌드 자동화 도구 Ch05에서 직접 공용 Makefile 템플릿 작성
OpenOCD ST-LINK를 통해 보드에 펌웨어를 굽고 디버깅하는 도구 make flash 타겟이 내부적으로 호출
gdb-multiarch 소스 레벨 디버깅 선택 사항
picocom/minicom UART 시리얼 터미널 Ch10 이후 UART 출력 확인용

1.3 왜 "arm-none-eabi"라는 이름인가

크로스 컴파일러 이름은 관례적으로 <아키텍처>-<벤더>-<OS>-<ABI> 형식을 따른다: arm(ARM 아키텍처) - none(특정 벤더 없음) - eabi(Embedded Application Binary Interface, OS가 없는 베어메탈용 ABI). 즉 이름 자체가 "OS 없는 ARM 임베디드용 컴파일러"라는 뜻이다.

1.4 보드: NUCLEO-F439ZI

  • MCU: STM32F439ZIT6 (Cortex-M4F, 180MHz, Flash 2MB, SRAM 128KB+CCM 64KB)
  • 폼팩터: Nucleo-144 (원서의 NUCLEO-F411은 Nucleo-64) — 이 폼팩터 차이가 이후 챕터들의 LED/버튼 핀맵 차이의 근본 원인이다
  • 온보드 ST-LINK/V2-1 내장 — 별도 프로그래머 없이 USB 한 개로 플래시+UART(VCP)가 모두 해결된다

2. 빌드/플래시 흐름

# 1) 크로스 컴파일러로 빌드 (챕터 폴더에서)
make

2) 보드가 연결된 로컬 PC에서 OpenOCD로 플래시

openocd -f interface/stlink.cfg -f target/stm32f4x.cfg
-c "program chNN.elf verify reset exit"

각 챕터 Makefile의 make flash 타겟이 2번 명령을 감싸둔 것이다.

3. 이 저장소(클라우드 세션)의 근본적 제약

이 저장소는 실제 하드웨어가 없는 클라우드 샌드박스에서 작성됐다. 그래서:

  • 할 수 있는 것: arm-none-eabi-gcc로 Ch02부터 모든 챕터를 끝까지 컴파일·링크해서 코드 자체(레지스터 주소, 비트 연산, 링커스크립트 심볼 배치 등)의 정확성 검증
  • 할 수 없는 것: make flash, 실제 UART 출력 확인, 오실로스코프로 신호 확인 같은 "실물 검증"

그래서 이 저장소의 워크플로우는 두 갈래로 나뉜다: ① 클라우드에서 make로 빌드까지 검증 → ② 사용자가 로컬 STM32CubeIDE 프로젝트에 같은 코드를 반영해서 실제 보드로 실기 검증. 각 챕터 README/노션 페이지에 이 두 단계 중 어디까지 확인됐는지가 표시된다.

4. 참고 문서

  • RM0090 Reference manual (STM32F42x/43x) — 레지스터 주소/비트의 원본 출처
  • UM1974 — NUCLEO-144 User manual — 보드 핀맵/회로도
  • STM32F439ZI Datasheet

5. 핵심 정리

  • Q. arm-none-eabi-gcc의 eabi는 무슨 뜻? → Embedded Application Binary Interface, OS 없는 베어메탈용 ABI
  • Q. 이 저장소가 CubeIDE와 근본적으로 다른 점은? → 같은 빌드 과정을 GUI 뒤에 숨기지 않고 CLI 도구(gcc/make/openocd)를 직접 조합해서 수행
  • Q. 클라우드 샌드박스에서 검증 못 하는 건? → 실제 보드 플래시(make flash)와 실물 동작 확인. 컴파일/링크까지만 가능
  • Q. 온보드 ST-LINK가 하는 일은? → 별도 프로그래머 없이 USB로 플래시 + 가상 COM 포트(VCP)로 UART까지 제공

네비게이션: 이전: Bare-metal-C-00-필수개념 · Bare‐metal-C-Programming · 다음: Bare-metal-C-Ch02-레지스터-직접정의

⚠️ **GitHub.com Fallback** ⚠️