2007 2013 Kandroid
www.kandroid.org »
kandroid s/w fundamentals 교육 »
Kandroid Toolchain 
"Kandroid Toolchain" is Development tool for compiling android kernel and system libraries
(ex: webkit, sqlite, libc, Etc) in android softwar stack for kandroid.org members.
This Toolchain is a collection of software tools used for the development and building of software
for a particular target architecture like ARM.

[common]Kandroid Toolchain Ver.20090108 for Cortex-A8
작성자 인베인
작성일 2009-10-08 (목) 11:05
ㆍ추천: 0  ㆍ조회: 8271      
IP: 202.xxx.254
안드로이드 커널 및 시스템 라이브러리 (예: libc , webkit , sqlite , etc), 기존 C/++ 코드 재사용을 위한 처지에
있는 분들이 안드로이드용 툴체인을 반드시 사용해야 되는 경우에 해당될것으로 알고 있습니다. 아래의 툴체인을
사용하시면서 버그 및 문제 사항들을 댓글로 올려 주시면 신속히 조치 및 의견을 드리겠습니다.
제작된 본 툴체인으로 arm cortex-a8 이상의 타겟보드에서 테스트를 마쳤습니다.

 ( * 테스트된 타겟보드:  LogicPD-omap3430 , OMAP3430SDP ,  S3C100/110  , ODROID , Nexsus One )
 
 
     Kandroid Toolchain Ver.20090108 for Cortex-A8
     ---------------------------------------------
 


1. Definition

  "Kandroid Toolchain" is Development tool for compiling android kernel and system libraries
   (ex: webkit, sqlite, libc, Etc) in android software stack for kandroid.org members.
  This Tool-chain is a collection of software tools used for the development and building of software
   for a particular target architecture like ARM.
 
2. Goal
  -Easy to Use (Just decompress using tar command)
  -EABI  Support ( ABI Compatibility )
  -Support various compiler like gcc , g++
  -The recent opensource version to reduce gap between versions.
  -NPTL Thread Model (Kernel Requirement : FUTEX , EPOLL)
  -Hard Floating Point is default setting(Hard-Float).
  -Little Endian is default setting.
  -Support MPFR for multiple-precision floating-point computations with correct rounding.
  -Include GDB, Strace for Fast Debugging and Tuning
 

3. Package Version information

-Supported DesktopLinux : Fedora cor 6+ , CentOS 5.X , Ubuntu 8.04.X (official linux distributionn for android)
-Target              : arm-cortex_a8-linux-gnueabi       
-gcc version       : 4.4.0
-libc                  : glibc (GNU C Library)  2.11
                          uClibc 0.90.3
-binutils version  : 2.19.1
-kernel headers   : 2.6.27
-float support      : hard-float
                   (If have some problems, Use the options -mfpu=vfp{vfp|vfp3|neon} -mfloat-abi=softfp
                    to enable VFP instructions. )
