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 환경
- ARM GNU Toolchain 공식 사이트에서 설치 파일 다운로드
- 환경 변수 설정
- 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를 활용할 수 있다.
- STMicroelectronics 공식 사이트에서 STM32CubeIDE 다운로드
- OpenOCD 설치
sudo apt install openocd
STM32 프로젝트 생성 (STM32CubeIDE)
- STM32CubeIDE 실행 → New Project → STM32 보드 선택
- Cortex-M 프로세서를 선택하여 어셈블리 코드 작성
- 컴파일 후 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 프로젝트 설정
- VS Code 실행 → 확장 프로그램 설치 (Cortex-Debug, C/C++, Makefile Tools)
- ARM 프로젝트 폴더 생성
- Makefile 작성하여 빌드 시스템 구성
- launch.json 파일을 설정하여 OpenOCD 디버깅 지원
- 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)를 활용한 개발 및 디버깅까지 확장 가능하다.
'정보기술 > 하드웨어' 카테고리의 다른 글
ARM Core - 4. ARM 프로세서의 운영 모드 및 시스템 프로그래밍 (1. ARM의 실행 모드 가이드) (0) | 2025.03.07 |
---|---|
ARM Core - 3. ARM Assembly 프로그래밍 기초 (2. ARM 어셈블리 기본 명령어 및 최적화) (0) | 2025.03.07 |
ARM Core - 2. ARM 아키텍처 및 내부 구조 (4. ARM 최적화 컴파일러 기술) (0) | 2025.03.07 |
ARM Core - 2. ARM 아키텍처 및 내부 구조 (3. ARM 명령어 집합(ISA) 및 SIMD 기술) (0) | 2025.03.07 |
ARM Core - 2. ARM 아키텍처 및 내부 구조 (2. ARM 레지스터 구조) (0) | 2025.03.07 |