Crosstool을 이용한 Softfloat EABI 툴체인 빌드 방법

 안드로이드에서 구동될 커널이나 C/C++ 애플리케이션, 라이브러리 등은 ARM용 EABI와 soft-float을 지원하는 툴체인으로 빌드되어야 합니다. 현재 많이 쓰이는 안드로이드 포팅이나 라이브러리 빌드를 위해 사용하는 툴체인을 실제 구글링해보시면 대부분 Codesourcery 사의 툴체인을 사용 중인 것 같은데요. 저 역시, 처음에는 Codesourcery 사의 2008q3 버전의 툴체인(arm-none-linux-gnueabi-*)을 사용했었습니다. 그런데, 그 툴체인으로 커널을 빌드하니까, 왠 일인지 이미지만 3GB인지, 300MB인지가 나와서 실제 부팅 중 Uncompressing Linux…………….. 메시지에서 재부팅되거나 멈춰버리는 것이었습니다.
 그래서, 자체적으로 툴체인 빌드를 하기 위한 방법을 찾아보았습니다. KLDP 위키의 Android Porting On Real Target 에서 역시 툴체인 빌드를 해서 썼다고 되어 있기 때문이기도 하구요. 일단은 KLDP 위키의 방법과 같은 방법을 사용하기로 하고(저 역시,
“To make life easier,”) 같은 방법인 crosstool과 EABI patch를 이용하기로 했습니다. 다음은 그 방법을 설명합니다.

 일단, http://www.kegel.com/crosstool/ 에서 crosstool 0.43을 다운로드 받고 압축을 해제합니다.
 crosstool의 사용법은 http://www.kegel.com/crosstool/current/doc/crosstool-howto.html 에서 설명하고 있습니다. 약간 설명을 드리자면, 빌드하고자 하는 툴체인의 .sh 파일 안의 TARBALLS_DIR, RESULT_TOP, GCC_LANGUAGES 를 수정해야 하는데, TARBALLS_DIR은 crosstool이 받아올 Source tarball을 저장할 디렉토리이고, RESULT_TOP은 빌드된 최종 툴체인이 저장될 디렉토리의 탑 디렉토리(이 디렉토리는 만들어져 있어야 하고, 빌드하는 유저에게 쓰기 권한이 있어야 합니다.), GCC_LANGUAGES 는 빌드할 툴체인에서 지원할 언어에 대한 것입니다. 파일을 열어보시면 금방 아실 수 있을 겁니다.
 자, 이제 soft-float eabi 패치를 구하여야 합니다. KLDP 위키 글을 따라가보면, Khem Raj의 a glibc 2.5+ nptl build for arm softfloat eabi patch를 적용했다고 나와 있습니다. 링크된 글의 본문에 나와있는 패치를 파일로 저장한 후 아까 받았던 crosstool에 적용시킵니다. 패치를 적용한 후 빌드를 수행하면, 잘 되지 않습니다. follow된 글을 따라가보면 스크립트 안의 "-nounpack" 옵션을 제거하고 다시 해보란 코멘트를 찾아볼 수 있습니다.
 그럼 -nounpack을 제거하고 다시 시도해 봅시다. 그래도 잘 안될텐데, 기억에는 아마도 arm-softfloat.dat 파일 안의 “KERNELCONFIG=`pwd`/arm.config” 내용을 그대로 복사해서 arm-softfloat-eabi.dat 파일 안에 넣어주었던 것 같습니다. 그리고 나서도 저는 안되었는데, 그 이유는 스크립트 내부에서 사용되는 awk를 gawk가 아닌 mawk를 사용해서 발생한 문제였습니다. 우분투 8.04에서 기본으로 깔린 awk가 mawk더군요(제가 진행한 작업은 모두 우분투 8.04 하에서 진행되었습니다.). mawk를 사용하고 싶다면, http://sourceware.org/ml/crossgcc/2007-07/msg00029.html 을 참조하여 패치한 후 진행합니다. 그냥 귀찮다면, 패치 제작자가 권장하는 gawk를 사용하시구요. 우분투에서 기본 awk를 gawk로 바꾸는 방법은 gawk를 내려받아 설치한 후(sudo apt-get install gawk), 기본 awk를 gawk로 설정하시면(sudo update-alternative –config awk:확실하지 않습니다.;;) 될 겁니다.
 아무튼, 이제 빌드하면(당연히 빌드 이전에 demo-arm-softfloat-eabi.sh 파일 안의 세 변수는 적절히 설정되어 있어야 합니다.) 설정되어 있던 디렉토리에 툴체인이 빌드되어 있는 것을 보실 수 있습니다.

 KLDP의 원문을 곱씹으며 읽어볼겸, 영어공부도 할겸, 영어에 익숙하지 않은 개발자를 위해서겸, 겸사겸사, 번역해 보았습니다. 허접한 번역이지만 보실 분은 http://wiki.dasomoli.org/wiki.php/AndroidPortingOnRealTarget/ko 를 보시면 됩니다(우리나라 사람이 쓴 원문을 번역한다는 것이 참 아이러니합니다만..).

2 thoughts to “Crosstool을 이용한 Softfloat EABI 툴체인 빌드 방법”

  1. 공부중에 이곳을 찾아 내용을 따라가던중에

    “Khem Raj의 a glibc 2.5+ nptl build for arm softfloat eabi patch를 적용했다고 나와 있습니다. 링크된 글의 본문에 나와있는 패치를 파일로 저장한 후 아까 받았던 crosstool에 적용시킵니다.”

    이 부분에서 막혔습니다. 조금 더 구체적으로 설명 해주실 수 있을까요? ㅠㅠ

    1. 링크된 “glibc 2.5+ nptl build for arm softfloat eabi patch” 글을 보시면 아래에 diff 뜬 내용이 보이실 겁니다. 그 diff 내용을 patch를 이용해 적용시킨다고 말씀드린거예요~ diff나 patch에 관한 것은 일반적인 내용이니 찾아보시면 될겁니다^^

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다