-Multiple-precision:
   . GMP   4.3.1 (LGPL) : Gnu Multiple Precision arithmetic library (http://gmplib.org/manual/ )
   . MPFR 2.4.1 (LGPL) : C library for multiple-precision floating-point computations (http://www.mpfr.org/)
-Threading model : NPTL(Native Posix Thread Library)
-Misc  : GDB 6.8, strace 4.5.18 , ltrace 0.5.2 , DUMA(Detect Unintended Memory Access) 2.5.15 , dmalloc 5.5.2
-Release history
  2009.10.08  1st release
  2010.01.08  2nd release
-Source list:
      .binutils-2.19.1.tar.bz2 (a collection of binary tools like ld,as,ar,objdump)
      .cloog-ppl-0.15.7.tar.gz (library to generate code for scanning Z-polyhedra)
      .dmalloc-5.5.2.tgz  (Debug Malloc Library)
      .duma_2_5_15.tar.gz (Detect Unintended Memory Access)
      .gcc-4.4.3.tar.bz2  (GNU compiler collection)
      .gdb-7.0.1.tar.bz2  (GNU Debugger)
      .glibc-2.11.tar.bz2  (GNU C library)
      .glibc-ports-2.11.tar.bz2  (ports for GNU C library)
      .gmp-4.3.1.tar.bz2 (Gnu Multiple Precision arithmetic library)
      .libelf-0.8.11.tar.gz (library to read, modify or create ELF files in an architecture-independent way.)
      .linux-2.6.27.45.tar.bz2 ( Linux kernel to build cross toolchain)
      .ltrace-0.5.2.tar.gz (intercepts and records dynamic library calls)
      .mpc-0.8.1.tar.gz (C library for the arithmetic of complex numbers)
      .mpfr-2.4.2.tar.bz2 (C library for multiple-precision floating-point computations)
      .ncurses-5.7.tar.gz  (software emulation of curses in System)
      .ppl-0.10.2.tar.bz2 (The Parma Polyhedra Library)
      .sstrip.c (a small utility that removes a few bytes from an executable)
      .strace-4.5.18.tar.bz2 (a system call tracer)

 
 
4. Official License
   GPL V3
 

5. Requirement
   -Architecture:  ARMV7
   -CPU Core  :  ARM Cortex-a8
   -Recommendation Targetboard:  omap3430 SDP (Cortex-A8)
   -Host Linux Distribution(Recommend) : CentOS 5.X ,   Fedora  11
 

6. Howto install iconv to use kandroid toolchain

6.1  for Fedora/RHEL/CENTOS
fedora11#> wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
fedora11#> ./configure --prefix=/usr
fedora11#> make
fedora11#> make install
fedora11#> ldconfig


6.2 for Ubuntu 8.04
u804#> apt-get install build-essential
u804#> wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
u804#> ./configure --prefix=/usr
u804#> make
u804#> make install
u804#> ldconfig



7. Kandroid toolchain installation

fedora11#> cd /opt
feodra9#> wget  [☜ 아래 파일 다운로드 ]
  Mirror) http://android-group-korea.googlecode.com/files/arm-cortex_a8-linux-gnueabi-20100108.1030.tar.bz2
 
  Mirror) http://android-group-korea.googlecode.com/files/arm-cortex_a8_kandroid-linux-uclibcgnueabi-20100308.tar.bz2
 
fedora11#> tar xvzf arm-cortex_a8-linux-gnueabi.20100108.1030.tar.bz2
fedora11#> cd ./arm-cortex_a8-linux-gnueabi-20100108.1030/arm-cortex_a8-linux-gnueabi/bin
fedora11#> ls
arm-cortex_a8-linux-gnueabi-addr2line     arm-cortex_a8-linux-gnueabi-gcc-4.4.0  arm-cortex_a8-linux-gnueabi-populate
arm-cortex_a8-linux-gnueabi-ar            arm-cortex_a8-linux-gnueabi-gccbug     arm-cortex_a8-linux-gnueabi-ranlib
arm-cortex_a8-linux-gnueabi-as            arm-cortex_a8-linux-gnueabi-gcov       arm-cortex_a8-linux-gnueabi-readelf
arm-cortex_a8-linux-gnueabi-c++           arm-cortex_a8-linux-gnueabi-gdb        arm-cortex_a8-linux-gnueabi-run
arm-cortex_a8-linux-gnueabi-c++filt       arm-cortex_a8-linux-gnueabi-gdbtui     arm-cortex_a8-linux-gnueabi-size
arm-cortex_a8-linux-gnueabi-cc            arm-cortex_a8-linux-gnueabi-gprof      arm-cortex_a8-linux-gnueabi-sstrip
arm-cortex_a8-linux-gnueabi-cpp           arm-cortex_a8-linux-gnueabi-ld         arm-cortex_a8-linux-gnueabi-strings
arm-cortex_a8-linux-gnueabi-ct-ng.config  arm-cortex_a8-linux-gnueabi-nm         arm-cortex_a8-linux-gnueabi-strip
arm-cortex_a8-linux-gnueabi-g++           arm-cortex_a8-linux-gnueabi-objcopy    hello
arm-cortex_a8-linux-gnueabi-gcc           arm-cortex_a8-linux-gnueabi-objdump    hello.c
----------------------------------------------------------------------------------------
fedora11#>
fedora11#> ./arm-cortex_a8-linux-gnueabi-gcc -v
fedora11#> ls ./arm-cortex_a8-linux-gnueabi/sys-root ( This directory is rootfs[73M] for target board )
etc  lib  sbin  usr

