Arndale Board 상에서 안드로이드를 포팅 및 개발하기 위한 환경을 만들어보겠다.
기본 사양은 다음과 같다.

H/W ThinkPad X1 Cabon
S/W Ubuntu 12.04 64bit(on VMware)

참고로 설치 용량은 100G 기가로 잡았다. 또한 메모리 용량을 2G 이상(3G 권장)으로 잡는다.
안드로이드 Full 소스 코드 빌드 작업은 많은 리소스를 필요로 하기 때문에 CPU, 메모리 권장 사양을 만족하지 못하면 컴파일 에러가 발생할 수 있다.
특히 메모리 용량의 경우가 그렇다.
이 문서에서 설명하는 거의 모든 내용은 http://www.arndaleboard.org/wiki/index.php/WiKi 에서도 확인할 수 있다.

준비운동하기

우분투를 설치했다면, 안드로이드 컴파일에 필요한 패키지를 하나씩 설치해보자!

#apt-get install gcc
#apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386
#ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

http://www.arndaleboard.org/wiki/downloads/supports/arm-2009q3.tar 에서 다운로드 한다.

#tar xf arm-2009q3.tar -C /usr/local/

위와 같이 /usr/local 아래에 푼다. ~/.bashrc 파일에 다음을 추가한다.

export PATH=$PATH:/usr/local/arm-2009q3/bin

http://www.oracle.com/technetwork/java/javase/downloads 에서 JDK 를 다운로드한다. 이때, “Linux x64 (64bit)” jdk6u3X-linux-x64.bin 를 다운받도록 한다.

#chmod 777 jdk-6u41-linux-x64.bin
#mv jdk-6u41-linux-x64.bin /root/
#cd
#./jdk-6u41-linux-x64.bin 

.bashrc 파일에 다음을 추가한다.

export JAVA_HOME=~/jdk1.6.0_41
export ANDROID_JAVA_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin/:$PATH

여기의 내용은 http://source.android.com/source/downloading.html 를 참고했다.

#mkdir ~/bin
#PATH=~/bin:$PATH
#curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
#chmod a+x ~/bin/repo
#mkdir WORKING_DIRECTORY
#cd WORKING_DIRECTORY
#repo init -u git://git.insignal.co.kr/samsung/exynos/android/manifest.git -b jb
#repo sync

다운로드가 완료된 후에는 안드로이드 소스 트리가 받아진 것을 확인 할 수 있다.

디렉토리 설명
bionic 안드로이드 표준 라이브러리
bootable 참고용 안드로이드 부트로더
build 안드로이드 빌드 시스템
cts 안드로이드 호환성 테스트 프로그램
dalvik 달빅 가상 머신
development 개발 관련 지원 소스
external 공개용 라이브러리
frameworks 안드로이드 프레임 워크
hardware 안드로이드 HAL
out 빌드 후 최종 출력 파일 저장
package 안드로이드 기본 애플리케이션
prebuilt 컴파일러 저장
system 안드로이드 코어 프로그램, init 프로세스 등

스크립트 파일 다운로드

http://forum.insignal.co.kr/viewtopic.php?f=6&t=63 게시물에서 다운로드 받을 수 있는데, 사전에 로그인을 해야 한다.
여기서 'vendor_insignal_arndale_20121205_5bfcd73.run, vendor_samsung_slsi_exynos5250_20121127_2c9e06c.run' 을 다운로드 받는다.

#chmod 777 vendor_insignal_arndale_20121205_5bfcd73.run vendor_samsung_slsi_exynos5250_20121127_2c9e06c.run
#cp vendor_* /root/WORKING_DIRECTORY/
#cd /root/WORKING_DIRECTORY/
#./vendor_samsung_slsi_exynos5250_20121107_xxxxxx.run
#./vendor_insignal_arndale_xxxxxxxx_xxxxxxx.run
#source ./arndale_envsetup.sh

빌드 준비

#choosevariant
Variant choices are:
     1. user
     2. userdebug
     3. eng
