강좌 & 팁
왜 툴체인을 만들었냐구요?
그야 필요하니까 만들었죠..
구글 Chromium OS에서 ARM 빌드를 제공해주긴 합니다. 다만 그게 armv7에 최적화된 툴체인을 이용한 빌드라는게 문제죠.
보리에서 사용할 프로세서는 아시다시피 s3c6410 입니다. 정확히 이 프로세서의 정식 명칭은 ' ARMv6KZ' 입니다.
편하게 armv6라고 하겠습니다.
1. 크로미움 OS의 툴체인 분석
크로미움 OS를 분석의 첫단계는 빌드 전 과정을 분석하는 일이였습니다.
먼저 setup_board 스크립트를 통해 보드가 셋팅되는 과정을 알아보았습니다. 제일 먼저 살펴본 부분은 툴체인을 빌드하고 설치하는 부분이였습니다. 왜냐하면 모든 패키지는 소스코드 형태로 존재할 테고 그걸 툴체인을 이용하여 빌드한 다음 보드환경에 설치할 것이기 때문입니다.
전체적인 빌드환경이 젠투이기 때문에 크로미움 OS는 crossdev라는 스크립트를 이용하여 툴체인을 빌드합니다.
이 글을 쓰는 동안에도 스크립트가 수정되어서 분석하던 것과 많이 달라졌네요..
if [ $FLAGS_latest_toolchain -ne $FLAGS_TRUE ]; then CROSS_ARGS+=" --binutils $FLAGS_binutils_version" CROSS_ARGS+=" --gcc $FLAGS_gcc_version" CROSS_ARGS+=" --kernel $FLAGS_kernel_version" CROSS_ARGS+=" --libc $FLAGS_libc_version" fi sudo -E FEATURES="splitdebug" crossdev $CROSS_ARGS
바로 이 부분입니다. CROSS_ARGS 에 툴체인에 필요한 툴들에 대한 버전을 명시해준 뒤 crossdev의 인자로 넘기네요. 일단 이 명령어를 별도로 실행해서 어디에 어떤 내용을 수행하나 추적해나갔습니다.
이전 버전의 명령어를 실행해보도록 하겠습니다. 별 차이가 없으니 상관없습니다.
sudo -E FEATURES=splitdebug PORTAGE_BINHOST=http://commondatastorage.googleapis.com/chromeos-prebuilt/host/amd64/13.04.11.101441/packages crossdev -v -P --oneshot --target armv7a-cros-linux-gnueabi --binutils 2.20.1-r7 --gcc 4.4.3-r7 --kernel 2.6.30-r1 --libc 2.10.1-r2 --portage -G --portage --binpkg-respect-use=n --portage --usepkg=n --without-headers
위 명령어를 실행한 결과 chroot 환경안에 armv7a-cros-linux-gnueabi- 라는 prefix를 가진 툴체인이 설치된 것을 확인할 수 있었습니다.
2. 기존 툴체인 사용가능 여부 확인
일단 armv7 이라고 툴체인의 prefix에 명시가 되어있었지만 혹시나 하는 마음에 우리가 사용하는 보드에서 실행이 될 까 하고 테스트 코드를 빌드해보았습니다. 관련된 라이브러리에 독립적으로 하기 위해 static 빌드를 했습니다.
armv7a-cros-linux-gnueabi-gcc -static test.c -o test
과연 될까요? 보드에서 실행이 되지 않았습니다.. 이말은 이 툴체인이 armv7에 최적화 되었다는 말입니다.
이제 뭘 해야 할까요. 툴체인 만들어야죠 뭐. 인터넷에서 뒤져봐도 x86_64 용 툴체인은 안나오길레 직접 빌드하기로 맘먹었습니다.
다음시간에는 툴체인을 직접 빌드해보도록 하겠습니다.
내용이 궁금하신분은 http://wiki.borios.co.kr 에서 내용을 확인하세요 ~
요기요 요기 툴체인 빌드하기