안드로이드 포팅 - 4


다운받은 소스를 빌드해볼 차례다.


나의 최종 목표는 MV V210에 마시멜로를 올려보는 것이다. 전문용어로 target 이 MV V210 이라는 말씀.

그렇게 하려면, MV V210 에 맞게 안드로이드가 빌드되어야하는 건 당연한 일이지만, 

아직 V210에 맞게 소스를 수정하는 작업을 하지는 않고 빌드 절차에 관해서만 살펴보려고 한다.


빌드 해보자

http://source.android.com/source/building.html


위 링크에 가면 빌드 절차가 설명되어 있다.

두번째 문단에 Android 6.0 이상을 빌드할 때 새로운 툴체인, Jack 을 사용할 수 있다는 말이 있다. Jack 에 관해서는 다음에 살펴봐야겠다.


환경설정

우선 터미널 열고, work 디렉토리로 간다.

거기서 아래 명령을 실행해 환경 설정부터 하자.





target 선택

어느 하드웨어에 맞춰서 빌드를 할 것인가를 선택해주어야한다.


명령은 아래의 형태를 가진다.


$ lunch BUILD-BUILDTYPE


예)

$ lunch asop_arm-eng


asop_arm은 타겟, eng 는 아래의 설명에 따른다.


user : 최종 상품? 결과물에 적합

userdebug : user 와 비슷하고 root 권한 접근이 가능하다. 디버깅에 적합

eng : 개발 중일 때 이용할만한 설정


나중에는 asop_arm 자리에 mvv210 을 사용해 빌드할 수 있도록 작업을 해 줘야할 것이다.


그냥 lunch 만 입력하면 아래처럼 가능한 옵션들이 나타난다.



이 21개의 선택지들은 어디서 오는지 나중에 살펴봐야겠다. 어디 mk 파일이 존재할 것이다. 지금은 빌드 절차에 집중하자.

aosp_arm-eng 를 선택했다.




빌드환경 설정값들이 보인다. PLATFORM_VERSION=6.0.1 보니 마시멜로가 맞다.

BUILD_ID=MHC19J 도 맞네..소스는 마시멜로 제대로 받아진 모양이다.




진짜 빌드


$ make -j4


make 명령으로 빌드를 시작하는데, -j4 옵션은 병렬 작업 갯수를 지정해주는 거 같다. 컴퓨터 성능에 따라, CPU 코어 쓰레드 갯수의 2배정도를 설정해주면 되는거 같다.

내 컴퓨터는 intel core i5-3450 인데 찾아보니 쓰레드가 4개라고 나왔다. 그래서 난 -j8 옵션을 주고 실행시키겠다.


오래 걸리겠지..


make 걸고... 끝나면 정리를 계속 해야겠다....라고 생각했으나,




OpenJDK 7 이 필요하다고 한다. 



이렇게 알려줘놓고 OpenJDK 7이 필요하다니..


다시 돌아가서 JDK 설치를 다시 해야겠다.


이전 포스팅 수정하고 돌아왔다.


이제 빌드가 진행이 된다.



빌드 끝나고 다시 돌아오겠다..


약 2시간 후...




1시간 49분 40초만에 make 완료!


~/work/out 에 ramdisk.img, system.img, userdata.img 등 결과파일들이 있다.


후... 아직까지는 순조롭네.








Posted by 똑똑한 영장류

안드로이드 포팅 - 3



이어서 소스 다운로드를 하도록 하겠다.

안드로이드 소스는 구글이 관리하고 있으며, repo 를 이용해서 손쉽게 접근이 가능하단다.


Repo 설치

홈디렉토리 아래에 bin 디렉토리를 만들고 PATH에 추가해준다.

$ mkdir ~/bin

$ PATH=~/bin:$PATH


그리고, 다운로드!

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo





Repo client 초기화

1. 작업디렉토리 만들기

$ mkdir ~/work

$ cd ~/work


2. 이름이랑 이메일 주소로 git 설정하기

$ git config --global user.name "Your Name"

$ git config --global user.email "you@example.com"


3.작업디렉토리 초기화 하기

master 체크아웃 하려면 아래처럼 하면 되는데,

$ repo init -u https://android.googlesource.com/platform/manifest


나는 마시멜로가 필요하니까, 브랜치를 지정해서 아래처럼 해야된단다.

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r22


