ubuntu 11.04 (내가 제일 좋아하는 ubuntu 버전)에서 android gingerbread(진저브레드)  소스 컴파일에 대한 정보이다.
 인터넷에서 검색하면 예전 버전들이 많았다. git repository 위치도 달라서 그냥 다 될 것이라는 기대는 하면 안된다. 공식싸이트(http://source.android.com/source/downloading.html)가 그나마 가장 신뢰해야한다는 생각을 다시 하게 되었다. 

구글에 올라온 정보가 약간 틀려서, 조금 수정했다. 

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk

$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev  ant gcc-multilib g++-multilib

$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

$mkdir my-android

$ cd my-android

나는 진저 브레드 브랜치로 다운받음
$  ~/bin/repo init -u https://android.googlesource.com/platform/manifest -b  gingerbread
($ ~/bin/repo init -u https://android.googlesource.com/platform/manifest 이렇게 해서 받을 수도 있지만, 

$ ~/bin/repo sync
check out 받는 거라 시간이 많이 소요됨

$  source build/envsetup.sh

$  lunch full-eng


빌드과정이라 시간이 많이 소요됨. 4cpu를 다쓸 수 있게 설정함.
$ make -j4

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.3.7
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=GINGERBREAD
============================================

 

디폴트는 타겟이 arm 기반이라서 안드로이드를 ubuntu에서 돌릴 수 없으나, 잘 바꾸면 돌아갈 수도 있을 것 같다. 





ramdisk.img,  system.img, userdata.img  파일이 빌드 결과물에 있다.
ramdisk.img 는 개발할때 root fs를 ram에서 실행하기 위해서 필요하다.
system.img는 안드로이드 플랫폼용 이미지이다.
userdata.img는 임베디드 어플단 이미지이다.

이렇게 이미지를 나누어서 flash에 구워진다.

이외,  root.img가 만들 수 있는데. 이는 root 디렉토리를 이미지화한 것으로 '/'를 의미한다. 즉 부팅에 대한 초기화 내용이 들어가 있다.
시스템에서는 root/init.rc에 정보를 읽을 것이다.


/system 은 system.img, /data는 userdata.img, 나머지 /는 root.img 을 의미한다.
그래서 안드로이드 파일 시스템 구조는 이렇게 구성이 된다.




(http://blog.naver.com/PostView.nhn?blogId=limpe&logNo=20115813026&redirect=Dlog&widgetTypeCall=true 그림만 참조)


재미있는 것은  root/init.goldfish.rc 파일도 볼 수 있는데, 이는 가상의 하드웨어의 이름이다. init.xxx.rc 파일은 하드웨어 vendor에 따른 초기화를 의미한다 .

arm9기반에서 동작되는 것처럼 지원하는 초기화 이름을 goldfish 라고 해서 사용되고 있는데, 이 파일이 init.goldfish.rc 파일이다.


Posted by '김용환'
,