로그인 영역

통합 검색
통합 검색

젠투 공식 홈페이지
젠투 공식 한글 번역 문서
부 메뉴
  1. 질문/답변
  2. Tips
  3. 위키(새 창)
  4. 뉴스/새소식
컨텐츠 영역
<style type="text/css">p { margin-bottom: 0.21cm; }a:link { }</style>

사실 보시기 편하라고 본문내용도 넣기는 합니다만...첨부파일로 PDF가 있으니

web이 보기 불편하신분은 그녀석을 봐주세요..(덜덜)


Gentoo linux 64bit system에서 armcross toolchain(until gcc) HOWTO


작성자 : 새벽녘의 흡혈양파


0. prescript

0.1 이 문서는 falinux 에서 판매하는 EZ-X5용 툴체인을 빌드하려하는 사람들을 대상으로한 기초문서입니다.

0.2 대상을 EZ-X5로 하고있는 이유는 kernel때문에 그렇습니다. 결과적으로 다른 커널을 사용하시는 경우에도 커널만 맞춰주신다면 별도의 문제가 없을것으로 생각됩니다.

0.3 환경 및 디렉토리는 제가 빌드하는 환경을 기준으로 설명합니다. 추가적인 질문사항은 http://www.gentoo.or.kr/qna

gentoo kr의 게시판인 이곳으로 부탁드립니다.

0.4 환경이 저와 틀린경우 문서의 내용을 100% 보장하지는 않습니다.

0.5 결과적으로 제대로 설명을 해주신 한글문서가 제가 찾았을때는 없는거같아서 만듭니다...-.-;


1. reuqire

1.1 host : gentoo 64 bit system (다른 linux도 상관은 없을거같지만)

1.2 files

binutils-2.20.1.tar.bz2

gcc-4.4.4.tar.bz2

glibc-2.11.2.tar.bz2

glibc-ports-2.11.tar.bz2

그외 몇개의 patch


그리고 rar프로그램 (emerge rar로 손쉽게 설치할 수 있습니다)


위의 파???과 관련된 path들은 아래의 link를 누르시면 받으실 ??? 있습니다.

http://onionmixer.net/~onion/embedded/ez-x5_crosstoolchain.rar


2. prebuild

2.1 이 문제는 다음과 같은 환경을 기준으로 설명됩니다


export XTARGET=arm-unknown-linux-gnueabi

export XBUILDROOT=/mnt/compile/compile_source/embedded/

export XBUILDSRC=/mnt/compile/compile_source/embedded/src/


XTARGET :: 자신이 cross compile을 하려는 대에환경을 설정

XBUILDROOT :: cross compile환경이 들어갈 build root

XBUILDSRC :: 빌드하는 소스들이 들어있는 디렉토리. Kernel source등이 위치합니다.


그리고 $XBUILDROOT/bin 을 현재 사용하는 계정의 PATH에 추가를 해주시면 됩니다.

저는 ~/.bashrc에 넣었습니다.



3. Build


3.1 kernel unpack

위의 관련파일 압축을 다운로드 받아서 해제하시면 여러개의 파일이 있습니다.

그중 ez-x5_kernel_2.6.rar의 압축을 해제하셔서

그 안에 있는 linux-2.6.21.tar.gz 파일의 압축을 해제합니다


결과물인 linux-2.6.21 디렉토리를 $XBUILDSRC??? 옮긴다음

linux라는 이름으로 심볼릭링크를 걸어줍니다.

이후 linux폴더로 들어가서 다음의 명령을 실행합니다.

(물론 문제가 있는경우에는 make distclean.. 아시 ?)


make ARCH=arm menuconfig

make


위의 과정을 진행한후 에러와 상관없이 include/linux/version.h 파일이 생겼는지를 확인합니다


파일이 생성되었는지를 확인하면 toolchain build을 하기위한 kernel 준비는 ???료입니다.


3.2 binutils

소스 구해서 압축풀고 아래대로 진행해주시면 됩니다.

저도 자세한건 뭔뜻인지 잘....(먼산)


mkdir buildx ; cd buildx


../configure --host=x86_64-pc-linux-gnu --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded/ --enable-64-bit-bfd


make

make install


이렇게 설치가되면 binutils 준비는 끝이 납니다.

아마도 make install까지 하게되면 $XBUILDROOT에는 디???과같은 디렉토리들이 있을겁니다.


arm-unknown-linux-gnueabi 이녀석과

