[OS]/Embedded

[펌] 소스 패키지를 이용하여 크로스 컴파일 환경 구축 방법

하늘을닮은호수M 2005. 6. 16. 13:25
반응형

소스패키지를 이용하여 크로스 컴파일 환경 구축 방법

글쓴이 : 유영창 (2002년 07월 25일 오전 11:28)

1 개요
2 무엇을 구하는가?
3 어디서 구하는가?
4 설치 전 작업
5 설치 전 주의 사항
6 Binutils 패키지 설치
7 커널 소스 설치
8 gcc 패키지 설치
9 glibc 패키지 설치
10 잘되었나 시험을 해보자
11 결론

1 개요
이 문서는 이지보드를 위한 ARM 용 크로스 컴파일 환경을 구축하기 위한 방법중 RPM을 이용하는 방식이 아닌 GNU에서 제공하는 소스 패키지를 이용하여 구성하는 방식에 대하여 기술한 문서입니다.

2 무엇을 구하는가?
리눅스를 이용한 개발환경으로 선택했다면 크로스 컴파일 환경을 구축하여야 합니다.
이 크로스 컴파일 환경에 포함되는 것은 다음과 같은 패키지가 필요로 하고 이 패키지들의 모음을 일반적으로 크로스 컴파일 툴 체인이라고도 합니다.

1) binutils : 어셈블러 및 로더 기타 툴 ( GNU )
2) glibc : 크로스 컴파일 구축을 위한 라이브러리 및 일반 라이브러리
3) gcc : 컴파일러 ( 시그너스 )
4) 커널 : 커널 소스

소스 패키지로 구성하기 위해서는 목록에 해당하는 모든 패키지가 있어야 합니다.

3 어디서 구하는가?
그다음 간단한 방법은

http://www.linuxfromscratch.org

를 받는 방법입니다.

그러나 여기에는 툴 체인 이외에 매우 방대한 패키지가 포함되어 있습니다 무려 80M 가 넘습니다.
원론적인 방법은 다음에서 구하는 것입니다.


1) binutils : 어셈블러 및 로더 기타 툴 ( GNU )

구할수 있는 곳 과 파일
ftp://ftp.gnu.org/gnu/binutils/binutils-2.12.tar.gz

2) glibc : 크로스 컴파일 구축을 위한 라이브러리 및 일반 라이브러리

구할수 있는 곳 과 파일
ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz
ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz

3) gcc : 컴파일러 ( 시그너스 )

구할수 있는 곳 과 파일
ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3.tar.gz

4) 커널 : 커널 소스

4 설치 전 작업
다운 받은 화일 목록을 정리하면

1) binutils-2.12.tar.gz

2) linux-2.4.18-rmk7-ez1.tar.gz

3) gcc-2.95.3.tar.gz

4) gcc-2.95.3-2.patch.bz2

5) glibc-2.2.4.tar.gz

6) glibc-linuxthreads-2.2.4.tar.gz

등 총 6개가 됩니다.

설치하려고 하는 리눅스 머신에 다음 디렉토리를 만듭니다.

mkdir -p /var/download/

/var/download/ 에 다운 받은 화일을 가져다 놓습니다.

5 설치 전 주의 사항
이제부터 진행하는 순서는 꼭! 지켜야 합니다. 이유는 각 설치되는 패키지들의 의존 관계가 있기 때문입니다.
편리함을 위해 설치는 root 권한으로 하시기 바랍니다.

6 Binutils 패키지 설치
본강사가 하는대로 그냥 따라만 해도 별무리 없이 설치 될 것입니다.

[root@falinux /]# cd /var/download/

[root@falinux download]# tar zxvf binutils-2.12.tar.gz

[root@falinux binutils-2.12]# cd /var/download/

[root@falinux download]# cd binutils-2.12

[root@falinux binutils-2.12]# ./configure --target=arm-linux

[root@falinux binutils-2.12]# make

[root@falinux binutils-2.12]# make install


아마도 별 무리없이 끝났을 것입니다.

이 부분을 수행하고 나면 /usr/local/arm-linux 란 디렉토리가 생성됩니다.

이 부분을 실행환경 패스로 잡아 주어야 합니다.

설정할 내용은

PATH=$PATH:/usr/local/arm-linux/bin
입니다.

본강사는 대부분 root로 작업을 하지요...다( 별로 안좋은 습관이나 편하다 ^^;)
그러므로 /root 밑에
".bash_profile" 화일에 위 내용을 추가 합니다.
export 시키거나 로그아웃 한후 root로 로긴을 다시하면 됩니다.

