본문 바로가기

IoT 임베디드

우분투에서 arm 크로스컴파일 및 디버깅

반응형

우분투에서 arm 크로스컴파일 및 디버깅

 

주의 : arm 종류는 굉장히 다양하고 안드로이드, ios 디바이스 등 여기에 맞게 크로스컴파일 해야함.

(ELF 64-bit ARM aarch64, Mach-O 64-bit ARM aarch64 등 디바이스에서 돌아가게 하려면 맞춰줘야함)

 

여기서는 간단하게 ubuntu에서 단순히 arm 어셈블리 연습겸 크로스컴파일하고

qemu와 gdb-multiarch를 이용하여 디버깅 하는 방법을 다룸.


크로스컴파일러 설치

arm 32bit

sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install g++-arm-linux-gnueabi

 

arm 64bit

sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu

 

gdb-multiarch 설치 (이거 하나로 여러 아키텍처 다 됨)

sudo apt-get install gdb-multiarch

 

퀘무 설치

sudo apt-get install qemu-arm-static

크로스 컴파일 하기

arm 32bit

arm-linux-gnueabi-gcc -o test32 ./test.c

 

arm 64bit

aarch64-linux-gnu-gcc -o test64 ./test.c

 

 

8888포트로 arm환경의 퀘무 띄우기

32bit

qemu-arm-static -L /usr/arm-linux-gnueabi -g 8888 ./test32

 

64bit

qemu-aarch64-static -L /usr/aarch64-linux-gnu/ -g 8888 ./test64

 

gdb 붙이기

32bit

gdb-multiarch
set arc arm
target remote localhost:8888
(tartget remote :8888 해도 됨)
file ~/Desktop/test32 
(처음 붙을 때 gdb-multiarch ~/Desktop/test64 로 붙으면 file 명령어 생략 가능)

 

64bit

gdb-multiarch
set arc aarch64
target remote localhost:8888 
(target remote :8888 해도 됨)
file ~/Desktop/test64
(처음 붙을 때 gdb-multiarch ~/Desktop/test64 로 붙으면 file 명령어 생략 가능)

 

끝.

이후 gdb 명령어 그대로 사용하며 디버깅 하면 됨.


arm 환경 qemu 로 파일 띄우고 포트 열어둠.
gdb-multiarch로 arm qemu에 붙어서 디버깅

 

반응형