fedora11#> ./arm-cortex_a8-linux-gnueabi-gcc -o hello  hello.c

fedora11#> vi toolpath-automation.sh
#!/bin/bash
export PATH=/opt/arm-cortex_a8-linux-gnueabi/bin:$PATH
export CC=arm-cortex_a8-linux-gnueabi-gcc
export LD=arm-cortex_a8-linux-gnueabi-ld
export AR=arm-cortex_a8-linux-gnueabi-ar
export RANLIB=arm-cortex_a8-linux-gnueabi-ranlib
export CPP=arm-cortex_a8-linux-gnueabi-cpp
fedora11#>

 Ok. It's finished installation android tool-chain successfully.
 Enjoy!
 
 
8. Bug Report or Contacts
   Use http://kandroid.org website  or leemgs@gmail.com
   For example, Compile  your android kernel source or system libraries with this android toolchain.
 

9. Ref
    -gcc 4.4 depends on mpfr>=2.4.1

 
10. Kandroid Toolchain's Merits against other toolcahin
 - This is analysis contents based on Android perflab(Google)  benchmark results,

1).  Baseline: Current Android’s default toolchain: gcc-4.2.1
      Package              Cupcake                  Donut                     Eclair (armv7a)
    ---------------------------------------------------------------------------------------------------
     gcc                    4.2.1                   4.2.1                         4.4.0
     binutils               2.17                    2.17                           2.19
     gdb                    6.6                     6.6                            6.6
     gmp                    4.2.2                   4.2.2                          4.2.4
     mpfr                   2.3.0                   2.3.0                          2.4.1
     tuning                GCC-4.2.1                GCC-4.4.0         GCC-4.4.0 (tuned inline options)
    ----------------------------------------------------------------------------------------------------
   native systemimage     23,931,314              23,108,942         23,351,142

  -  Android default inline options: -finline-functions  -fno-inline-functions-called-once

2).  Size:
• Both gcc-4.4.1 & gcc-4.4.0: 17.5% improvement
• Both gcc-4.3.3 & gcc-4.3.3 based Toolchain Version: 15% better
• gcc-4.3.1: 3% improvement

3). Performance: No significant variance among many toolchains.
• gcc-4.4’s size benefit comes with no performance penalty

4). Kandroid’s strength: Addressing ARM’s hardware errata early. We then port the fixes to gcc-4.4.0
• gcc-4.4 wins : Toolchain  moved to 4.4 now.
        



11. Todo

  - Support  ltrace for glibc api and user libraries  tracing
  - Extensible cross languages like ada , object C ,object C++
  -  --enable-thread-safe  option problem of MPFR configure command.
  - I have to improve  floating point caculation by default.

