들어가기 전에
여기서는 이지보드-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 |
준비해야 할 것들
- glibc-linuxthreads ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.2.tar.gz
위의 것들을 모두 다운로드 받았다면, 정리하기 쉽게 하나의 디렉토리에 모아두자. 나의 경우 /root/ez 이라는 디렉토리에 모두 모았다.
이제 본격적으로 설치해보자!
컴파일 및 설치
커널 설치
여기서는 커널을 직접 컴파일해서 부팅하는 것을 목적으로 하지 않는다. 단지 압축만 풀어서, 뒤에서 gcc 와 glibc 의 링크를 걸어주는 역할이다. 이 커널은 제조사에서 제공하는 커널로 사용한다.
#cd /root/ez #tar xzvf linux-2.4.19-x5-v05.tar.gz
binutils 설치
아래와 같이 압축을 풀고,
#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 설치
역시 앞과 같은 과정이다. 참고로 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 설치
가장 까다롭다고(?) 하는 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 재설치
이제 마지막으로 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
아래와 같이 나오면 성공이다.