-b 뒤에 오는 android-6.0.1_r22 는 http://source.android.com/source/build-numbers.html#source-code-tags-and-builds 에서 확인할 수 있는데, 마시멜로 중에 가장 높은 버전을 선택했다.


실행시키니까 빠르게 뭔가 지나가고 아래처럼 끝이 난다.



빠르게 지나가는 중에, 뭔가 에러 메세지를 본 거 같아 다시 실행시켜봤는데, 별말이 없다. 터미널 버퍼를 더 늘여야겠다. 지나간거 보려니 버퍼에 남아있지가 않았다.




~/work 디렉토리에 .repo 디렉토리가 생긴 걸 보니, 잘 된거겠지...



이제 다운로드!

work 디렉토리에서 아래처럼 입력한다.

$ repo sync





복잡하게 많이 지나간다~~~




오래 걸린다~~ 1시간쯤 지나고 나니 완료가 됐다.




work 디렉토리에 많이도 생겼다. 용량은 41기가 정도된다.


소스를 다운받았으니, 빌드를 해 봐야겠네.

빌드는 다음 포스팅에서 정리해야겠다.






Posted by 똑똑한 영장류

안드로이드 포팅 - 2


http://source.android.com/source/initializing.html


우분투 14.04.4 데스크탑 64비트를 설치하고 돌아왔다.

이제 위 링크에서 설명하고 있는대로 하나씩 개발환경을 꾸려보겠다.


1. 브랜치 선택하기

오픈소스로 개발되고 있는 안드로이드 AOSP 는 깃으로 관리되고 있고, 각각의 버전들은 별도의 브랜치라는 깃 개념으로 구분할 수 있다.

AOSP 라는 큰 줄기가 쭈~~욱 진행되어 가고 있고, 의미있는 개별 버전들은 그 큰 줄기에서 가지치고 나온 것들이라 보면 되겠다.


난 이미 6.0 마시멜로를 선택했다.


2. 리눅스 개발 환경 꾸리기

맥이 아닌 리눅스에서 개발하기로 결정했으니, 리눅스 개발 환경 관련 글을 따라간다.

리눅스는 우분투 14.04.4 64비트 데스크탑 으로 설치를 했다.


JDK 설치

깨끗한 우분투에 JDK 를 설치하자.


Oracle Java JDK 7 설치하고 빌드를 시도했더니 OpenJDK 7이 필요하다고 해서 OpenJDK 7을 설치했다.


설치는 아주 쉽다.


$ sudo apt-get install openjdk-7-jdk





OpenJDK 7 설치완료. 내가 설치했던 Oracle Java 를 제치고 0순위가 되어있다.


그 외 필요한 패키지 설치

우분투 14.04 에서는 아래처럼 하라고 한다. 터미널에 입력!


$ sudo apt-get install git-core gnupg flex bison gperf build-essential \

  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \

  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \

  libgl1-mesa-dev libxml2-utils xsltproc unzip






y 입력해줘야겠지..




설치가 금방 끝이 난다.


USB 접근 설정

우분투에서 기본적으로는 일반 유저가 USB에 직접 접근이 허용되지 않는데, 이걸 가능하게 해 줘야한단다. 디바이스 테스트할 때 필요한 일인듯 하다.


root 권한으로 아래처럼 입력해서 /etc/udev/rules.d/51-android.rules 를 만들어주면 된다고 한다. <username> 부분은 내 리눅스 계정 넣으면 될거 같다.


$ wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules






/etc/udev/rules.d/ 안에 보니, 51-android.rules 가 생겼다.





별도의 결과물 디렉토리 사용하기

기본적으로 빌드 결과물은 소스 디렉토리 아래에 /out 이라는 디렉토리에 저장된다는데, 결과물 저장할 디렉토리를 다른 속도 빠른 디스크에 설정해놓으면 빌드 성능 향상이 있다고 한다. 필요하면 OUT_DIR_COMMON_BASE 라는 환경변수에다가 디렉토리 위치 잡아주면 된단다. 난 다른 디스크 없으니, 그냥 간다....


export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>


여기까지 개발 환경 꾸리기가 끝났다. 개발환경이라기 보다 빌드환경이라는 말이 더 맞겠다..싶다..


그 뒤 글에 ccache 를 이용해서 빌드할때 속도 향상을 꽤 할 수 있다는데, 하드 용량 많이 차지하는거 같아..이것도 패스한다.