include lib libexec bin info lib64 man share 떨거지들


arm.. 으로 시작하는 디렉토리는 arm에서 실행가능한 바이너리들이 들어가고

그외 디렉토리에는 HOST머신에서 실행가능한 cross compiler들이 들어갑니다.

이후 ???고하시면 되겠습니다.

3.3 gcc bootstrap

gcc에서 bootstrap이라는것은 gentoo의 그것과 근본적인 의미가 같습니다.

이 이후의 작업을 준비하기 위해서 가장 기본적인 compiler를 준비하는 과정입니다.

여기서 준비되는 gcc는 오직 c compiler하나밖에 없습니다.

Bootstrap compiler는 다음과같은 과정으로 준비합니다.


gccsourceunpack합니다.

그리고 소스 압축을 해제한 디렉토리로 이동합니다.


아래의 명령을 실행시켜줍니다.


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


그리고 첨부파일안에 있는 다음의 패치를 적용시켜줍니다.


cat ../gcc-4.4.x-use-embedded.patch | patch -p1


패치의 적용이 무사이 끝났으면 아래의 명령어로설치를 진행하도록 합니다.


mkdir buildx ; cd buildx


../configure --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded --disable-multilib --with-newlib --disable-nls --disable-threads --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c --disable-shared --with-float=soft --enable-cxx-flags=-msoft-float --without-headers --disable-libmudflap --disable-libssp --disable-libgomp


make

make install


이렇게 gcc가 설치되되면 이미 path가 추가되어있을테니 간단하게 테스트를 해보도록 할까요?


coreonion bin # arm-unknown-linux-gnueabi-gcc

arm-unknown-linux-gnueabi-gcc: no input files


이렇게 나오면 glibc를 위한 bootstrap compiler의 준비가 끝나게 됩니다.

3.4 arm glibc compile


지금부터는 target platform(이하 arm이라고 하겠습니다)을 위한 glibc compile을 진행해보도록 하겠습니다.

일단 glibc소스를 준비합니다. 그리고 압축해제를 진행합니다. 아래의 내용대로 압축해제를 한후 관련된 디렉토리에 후처리를 진행하도록 합니다.


mv glibc-ports-2.11.2 ./glibc-2.11.2

mv glibc-2.11.2/glibc-ports-2.11.2 glibc-2.11.2/ports


glibc의 소스가 풀려있는 디렉토리 내에도 patch를 진행하도록 합니다.


cd glibc-2.11.2

cat ../6020_all_alpha-floor_ceil_fix.patch | patch -p0


패치를 적용한후 Makeconfig에서 -lgcc_eh 라고 되어있는 문자열을 제거합니다. 아마도 2정도 될겁니다. 이건 glibc의 버전마다 틀린듯하니 참고해주세요.


mkdir buildx ; cd buildx


glibc configure 를 진행하기전에 아래의 2줄을 console에서 진행합니다.


echo "libc_cv_forced_unwind=yes" > config.cache

echo "libc_cv_c_cleanup=yes" >> config.cache


어제 glibcbuild 및 설치를 진행합니다


../configure --prefix=/mnt/compile/compile_source/embedded/arm-unknown-linux-gnueabi/ --host=arm-unknown-linux-gnueabi --without-cvs --disable-profile --disable-debug --without-gd --enable-shared --enable-add-ons=ports,nptl --with-headers=/mnt/compile/compile_source/embedded/src/linux/include --with-tls --with-__thread --disable-sanity-checks --cache-file=config.cache


make

make install


보시면 알겠지만 glibc는 그 자체로 무언가를 만들어내는게 아니기때문에 별도로 target이 지정되지 않습니다. 그리고 실제 arm에서 사용될것이기때문에 당연히 $XBUILDROOT/arm-unknown-linux-gnueabi/ 안쪽으로 내용들이 설치되게 됩니다.

configure를 잡으실때는 --with-headers쪽을 잘 참고해주세요. Kernel sourceinclude디렉토리를 정확하게 지정해주셔야 합니다.

3.5 target platformgcc cross compiler full build


위의 gccc compiler만 있는 glibc를 위한 상태라면 지금 빌드하는것은 위에서 만들어진 glibckernel source를 이용해서 실제 armbinary를 만들어낼 수 있는 compiler를 만드는 과정입니다.

이 과정에서 별도의 patch는 적용할 필요가 없습니다. (특정플랫폼용 버그가 있는경우는 예외가 되겠습니다만)


