회사에서 2410 보드에 gdb를 써야 할 일이 생겼습니다.
컴파일 하는데 삽질좀 했네요.
잊어버릴까봐 적어둡니다. toolchain은 AESOP 에 있는걸 썼습니다.
gdb-6.7.tar.gz 파일과 termcap-1.3.1.tar.gz을 받습니다.
적당한 디렉토리에 풀어줍니다.
우선 termcap-1.3.1 부터 cross 컴파일 합니다. ./configure 를 돌려 Makefile을 만들고
다음 부분을 고쳐줍니다.
vi Makefile
----------------
# CROSS 매크로 추가
CROSS = arm-linux-
# CC 매크로 변경
CC = $(CROSS)gcc
AR = $(CROSS)ar
RANLIB = $(CROSS)ranlib
...
..
# prefix 는 적당히 바꿔줍니다. 나중에 termcap이 설치될 위치를 지정하는 겁니다.
prefix = /usr/local
...
-----------------
termcap이 설치된 디렉토리로 가서 include/termcap.h 파일과 lib/libtermcap.a 파일을 AESOP toolchain이 설치된 디렉토리에 복사해줍니다.
cp ./include/termcap.h /root/aesoptool/gcc-3.3.4-glibc-2.3.3/arm-linux/arm-linux/include
cp ./lib/libtermcap.a /root/aesoptool/gcc-3.3.4-glibc-2.3.3/arm-linux/arm-linux/lib
gdb-6.7.tar.gz을 풀고 ./configure --host=arm-linux 돌려서 Makefile을 만듭니다.
다음 링크를 참고하여 XML 관련 파일을 고쳐줍니다.
https://sourceforge.net/tracker/?func=detail&atid=110127&aid=846309&group_id=10127
-------------------------------------------------------------------------------
Date: 2003-12-30 04:57
Sender: nobody
Logged In: NO
This error occurs an all patforms which do not have an i386
processor.
From GCC 3.3.2 manual:
`cdecl'
On the Intel 386, the `cdecl' attribute causes the
compiler to
assume that the calling function will pop off the stack
space used
to pass arguments. This is useful to override the
effects of the
`-mrtd' switch.
The wrong statement is in lib/expat.h line 48
#elif defined(__GNUC__)
#define XMLCALL __attribute__((cdecl))
the #elif statement has to be defined as:
#elif defined(__GNUC__) && defined(__i386)
#define XMLCALL __attribute__((cdecl))
Regards
------------------------------------------------------
make를 실행하면 ARM용 gdb 가 생성됩니다. 소스 코드가 있어야 디버깅이 가능하므로 NFS환경이 필수적입니다.