Which would you like? [eng] 
#choosetype
Build type choices are:
     1. release
     2. debug
 
Which would you like? [1] 
#

부트로더 빌드

#cd < WORKING_DIRECTORY>/u-boot/
#make clobber
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- arndale_config
#make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- 

커널 빌드

#kernel_make distclean
#kernel_make arndale_android_defconfig
#kernel_make -j16

안드로이드 빌드

#apt-get install uboot-mkimage     // 설치 안했을 시, 빌드 도중 에러가 발생함함
#make kernel-binaries
#make -j4

상당히 오랜 시간이 소요된다. 멀티 프로세서로 빌드되기 때문에 도중에 에러가 발생하더라도 원인과 위치를 파악하기 어렵다.
이럴 때는 ramdisk.img.ub, system.img 파일이 있는지 검색하여 있으면 성공적으로 컴파일이 된 것이다.

fastboot and adb 빌드

#make fastboot adb

이제 개발을 하기위한 모든 준비가 끝났다. 앞서 빌드한 바이너리 이미지를 보드에 올려보자!
참고로 처음 보드 구입 시에 올라가 있던 바이너리 이미지는 http://www.arndaleboard.org/wiki/downloads/supports/rel-20121108/ 에서 받을 수 있다.

보드에 이미지 올리기

보드의 OTG 포트에 USB 케이블을 연결하고 이를 호스트 PC 에 꼽는다. 참고로 호스트 PC 는 리눅스이다. VMware 상의 Guest OS 에 연결하기 위해 'Removable Devices → Google' 을 선택하여 'Connect' 를 선택한다.

보드와 호스트 PC 를 시리얼 케이블로 연결하고, 부팅하자마자 엔터키를 눌러 부트로더 프롬프트로 빠져나온다.

U-Boot 2010.12 (Dec 08 2013 - 12:21:10) for Insignal Arndale
 
 
CPU: S5PC520 Rev1.0 [Samsung SOC on SMP Platform Base on ARM CortexA15]
APLL = 1400MHz, MPLL = 800MHz, EPLL = 96MHz, VPLL = 300MHz, BPLL = 666MHz
DRAM:  2047 MiB
 
TrustZone Enabled BSP
BL1 version: 20120430
PMIC: S5M8767
 
Checking Boot Mode ... EMMC4.41
REVISION: 1.0
REVISION: 1.0
NAME: S5P_MSHC0
MMC Device 0: 3816 MB
[ERROR] response timeout error : 00000104 cmd 1
[ERROR] response timeout error : 00000104 cmd 1
MMC Device 1: 0 MB
MMC Device 2 not found
*** Warning - using default environment
 
Hit any key to stop autoboot:  0 
Arndale # 

그리고 특정 명령어로 OTG 가 연결되었는지를 체크한다.