이제 다음 단계는 소스를 다운로드 받는 부분이다.

다음 단계니까, 다음 포스팅에....






Posted by 똑똑한 영장류

안드로이드 포팅 - 1


안드로이드 플랫폼

오늘부터 기록할 내용은 '안드로이드 포팅'에 관한 내용이다.

안드로이드 스마트폰용 앱을 만드는 것에 관한 내용이 아니라, 운영체제로서의 안드로이드에 관한 것이다.

운영체재로서의 안드로이드를 다른 말로 '안드로이드 플랫폼'이라고도 한다.



Android Framework ( Applications 가 앱이니까, 그 아래 모두 들고 파야... )


(주)마이크로비젼에서 판매하는 MV V210 이라는 개발보드를 가지고 있다.

삼성에서 생산하는 CPU, S5PV210 을 사용하고 있으며 512MB RAM, 256MB NAND Flash 가 Main Board를 구성하고 있다.

MV V210은 처음에 안드로이드 버전 2.2 '프로요'가 이식되어 출시되었고, 이후 버전 4.0 '아이스크림 샌드위치(ICS)' 이식을 지원 해줬다.

현재 최신의 안드로이드 버전이 6.0 '마시멜로'니까 한참 철지난 버전되시겠다.


ICS 이식은 제공해준 매뉴얼대로하면 별 무리 없이 할 수 있다. 그러나...

이 MV V210 을 참고로 개발하고 있는 단말기에 올려야하는 앱 중 하나가, 버전 4.4 킷캣 이상에서 정상 동작한다고 해서, 킷캣 이상의 안드로이드를 포팅해야하는 상황이 발생했다.


해 보는 수 밖에...


MV V210, 마시멜로 포팅 결정!

킷캣을 이식할까? 아니면, 기왕 하는 김에 마시멜로를 이식할까? 고민이 되는데.

주변 장치 이식은 잠시 접어두고, 메인보드 사양에 이식이 가능은 할까?

S5PV210 에는 안되요. 라던가, 메모리 512MB에는 안 돌아갈걸요? 라던가... 잘 모르겠으므로... 

우선 포팅 절차를 익힌다는 생각으로 마시멜로로 시도해보기로 했다.


안드로이드 본부, http://source.android.com 를 들고 파야할 운명을 맞이했다.


개발자의 숙명, 개발 환경 꾸리기

http://source.android.com/source/requirements.html 에 가서 개발환경 꾸리는 방법을 먼저 살펴봤다.


하드웨어 요구사항

- 진져브레드(2.3.x) 이상은 64비트 환경이 필요함

- checkout 에 최소 100기가, 싱글 빌드에 150기가 디스크 공간이 필요함

- 가상머신에 리눅스 돌릴거면 메모리가 최소 16기가는 필요함


소프트웨어 요구사항(이라기보다 환경)

리눅스나 맥에서 빌드가 가능


리눅스의 경우

6.0 마시멜로 ~ AOSP master : Ubuntu 14.04

2.3.x ~ 5.x : Ubuntu 12.04

1.5 ~ 2.2.x : Ubuntu 10.04


JDK

AOSP master : OpenJDK 8

5.x ~ 6.0 : Java JDK 7 ?????

2.3.x ~ 4.4.x : Java JDK 6

1.5 ~ 2.2.x : Java JDK 5


(미래에서 왔습니다. 마시멜로 6.0.1 빌드를 시도했더니 OpenJDK 7이 필요하다고 빌드가 중단됩니다.)


Python 2.6 ~ 2.7

GNU Make 3.81 - 3.82

Git 1.7 이상


이 정도가 필요한 것들이다.

나는 리눅스에서 마시멜로를 빌드할 것이니, Ubuntu 14.04, Java JDK 7 OpenJDK 7이 필요하다. 

가상머신을 이용하기보다 노는 컴퓨터 하나 통채로 사용하기로 한다.


아래 링크에 개발 환경 꾸리는 과정이 자세히 설명되어있다.


Establishing a Build Environment

http://source.android.com/source/initializing.html


우선 노는 컴퓨터에 우분투부터 설치하고 계속해야겠다.

설치할 우분투는 Ubuntu 14.04.4 LTS 64-bit 이다. 다운받은 정확한 이미지 파일명은 ubuntu-14.04.4-desktop-amd64.iso 이다.










Posted by 똑똑한 영장류