컨텐츠 영역
Gentoo linux 64bit system에서 arm용 cross toolchain(until gcc) HOWTO
2011.03.22 21:19
사실 보시기 편하라고 본문내용도 넣기는 합니다만...첨부파일로 PDF가 있으니
web이 보기 불편하신분은 그녀석을 봐주세요..(덜덜)
Gentoo linux 64bit system에서 arm용 cross 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는 다음과같은 과정으로 준비합니다.
gcc의 source를 unpack합니다.
그리고 소스 압축을 해제한 디렉토리로 이동합니다.
아래의 명령을 실행시켜줍니다.
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
어제 glibc의 build 및 설치를 진행합니다
../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 source의 include디렉토리를 정확하게 지정해주셔야 합니다.
3.5 target platform용 gcc cross compiler full build
위의 gcc가 c compiler만 있는 glibc를 위한 상태라면 지금 빌드하는것은 위에서 만들어진 glibc와 kernel source를 이용해서 실제 arm용 binary를 만들어낼 수 있는 compiler를 만드는 과정입니다.
이 과정에서 별도의 patch는 적용할 필요가 없습니다. (특정플랫폼용 버그가 있는경우는 예외가 되겠습니다만)
gcc source의 압축을 해제합니다. 다만 위쪽에서 만든 gcc의 source와 섞일 수 있는 가능성이 있기때문에 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]
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
댓글 5
-
잉여양파
2011.03.22 21:20
-
사랑천사
2011.03.22 22:35
네. 그러겠습니다.
-
잉여양파
2011.03.23 11:28
옮겨주셔서 감사합니다....
어제 첨부파일이 flash때문에 안올라가는바람에(이건 제 PC환경의문제)
삽질을 좀 하다가 게시물을 잘못 올렸네요....
죄송합니다...T.T
-
kukyakya.myid.net
2011.03.25 01:39
딴지는 아니구요.. 젠투에선 crossdev가 있어 크로스???파일러 빌드가 쉬운게 개발머신으로써의 장점 중 ???나라고 생각했는데, 직접 빌드해서 사용하시는데에 따로 이유가 있는지 알 수 있을까요?
-
잉여양파
2011.03.27 04:52
아.. 뭐 딱히 큰 이유는 아니구요..
1. 공부-구???이 뭔지 좀 궁금했어요.. 각 디렉토리의 의미까지말???죠 ㅎㅎㅎ
2. crossdev 실패 - 웬지는 모르겠는데 ???패했습니다.................-.-;
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 | virtualbox host와 guest 의 time 이 틀릴 때 [2] | golden | 2012.01.31 | 7645 |
14 |
egg압축해제용 unark ebuild
[4] ![]() | 찌푸린 | 2011.03.06 | 7750 |
13 | proftpd && sublime text 2 sftp [7] | 송효진 | 2013.03.27 | 8007 |
» |
Gentoo linux 64bit system에서 arm용 cross toolchain(until gcc) HOWTO
[5] ![]() | 잉여양파 | 2011.03.22 | 8811 |
11 | Nilay - nidev's 4th party ebuild repository | nidev | 2009.02.16 | 9620 |
10 |
Kaillera Server 설치하고 세팅하는 방법입니다.
[3] ![]() | 미니샤 | 2011.01.04 | 9883 |
9 | openRC-0.4.3-r3에서 net설정파일이 wpa_supplicant 모듈을 못???는경우. | Kamu | 2009.07.21 | 10721 |
8 | notification-daemon libnotify 순환의존성 문제 | 메이지 | 2009.01.16 | 11116 |
7 | redmine & thin 설정 조금. [1] | 송효진 | 2013.03.18 | 11137 |
6 | 젠투 시스템 자동으로 업그레이드 하게 만들기 | 다크써클 | 2011.01.19 | 12921 |
5 | 하하... 루트를 LVM 으로 했다가 캐삽질 하고 부팅 봤습니다. [1] | nsys | 2012.01.18 | 13275 |
4 | ASUS P5W DH Deluxe 부팅 딜레이 해결 | CrimsonM | 2008.06.25 | 13375 |
3 | NateOn plugin for Pidgin | 햄릿 | 2008.09.28 | 13831 |
2 | 무난 코딩 이빌드 [11] | 파옥 | 2012.11.14 | 20937 |
1 | 유동 IP에서 DNS 서버 운영하기 - 2. DDNS 서비스 이용하기 | 미니샤 | 2011.08.21 | 22206 |
헉..... 사랑천사님.. 이녀석 TIP게시판으로 이동좀 ???탁드려요...T.T