Arndale # fastboot
[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x2 len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='ramdisk' start=N/A len=0x0(~27262976KB) (use hard-coded info. (cmd: movi))
ptn 6 name='system' start=0x2 len=0x0(~520060928KB) 
ptn 7 name='userdata' start=0x2 len=0x0(~520028160KB) 
ptn 8 name='cache' start=0x2 len=0x0(~520028160KB) 
ptn 9 name='fat' start=0x2 len=0x0(~-1885700096KB) 
OTG cable Connected!

위와 같이 출력 메세지가 나왔다면, 이제 호스트 PC 로 가자. 그리고 아래와 같이 명령한다.

#fastboot flash bootloader < WORKING_DIRECTORY>/u-boot/u-boot.bin              // 부트로더
#fastboot flash kernel <WORKING_DIRECTORY>/kernel/arch/arm/boot/zImage                        // 커널
#fastboot flash ramdisk <WORKING_DIRECTORY>/out/target/product/arndale/ramdisk.img.ub      // 램디스크 이미지
#fastboot flash system <WORKING_DIRECTORY>/out/target/product/arndale/system.img         // 시스템 이미지
#fastboot erase userdata                    //  Userdata 영역 삭제
#fastboot erase cache                       //  Cache 영역 삭제
#fastboot reboot                          // 재부팅

이제 새로 만든 이미지로 부팅할 것이다.

FAQ

target SharedLib: libwebcore (out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so)
 
collect2: ld returned 1 exit status
 
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1

VMware 같은 가상 시스템 상에서 빌드 시에 발생할 수 있는 에러로서, 빌드하는 Guest OS 의 메모리를 2G 이상으로 늘려 설정한다.

보드를 구입했을 때는 기본적으로 안드로이드가 올라가 있는 상태다. 그래서 전원을 연결하면, 안드로이드 ICS 버전을 확인할 수 있다.
일반 핸드폰에서 보던 것과는 조금 다른데, 태블릿용 안드로이드이기 때문이다. 또한 안드로이드 앱을 다운로드할 수 있는 구글 플레이(google play) 앱이 보이지 않는다.
별도로 설치해 주어야 하는데, 참고로 이와 관련하여 내가 질문을 올렸다. http://forum.insignal.co.kr/viewtopic.php?f=10&t=2468

이에 대한 답변으로 무사히 설치할 수 있었다. http://www.cnx-software.com/2012/08/07/hardkernel-odroid-x-review-with-android-4-0-4/ 에 가면 자세히 설명되어 있다.

  1. http://goo.im/gapps/gapps-ics-20120429-signed.zip 에서 파일을 다운로드 받는다.
  2. USB 케이블로 보드와 Host PC 를 연결한다. 보드에서 'USB 디버깅 연결됨, 미디어 기기로 연결됨' 이라는 메세지가 나오는지 확인한다. 나의 경우, 안드로이드를 빌드한 VMware 를 실행시킨다.

그리고 다음과 같이 실행한다.

#mkdir ics
#mv gapps-ics-20120429-signed.zip ics
#cd ics
#/root/WORKING_DIRECTORY/out/host/linux-x86/bin/adb reboot
#/root/WORKING_DIRECTORY/out/host/linux-x86/bin/adb push system /system
#/root/WORKING_DIRECTORY/out/host/linux-x86/bin/adb reboot

마지막 명령을 실행하면, 보드가 재부팅된다. 이제 구글 플레이 아이콘을 찾아보자.

데비안에서 개발에 필요한 프로그램을 설치해보자!

# mkdir android && cd android
# apt-get install build-essential
# echo "deb-src http://debian.ens-cachan.fr/ftp/debian/ sid main contrib non-free" > /etc/apt/sources.list.d/sid-sources.list
# apt-get update
# apt-get build-dep android-tools
# apt-get source --build android-tools
# rm /etc/apt/sources.list.d/sid-sources.list

디렉토리에 android-tools-adb_xxx_arch.deb, android-tools-fastboot_xxx_arch.deb, android-tools-fsutils__xxx_arch.deb 파일이 보일 것이다.
이제 설치하자.

#dpkg -i android-tools-*.deb

앞서 받은 Repository 에서 파일 시스템과 각 소스코드의 위치는 다음과 같다.

디버깅을 위한 실행 로그를 얻기 위해서는 호스트 PC 상에서 아래와 같이 명령한다.

#adb logcat

안드로이드 상에서 Hello world 프로그램을 만드는 것은 생각 외로 복잡하다. 기존의 방법대로 소스코드를 빌드했다가는 아래와 같이 에러가 발생하거나,

#arm-eabi-gcc -static -o test test.c
#arm-linux-androideabi-gcc -static -o test test.c
test.c:1:19: fatal error: stdio.h: No such file or directory 

아래와 같이 빌드가 되었더라도, 바이너리가 실행이 안되는 문제에 봉착한다(퍼미션이 없다는 오류).

#arm-none-gnueabi-gcc -static -o test test.c

이를 해결하기 위해서는 몇 가지 절차가 필요하다.

#cd WORKING_DIRECTORY
#mkdir -p external/helloandroid
#vi external/helloandroid/Android.mk

이 후에 만들 소스코드를 빌드할 makefile(Android.mk) 을 생성해야 한다. 아래와 같이 작성한다.

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
           helloandroid.c
LOCAL_MODULE := helloandroid
LOCAL_MODULE_TAGS := eng # lunch insingal_origen-eng
LOCAL_C_INCLUDES := frameworks/base/include \
           system/core/include
#LOCAL_CFLAGS := -G
include $(BUILD_EXECUTABLE)

external/helloandroid/helloandroid.c 파일을 작성한다.

#include <stdio.h>
 
char * krrr_func(){
printf("Krrrrrrrrrrrr ..... :-) \n");
return "chlrbgh0";
}
 
int main()
{
printf("Hello, Android!!\n");
printf("Hello %s!!\n", krrr_func());
return 0;
}

이제 빌드할 차례다.

# <환경 설정 파일 실행>
#cd external/helloandroid
#mm

에러가 없다면, out/target/product/arndale/system/bin 아래에 helloandroid 파일이 보일 것이다.
전체 빌드를 해서, 이미지(system.img)를 Writing 한 후 시리얼 상에서 확인해보자!

shell@android:/ $ helloandroid                                                 
Hello, Android!
Krrrrrrrrr... 
Hello chlrbgh0!!

좀더 간편한 방법은 다음과 같다.

#cd /root/origen_dual-ics
#adb remount
#adb push ./out/target/product/origen/system/bin/helloandroid /system/bin/.
#adb shell
#helloandroid

앞서 안드로이드 개발 환경 구축 및 빌드 과정에 대해 알아보았다. 참고로 안드로이드 전체 소스코드를 빌드하면, 약 40GB 정도의 용량이 된다.
매번 소스코드를 다운로드 받는 것도 이후 빌드하는 것도 수월한 일은 아니다. 따라서 기존에 구축되어 있는 가상 이미지를 사용하면, 소요되는 시간을 획기적으로 줄일 수 있다.
이미지 파일은 아래의 주소에서 다운받을 수 있다. 전체 사이즈가 40GB 가 넘기 때문에, 다운로드하는데 걸리는 시간도 오래걸리고, 차지하는 사이즈도 크다.

ftp://ftp.insignal.co.kr/arndaleboard/ubuntu64-12.04.vdi

다운받은 파일의 확장자는 .vdi 로 원래는 virtual box 에서 지원하는 포맷이다. 하지만 어찌된 영문인지 최신판 virtual box 를 설치했더니, 이 파일을 인식하지 못했다.

나는 개인적으로 virtual box 보다는 vmware 를 선호하는데, 기존의 .vdi 포맷을 vmware 가 지원하는 .vmdk 포맷으로 바꾸는 방법을 구글링을 통해 찾았다.

이방법을 사용하기 위해서는 먼저 virtual box 를 설치해야 한다. 그리고 나서 명령을 실행하면 된다.

#apt-get install virtualbox
#vboxmanage clonehd ubuntu64-12.04.vdi ubuntu64-12.04.vmdk --format VMDK

파일 사이즈가 크기 때문에 소요시간이 꽤 걸린다.

vmware 를 실행하고 'File → New Virtual Machine' 를 선택한다. 'Custom → I will install the operating system later. → Linux(Ubuntu 64-bit) → 설치경로(/vm) → 메모리(3072 MB) → Use an existing virtual disk → Existing Disk File(ubuntu64-12.04.vmdk 위치지정) → Keep Existing Format' 순으로 선택한다.

부팅 시키면, 우분투가 부팅하면서 GUI 가 보인다. 로그인 계정 정보는 아래 표와 같다.

ID insignal
Password a

개발 환경 설치 경로는 /home/insignal/arndale 이다.

이제 작업을 하면 된다.

  • computer/embedded/exynos_5250_-_개발환경_구축하기.txt
  • Last modified: 3 years ago
  • by likewind