#> ./arm-cortex_a8-linux-gnueabi-gcc -v
Using built-in specs.
Target: armv7fl-kandroid-linux-gnueabi
Configured with: ../configure --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=armv7fl-kandroid-linux-gnueabi --prefix=/opt/kandroid/foundation/devkit/arm/v7_vfp_le --exec-prefix=/opt/kandroid/foundation/devkit/arm/v7_vfp_le --bindir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/bin --sbindir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/sbin --sysconfdir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/etc --datadir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/share --includedir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/include --libdir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/lib --libexecdir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/libexec --localstatedir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/var --sharedstatedir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/share --mandir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/man --infodir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/info --build=i686-pc-linux-gnu --program-transform-name=s,^,arm_v7_vfp_le-, --enable-cross --enable-poison-system-directories --with-sysroot=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/target --with-build-sysroot=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/target --with-build-time-tools=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/bin --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-c99 --enable-long-long --enable-threads=posix --with-gxx-include-dir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/lib/gcc/armv7fl-kandroid-linux-gnueabi/4.2.0/../../../../target/usr/include/c++/4.2.0 --disable-libmudflap --disable-libssp --disable-libgomp --with-gnu-as --with-gnu-ld --enable-symvers=gnu --enable-checking=release --with-numa-policy=yes --disable-multilib --enable-clocale=gnu --with-cpu=cortex-a8 --with-interwork --with-arch=armv7-a --with-mode=arm --with-tune=cortex-a8 --with-fpu=vfp3 --with-float=softfp --libexecdir=/opt/kandroid/foundation/devkit/arm/v7_vfp_le/lib --with-bugurl=http://www.mvista.com/support --with-versuffix='kandroid 4.2.0-16.0.22.0800973 2008-05-05' --with-license=/opt/kandroid/common
Thread model: posix
gcc version 4.4.0


