ARM Core - 3. ARM Assembly 프로그래밍 기초 (1. ARM Assembly 환경 설정 가이드)

2025. 3. 7. 13:24정보기술/하드웨어

1. ARM Assembly 환경 설정 가이드


1. 크로스 컴파일러 설정 및 사용법 (GNU ARM Toolchain, QEMU)

1) 크로스 컴파일러란?

크로스 컴파일러(Cross Compiler)는 개발 환경(PC)에서 타겟 시스템(ARM)에 맞는 바이너리를 생성하는 컴파일러이다. x86/x86_64 기반의 개발 환경에서 ARM용 실행 파일을 만들려면 크로스 컴파일러가 필요하다.

2) GNU ARM Toolchain 설치 및 설정

Ubuntu/Debian 환경

sudo apt update
sudo apt install gcc-arm-none-eabi gdb-multiarch

Mac 환경 (Homebrew 사용)

brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

Windows 환경

  1. ARM GNU Toolchain 공식 사이트에서 설치 파일 다운로드
  2. 환경 변수 설정
    • C:\Program Files (x86)\GNU Arm Embedded Toolchain\bin 경로를 PATH에 추가

3) Raspberry Pi 4에서 ARM Assembly 실행

Raspberry Pi 4에 필요한 패키지 설치

sudo apt update
sudo apt install gcc-arm-linux-gnueabihf gdb-multiarch

ARM Assembly 코드 예제 (hello.s)

.global _start

.section .text
_start:
    MOV R7, #4
    MOV R0, #1
    LDR R1, =message
    MOV R2, #13
    SWI 0
    MOV R7, #1
    MOV R0, #0
    SWI 0

.section .data
message:
    .asciz "Hello, ARM!\n"

컴파일 및 실행

as -o hello.o hello.s
ld -o hello hello.o
./hello

4) STM32 마이크로컨트롤러에서 ARM Assembly 실행

STM32CubeIDE 및 OpenOCD 설치

STM32 개발을 위해 STM32CubeIDE를 다운로드하여 사용하거나, CLI 기반으로 OpenOCD를 활용할 수 있다.

  1. STMicroelectronics 공식 사이트에서 STM32CubeIDE 다운로드
  2. OpenOCD 설치
sudo apt install openocd

STM32 프로젝트 생성 (STM32CubeIDE)

  1. STM32CubeIDE 실행 → New Project → STM32 보드 선택
  2. Cortex-M 프로세서를 선택하여 어셈블리 코드 작성
  3. 컴파일 후 OpenOCD 또는 ST-Link를 사용하여 디바이스에 업로드

2. QEMU를 이용한 ARM 에뮬레이션 설정

QEMU는 ARM 프로세서를 가상화하여 실행할 수 있는 오픈소스 에뮬레이터다. 물리적인 ARM 보드 없이도 프로그램을 실행하고 디버깅할 수 있다.

QEMU 설치

sudo apt install qemu-system-arm

QEMU를 이용한 ARM 실행 환경 구성 (Cortex-M3 예제)

qemu-system-arm -M lm3s6965evb -kernel test.bin -nographic
  • -M lm3s6965evb: TI Stellaris LM3S6965 보드 에뮬레이션
  • -kernel test.bin: 실행할 ARM 바이너리 지정
  • -nographic: GUI 없이 콘솔에서 실행

3. Visual Studio Code를 이용한 ARM 개발 환경 설정

1) VS Code + ARM Toolchain 설치

Visual Studio Code는 ARM 개발을 위한 강력한 IDE로 활용될 수 있다.

설치해야 할 도구

  • VS Code (다운로드)
  • ARM GNU Toolchain
  • Cortex-Debug 확장 프로그램
  • QEMU 또는 OpenOCD 디버거

VS Code에서 ARM 프로젝트 설정

  1. VS Code 실행 → 확장 프로그램 설치 (Cortex-Debug, C/C++, Makefile Tools)
  2. ARM 프로젝트 폴더 생성
  3. Makefile 작성하여 빌드 시스템 구성
  4. launch.json 파일을 설정하여 OpenOCD 디버깅 지원
  5. F5를 눌러 실행 및 디버깅

4. 디버깅 도구 활용 (GDB, OpenOCD)

1) GDB를 이용한 ARM Assembly 디버깅

GDB는 GNU 디버거로, 어셈블리 코드 디버깅 및 메모리 상태 분석을 수행할 수 있다.

GDB ARM 디버깅 환경 설정

  • GDB 설치
sudo apt install gdb-multiarch
  • QEMU와 함께 GDB 실행
qemu-system-arm -M versatilepb -kernel test.elf -S -gdb tcp::1234 -nographic
  • GDB로 원격 디버깅 연결
arm-none-eabi-gdb test.elf
target remote :1234
  • 디버깅 명령어
break main   # main 함수에서 중단점 설정
continue     # 실행 진행
info registers  # 레지스터 상태 확인
disassemble  # 어셈블리 코드 확인
stepi        # 한 단계씩 명령어 실행

2) OpenOCD를 이용한 하드웨어 디버깅

OpenOCD(Open On-Chip Debugger)는 JTAG/SWD 디버깅 인터페이스를 제공하는 오픈소스 디버거다.

OpenOCD 실행

openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg

GDB로 OpenOCD에 연결

arm-none-eabi-gdb test.elf
target remote localhost:3333
monitor reset halt
load

5. ARM Assembly 환경 설정 요약

구성 요소 설명
크로스 컴파일러 GNU ARM Toolchain (gcc-arm-none-eabi)
에뮬레이터 QEMU를 사용하여 ARM 환경 에뮬레이션
개발 보드 테스트 Raspberry Pi 4, STM32 시리즈 지원
디버깅 도구 GDB를 이용한 소프트웨어 디버깅
하드웨어 디버깅 OpenOCD를 이용한 JTAG/SWD 디버깅
IDE 지원 Visual Studio Code, STM32CubeIDE

6. 결론

ARM Assembly 프로그래밍을 위해서는 크로스 컴파일러, 개발 보드(Raspberry Pi, STM32), 에뮬레이터, 디버거를 적절히 활용해야 한다.

  • GNU ARM Toolchain을 이용한 크로스 컴파일러 설정
  • QEMU를 이용한 ARM 프로그램 실행 테스트
  • Visual Studio Code에서 ARM 개발 환경 구성
  • GDB 및 OpenOCD를 활용한 디버깅

이와 같은 환경을 구축하면 ARM 어셈블리 프로그래밍을 원활하게 진행할 수 있으며, 실제 하드웨어(Raspberry Pi, STM32)를 활용한 개발 및 디버깅까지 확장 가능하다.