카테고리 없음

Arm용 크로스 컴파일 환경 구축하기

꿈을드림 2008. 7. 17. 18:39
. 개요

      이 문서는 이지보드를 위한 ARM 용 크로스 컴파일 환경을 구축하기 위한 방법중 RPM을 이용하는 방식이 아닌  

       GNU에서 제공하는 소스 패케지를 이용하여 구성하는 방식에 대하여 기술한 문서입니다.

   2. 무엇을 구하는가?

       리눅스를 이용한 개발환경으로 선택했다면 크로스 컴파일 환경을 구축하여야 합니다.

       이 크로스 컴파일 환경에 포함되는 것은 다음과 같은 패케지가 필요로 하고

       이 패케지들의 모음을 일반적으로 크로스 컴파일 툴 체인이라고도 합니다. 

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

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

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

       4) 커널       : 커널 쏘스 

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

       참조 문서 : http://www.armlinux.org/docs/toolchain/toolchHOWTO.pdf

   

   3. 어디서 구하는가?

      가장 간단한 방법은 본 홈페이지 에서 구하는 방법입니다.    

      왜? 본강사가 이글을 쓴 후에 정리된 문서에 링크를 걸어서 다운 받을수 있게 할것이기 때문이지요. 

      그다음 간단한 방법은 

      ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/lfs-packages-3.3.tar  를 받는 방법입니다. 

     그러나 여기에는 툴 체인 이외에 매우 방대한 패케지가 포함되어 있습니다 무려 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

         ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gcc-2.95.3-2.patch.bz2

      4) 커널       : 커널 쏘스 

          이 부분은 2.4.18 커널 업그레이드 문서를 참조 할것...       

          바로가기

          이 문서는 linux-2.4.18-rmk7-ez1.tar.gz을 이용하는 방법에 대하여 설명되어 있습니다. 

          이화일은 아래  다운받기 목록에서 직접 구할수 있습니다. 

          ◇ 다운받기 ◇

          binutils-2.12.tar.gz 

          linux-2.4.18-rmk7-ez1.tar.gz

          gcc-2.95.3.tar.gz

          gcc-2.95.3-2.patch.bz2

          glibc-2.2.4.tar.gz

          glibc-linuxthreads-2.2.4.tar.gz         

   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 패케지 다음에 설치하는 이유는 헤더 화일 때문입니다. 

      크로스 컴파일 설치 목적이 암용 이라면 커널 소스는 암 패치까지 수행되어야 합니다. 

      여기서 설명하는 것은 스트롱암용이기 때문에 최소한 스트롱암 패치까지는 수행되어진 소스여야 됩니다. 

      이 문서에서는 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


   10. 잘되었나 시험을 해보자

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

      [root@falinux download]# vi test.c

      #include <stdio.h>

      main() 
     { 
               printf( "OK GCC\n" );
     }

      [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  

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


   11. 결론

       9 항까지의 과정을 거치고 나면  

        /usr/local/arm-linux/ 에 암용 크로스 컴파일 환경이 구축되게 됩니다. 

       최근의 포팅 경험을 다시 비추어 보면

       이 과정들이 다른 환경에서 100% 된다는 것은 아무도 보장 못합니다. 

       만약 본강사와 똑같이 해보고 나서 안되는 문제에 대해서는 본강사도 어렵사리 한 결론이므로

       본 강사에게 연락해도 큰 도움이 못된다는 것입니다.