end of line.
이름아이콘 인베인
2009-10-08 15:35
위의 툴체인(cortex-a8)  사용중에 발생한 문제들은 댓글로 작성해주시면 답변을 올리겠습니다.  cortex-a8 기반 Odroid (http://www.aesop.or.kr/?document_srl=72890#2 ) 개발보드 사용자도 환영합니다. ^^
   
이름아이콘 인베인
2009-10-15 10:24
컵케이크 -> 도넛 다음 버젼은  --> Eclair(에클레어)가 될예정입니다. ^^
TaekLove 참 브랜치명이.. 먹는것 뿐있네요.ㅎㅎ 맛있는 구글.
빵을 참 좋아하는 가봐요~ㅎㅎ
10/15 13:44
인베인 TaekLove님 반갑습니다. ^^ 네 데비안 배포판은 영화 토이즈의 캐릭터를, 우부누투 배포판은 동물이름을, 페도라배포판은 술/왕이름을, 안드로이드는 군침도는 빵을 선택하기로 한것 같습니다. 10/16 06:59
   
이름아이콘 엠브리오
2009-10-15 23:48
맞는 표현인지는 모르겠으나
굳이 번역하자면 슈크림이 들어간 "크림빵?" 정도가 되겠네요. ^^;
인베인 브랜치명이 갑자기 바뀔수도 있겠지만, 모구글직원에 의하면 이 빵은 가늘고 긴 슈크림에 초콜릿을 뿌린 것을 말하고 있다고 합니다. 10/16 07:14
자하랑 다음 버전은 flan 이던데.... 이건 도대체 뭔 빵인지. pastry일종이라고 하는거 같긴 한데... 10/16 11:22
인베인 자하랑님 오랜만입니다. 지난번 교수님 감사했습니다. flan은 빵종류라기보다는 과자류에 가까워 보이므로 무효...^^ 10/16 12:12
   
이름아이콘 엠브리오
2009-10-16 14:09
자하랑님 예전에 KIDS에서 활동하셨던 분인가요?
자하랑 kids가 뭐죠? kidsb.net 뭐 이런걸까요? 몰라요~ 10/16 16:21
   
이름아이콘 엠브리오
2009-10-16 17:35
제가 말씀드린 KIDS는 여기였습니다.
http://kids.kornet.net
자하랑 http://kidsb.net 하고 다른 곳인가요??? 후다닥 =3=3=3 10/16 21:14
인베인 같은 곳 같습니다만... 10/17 11:57
   
이름아이콘 엠브리오
2009-10-17 14:37
제가 잠시 착각을 했나봅니다. ^^;
좋은 주말 되시옵소서..
   
이름아이콘 인베인
2010-01-06 20:09
Cortex-A8코어를 사용하는 스냅샷드랜곤 개발보드 또는 이 계열의 개발보드에서 커널 소스 및 C/C++ 오픈소스가 정상적으로 동작되는 것을 확인하였습니다. 사용중에 문제가 있으신분은 언제든지 댓글 문의 환영하옵니다.
   
이름아이콘 인베인
2010-01-08 11:55
Cortex-A8 툴체인을 업데이트 하였습니다. 업데이트된 이번 버젼부터는 Fedor core 6이상의 사용자들에게 지원이 되도록 하였습니다. 그리고  numerical abstractions을 위한 Parma Polyhedra 라이브러리를 추가하였습니다.
*Before: Fedora 11이상버젼 (Only) 리눅스 배포판 지원
* After : Fedora 6이상버젼  and CentOS 5.4 리눅스 배포판 지원
인베인 현재 릴리즈한 툴체인을 이용하여 성능 비교를 해본 결과 기존 안드로이드 툴체인 및 코드소스리툴체인에 비해서 9~ 16%의 성능우위를 확인하였씁니다. 제품개발자들에게 도움이 되시길 바라며... 1/8 17:06
   
이름아이콘 챨리권
2010-01-08 15:27
진정 이렇게 묵묵히 바닥을 다지시는분이 계시기에 그위에 개발자들이 꽃을 피울수 있는거겠죠.. 모든 오픈소스 공헌자들에게 다시한번 경의를 표하는 바입니다.
인베인 간신히 허둥지둥하고 있는 수준이라 어찌할바를 모르겠사옵니다. 1/8 17:04
   
이름아이콘 인베인
2010-01-09 19:11
cortex-a8 를 위한 "arm-cortex_a8-linux-gnueabi-20100108.1030.tar.bz2" 버젼부터는 ubuntu 8.04을 추가로  정상 지원합니다. ( 페도라/레드헷만 지원하려다가, 안드로이드의 공식권장 리눅스 배포판이 우분투 8.04인 관계로  효과적으로 이용할수 있기 위해서  . . . . . . . . . .  )
인베인 우분투 8.04에서 테스트를 도와주신 보배랑님께 이글을 빌어 감사 드립니다. ^^ 1/9 19:13
   
 
덧글 쓰기 0
3500
※ 회원등급 레벨 0 이상 읽기가 가능한 게시판입니다.
    N     분류     제목    글쓴이 작성일 조회
12 Multicore向 Unified KToolChain ver2.6 (20130105) [14]+22 인베인 2012-05-16 4894
11 [cortex-A9]멀티코어향 칸드로이드 툴체인(v2.1-20110815).. [12]+36 인베인 2010-11-26 7712
10 SuperH 아키텍쳐용 툴체인 추가 [2] 인베인 2010-03-17 3420
9 [common]Kandroid Toolchain Ver.20090108 for Cortex-A8 [10]+11 인베인 2009-10-08 8271
8 [common]Kandroid Toolchain Ver.20081022 for Android 1.0 [3]+1 인베인 2008-11-13 4249
7 [문의] busybox build 성공하신 분 계신가요? [7] khjung 2008-10-23 3829
6 Kandroid 툴체인용 리눅스 데스크탑 안내(Fedora 6 ~ 9).. [1] invain 2008-07-03 3996
5 [arm926ej-S]ver 1.1.2.4-glibc (Jul 02, 2008) [4] invain 2008-07-02 2642
4    Re.. Android c run time is different from ... ? [13] t-rex 2008-07-25 2260
3 [xscale] ver 1.1.2.3-glibc (Jun 23, 2008) [1] invain 2008-06-23 2573
2 [armv6-11XX] ver 1.1.2.2-uclibc (Jun 05, 2008) invain 2008-06-05 2385
1 [armv6-arm1136] 칸드로이드 툴체인 (ver1.1.2.1-20080330).. [4]+5 invain 2008-05-31 5890
1