gcc source의 압축을 해제합니다. 다만 위쪽에서 만든 gccsource와 섞일 수 있는 가능성이 있기때문에 bootstrap gcc 디렉토리의 이름을 다른이름으로 변경하도록 합니다.

디렉토리 정리 및 압축해제가 끝나면 아래의 명령어로 gcc 빌드를 진행합니다.


mkdir buildx ; cd buildx


../configure --target=arm-unknown-linux-gnueabi --prefix=/mnt/compile/compile_source/embedded/ --disable-nls --enable-__cxa_atexit --enable-languages=c,c++,fortran,objc --enable-c99 --enable-long-long --enable-shared --enable-multilib --with-float=soft --enable-cxx-flags=-msoft-float –with-headers=/mnt/compile/compile_source/embedded/src/linux/include/


make

make install


이상으로 가장 기본적인 toolchain의 빌드가 종료되었습니다.


3.6 toolchain의 기본 테스트


제대로 toolchain이 빌드되었는지 확인하기위해서 다음의 명령어를 진행해 보도록 합니다.


echo "int main() {return 0;}" > test.c

arm-unknown-linux-gnueabi-gcc test.c -o test.bin


test.bin이라는 파일이 나오면 성공입니다.

이 파일을 file이라는 명령어를 통해서 상태를 점검해보도록 하겠습니다.


coreonion testcode # file test.bin

test.bin: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped


자 이로서 intel에서는 실행될 수 없는 arm용 바이너리를 PC에서 만들 수 있었습니다.

이외에 더 진행해야될 부분???이 많겠습니다만...

toolchain에 대한 기본적인 내용은 이것으로 준비가 되는것이기때문에

이 글은 여기서 ???치도록 하겠습니다.

4 참고문서


4.1 [Cross Compiler] ARM Toolchain 빌드하기 - added eabi[100914]

http://soul-partita.com/blog/tc/partita/entry/Cross-Compiler-ARM-Toolchain-%EB%B9%8C%EB%93%9C%ED%95%98%EA%B8%B0?category=22&TSSESSIONsoulpartitacomblogtc=75ca3af17fa64d7c5b51612f6e4c014a


4.2 Cross-compilation for gentoo linux

http://www.sable.mcgill.ca/~dbelan2/crossdev/crossdev-powerpc-i686.html


4.3 FA-linux 개발환경 구축

http://www.falinux.com/win/02_config/010_XScaleToolChain/index.htm


번호 제목 글쓴이 날짜 조회 수
31 유동 IP에서 DNS 서버 운영하기 - 4. 공유기 사용시 팁 미니샤 2011.08.21 5139
30 유동 IP에서 DNS 서버 운영하기 - 3. BIND 설정하기 미니샤 2011.08.21 5372
29 유동 IP에서 DNS 서버 운영하기 - 2. DDNS 서비스 이용하기 미니샤 2011.08.21 22185
28 유동 IP에서 DNS 서버 운영하기 - 1. DNS란? 미니샤 2011.08.21 5932
27 간단한 emerge 사용법입니다. [3] 미니샤 2011.08.20 5227
26 최근에 gentoo를 사용할때 rc-update [2] 잉여양파 2011.08.18 4348
25 최근에 gentoo를 설치할때의 주의점 [2] 잉여양파 2011.07.27 4000
24 thinkpad x200에서 x-windows가 intel driver로 안올라올때 잉여양파 2011.07.27 3966
23 gentoo의 x-windows 서버에 다른 머신의 program이 loading이 안될때 [4] 잉여양파 2011.07.24 3739
22 >= Firefox 4.x 에서 한글 입력이 안될 때 [2] 다크써클 2011.06.25 4957
21 chromium root로 실행시키기 [2] file 다크써클 2011.06.19 6100
20 LiveDVD 11.0 가지고 놀기 [3] 삼사라 2011.04.30 5306
19 2.6.36-r5 에서 uptime 사용시 문제. [4] 사랑천사 2011.03.27 6090
» Gentoo linux 64bit system에서 arm용 cross toolchain(until gcc) HOWTO [5] file 잉여양파 2011.03.22 8809
17 gentoo를 쓰면서 root계정으로 chrome 11버전을 사용할때의 한글입력 [2] 잉여양파 2011.03.21 7104
16 udev-151-r4 버그정보입니다.. 초보자들께서 혹시 모르실까봐 올립니다. 버닝산적 2011.03.07 4987