들어가기 전에

여기서는 이지보드-X5 에서 사용가능한 툴 체인을 설치해 볼 것이다. 솔직히 툴체인의 설치 방법은 제이닷디엔티http://falinux.com 에도 있다. 주소는 http://wiki.falinux.com/wiki.php/CROSSGCC3.3REZ-X5 이다.
여기서는 기본적으로 .rpm 과 src 를 지원한다.
하지만 나의 경우, 호스트가 젠투이기 때문에 rpm 을 설치할 수는 없었다.
참고로 젠투에서도 rpm 을 설치할 수는 있는 걸로 알고 있다. 나 역시 시도해본 적이 있다. 하지만, rpm 의 가장 큰 단점인 의존성문제가 있었다. 그래서 결국 src 로 방향을 바꿨다.
나의 호스트 환경은 다음과 같다.

OS gentoo-2004.1
kernel 2.6.7-gentoo-r8
gcc 3.3.3

준비해야 할 것들

위의 것들을 모두 다운로드 받았다면, 정리하기 쉽게 하나의 디렉토리에 모아두자. 나의 경우 /root/ez 이라는 디렉토리에 모두 모았다.
이제 본격적으로 설치해보자!

컴파일 및 설치

여기서는 커널을 직접 컴파일해서 부팅하는 것을 목적으로 하지 않는다. 단지 압축만 풀어서, 뒤에서 gcc 와 glibc 의 링크를 걸어주는 역할이다. 이 커널은 제조사에서 제공하는 커널로 사용한다.

#cd /root/ez
#tar xzvf linux-2.4.19-x5-v05.tar.gz

아래와 같이 압축을 풀고,

#tar xzvf binutils-2.14.90.0.6.tar.gz
#cd binutils-2.14.90.0.6
#./configure --target=armv5l-linux --prefix=/usr --program-prefix=armv5l-linux-              # 여기서 설치되는 경로는 /usr 아래이고, 컴파일한 오프젝트 파일들은 armv5l-linux- 로 시작한다.
#make
#make install

설정한 다음 컴파일하고 설치하면 된다.

역시 앞과 같은 과정이다. 참고로 gcc 는 전기 컴파일과 후기 컴파일을 해야 한다.

#tar xzvf gcc-3.3.tar.gz
#cd gcc-3.3
#perl -pi -e 's/^(TARGET_LIBGCC2_CFLAGS.*)/$1 -Dinhibit_libc -D__gthr_posix_h/' gcc/config/arm/t-linux
#echo 'T_CFLAGS = -Dinhibit_libc -D__gthr_posix_h' >> gcc/config/arm/t-linux
#./configure --target=armv5l-linux --prefix=/usr --with-headers=/root/ez/linux-2.4.19-x5-v04/include \
>--disable-shared --disable-threads --enable-languages="c" --nfp --with-cpu=xscale --without-fp \
>--with-softfloat-support=internal
#make
#make install

그러니까 후에 가서 또한번 컴파일을 해야 한다는 것이다.

가장 까다롭다고(?) 하는 glibc 과정이다. 거의 이부분에서 좌절하게 되는 경우가 많은데, 다음을 고대로 따라하면 큰 문제가 없을 것이다.

#tar xzvf glibc-2.3.2.tar.gz
#tar -C glibc-2.3.2 -zxt glibc-linuxthreads-2.3.2.tar.gz
#cd glibc-2.3.2

여기서 몇가지 수정해야 할 것들이 있다.
./sysdeps/unix/sysv/linux/arm/sysdep.h 파일에서

 161              : "a1", "memory");             \
 의 내용을  
 161              : "memory");               \
 로 바꾼다. 

./stdio-common/sscant.c 파일에서

 30 sscanf (s, format)
 31      const char *s;
 32      const char *format;
 을 
 
 30 sscanf (const char *s, const char *format, ...)
 로 바꿉니다. 

./linuxthreads/sysdeps/unix/sysv/linux/arm/sysdep-cancel.h 화일에서

 37   ENTRY (name)                              \
 을 
 37   ENTRY (name);                             \
 로 바꾼다. 

컴파일 할 디렉토리를 만든다.

#mkdir ../glibcbuild
#cd ../glibcbuild

환경 설정을 한다.

CC=armv5l-linux-gcc ../glibc-2.3.2/configure armv5l-linux --build=i686-pc-linux-gnu \
--with-headers=/root/ez/linux-2.4.19-x5-v04/include --enable-add-ons --enable-shared --prefix=/usr/armv5l-linux \
--with-cpu=xscale --without-fp --enable-kernel=2.4.19

컴파일을 하고 설치한다.

#make
#make install

이제 마지막으로 gcc를 재설치하여야 한다. 물론 옵션이 달라진다. 나중에 컴파일 할때 라이브러리 의존성 문제가 생기므로 사전에 링크를 걸어 준다.

#cd /usr/armv5l-linux/lib
#ln -s ../../lib/* .
#sed -e '/*** BUG/d' /usr/armv5l-linux/lib/libc.so > /usr/armv5l-linux/lib/libc.so.new
#mv -f /usr/armv5l-linux/lib/libc.so.new -f /usr/armv5l-linux/lib/libc.so
#sed -e '/*** BUG/d' /usr/armv5l-linux/lib/libpthread.so > /usr/armv5l-linux/lib/libpthread.so.new
#mv -f /usr/armv5l-linux/lib/libpthread.so.new -f /usr/armv5l-linux/lib/libpthread.so
#cd /project/toolchain/

기존의 내용을 모두 지운다.

#rm -rf gcc-3.3

다시 압축을 푼다.

#tar xzvf gcc-3.3.tar.gz
#cd gcc-3.3

이제 환경설정과 컴파일을 수행합니다. 환경을 설정한다.

./configure --target=armv5l-linux --prefix=/usr --program-prefix=armv5l-linux- \
--with-headers=/root/ez/linux-2.4.19-x5-v04/include/ \
--with-cpu=xscale --with-softfloat-support=internal --enable-languages=c,c++ --nfp

컴파일을 하고 설치한다.

#make
#make install

아~ 이제 툴체인 설치를 위한 모든 과정이 끝났다. 이제 남은 건 테스트 뿐이다.

테스트

간단한 C 프로그램을 만들어서 툴 체인으로 컴파일 해보자!
그리고 다음과 같이 명령을 내려보자!

#file a.out
test: ELF 32-bit LSB executable, ARM, version 1 (ARM), dynamically linked (uses shared libs), not stripped

아래와 같이 나오면 성공이다.

  • computer/embedded/이지보드-x5_툴_체인_설치하기.txt
  • Last modified: 3 years ago
  • by likewind