7 커널 소스 설치
커널 소스를 Binutils 패키지 다음에 설치하는 이유는 헤더 화일 때문입니다.
크로스 컴파일 설치 목적이 ARM용 이라면 커널 소스는 암 패치까지 수행되어야 합니다.
여기서 설명하는 것은 스트롱암용이기 때문에 최소한 스트롱암 패치까지는 수행되어진 소스여야 됩니다.
이 문서에서는 linux-2.4.18-rmk7.ez1.tar.gz 소스를 사용 하는 것에 대하여 설명하겠습니다.
참고로 커널 소스 위치가 고정될 필요는 없습니다
본 강사 경험에 따르면 수행되는 프로젝별로 커널 소스 관리를 하게 됩니다.
설치는 다음과 같은 순서를 따릅니다.

[root@falinux /]# cd /var/download/

[root@falinux download]# tar zxvf linux-2.4.18-rmk7-ez1.tar.gz

[root@falinux download]# cd linux-2.4.18-rmk7-ez1

[root@falinux linux-2.4.18-rmk7-ez1]# mkdir /usr/local/arm-linux/include

[root@falinux linux-2.4.18-rmk7-ez1]# cp -dR include/asm-arm /usr/local/arm-linux/include/asm

[root@falinux linux-2.4.18-rmk7-ez1]# cp -dR include/linux /usr/local/arm-linux/include/linux

[root@falinux linux-2.4.18-rmk7-ez1]# cd /usr/local/arm-linux/

[root@falinux arm-linux]# ln -s include sys-linux

8 gcc 패키지 설치

[root@falinux arm-linux]# cd /var/download/

[root@falinux download]# tar zxvf gcc-2.95.3.tar.gz

[root@falinux download]# bunzip2 gcc-2.95.3-2.patch.bz2

[root@falinux download]# cd gcc-2.95.3

[root@falinux gcc-2.95.3]# patch -Np1 -i ../gcc-2.95.3-2.patch

[root@falinux gcc-2.95.3]# cd gcc/config/arm/


t-linux 화일을 수정합니다.
t-linux 의 선두에 보면


TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC


이란 내용이 있는데 이것을

TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix_h
으로 바꿔줍니다.


[root@falinux gcc-2.95.3]# mkdir ../gcc-build

[root@falinux gcc-2.95.3]# cd ../gcc-build #

[root@falinux gcc-build]# ../gcc-2.95.3/configure --target=arm-linux -v --with-gnu-as --with-gnu-ld --with-gnu-newlib [root@falinux gcc-build]# ../gcc-2.95.3/configure --target=arm-linux -v --with-gnu-as --with-gnu-ld

[root@falinux gcc-build]# make -w all-gcc install-gcc LANGUAGE="c c++"


인스톨까지 정상적으로 수정되었습니다.

9 glibc 패키지 설치

[root@falinux /]# cd /var/download/

[root@falinux download]# tar zxvf glibc-2.2.4.tar.gz

[root@falinux download]# cd glibc-2.2.4

[root@falinux glibc-2.2.4]# tar zxvf ../glibc-linuxthreads-2.2.4.tar.gz

[root@falinux glibc-2.2.4]# mkdir ../glibc-build

[root@falinux glibc-2.2.4]# cd ../glibc-build

[root@falinux glibc-build]# CC=arm-linux-gcc ../glibc-2.2.4/configure arm-linux --prefix=/usr/local/arm-linux --enable-add-ons --with-headers=/var/download/linux-2.4.18-rmk7-ez1/include --with-cpu=strongarm110 [root@falinux glibc-build]# make [root@falinux glibc-build]# make install

== 잘되었나 시험을 해보자 ==

[root@falinux /]# cd /var/download/

[root@falinux download]# vi test.c


#include

main()

{

printf( "OK GCCn" );

}


[root@falinux download]# arm-linux-gcc -o test test.c

[root@falinux download]# file test test: ELF 32-bit LSB executable, Advanced RISC Machines ARM, version 1, dynamically linked (uses shared libs), not stripped

위와 같이 나오면 잘된 것입니다.

10 결론
9 항까지의 과정을 거치고 나면
/usr/local/arm-linux/ 에 암용 크로스 컴파일 환경이 구축되게 됩니다.
최근의 포팅 경험을 다시 비추어 보면 이 과정들이 다른 환경에서 100% 된다는 것은 아무도 보장 못합니다.
만약 본강사와 똑같이 해보고 나서 안되는 문제에 대해서는 본강사도 어렵사리 한 결론이므로 ..

반응형