안드로이드 커널 및 SDK 소스 코드를 컴파일 하기 위한 환경 설정은
아래 구글 안드로이드 사이트에 명시되어 있다.
http://source.android.com/source/initializing.html
1 . 기본적으로 설치되어야 하는 패키지들
위의 안드로이드 사이트에 명시된 기본적으로 필요한 패키지들은 다음과 같다.
- Python 2.5 -- 2.7, which you can download from python.org.
- GNU Make 3.81 -- 3.82, which you can download from gnu.org,
- JDK 6 if you wish to build Gingerbread or newer; JDK 5 for Froyo or older.
- Git 1.7 or newer. You can find it at git-scm.com.
|
① Python and Make Utility
Python이나 Make 유틸리티 같은 경우에는 기본적으로 리눅스 패키지에 포함되어 있다.
혹시 설치 시에 누락되었을 경우 apt-get 설치 관리자를 통하여 쉽게 다음 명령어로 쉽게 설치 가능하다.
$ sudo apt-get install python $ sudo apt-get install make |
② JAVA JDK
JDK를 설치하는 방법은 다음과 같이 안드로이드 사이트에 명시되어 있다.
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
sudo apt-get update sudo apt-get install sun-java6-jdk
|
하지만, JAVA가 Oracle에 인수되서 그런지 sun-java6-jdk 패키지는 존재하지 않는다.
따라서, 다른 방법을 통해 설치해야 한다.
먼저, python-software-properties 패키지가 필요한데 보통은 기본적으로 깔려있다.
하지만 없는 경우도 있으니 다음 커맨드로 먼저 설치하여 준다.
$ sudo apt-get install python-software-properties |
그리고 나서 다음 명령을 입력하여 준다.
첫 번째 명령을 치면 계속하려면 Enter, 중지하려면 Ctrl + C 키를 입력하라고 나오는데
ENTER를 쳐주면 계속해서 다운로드 패키지를 등록한다.
$ sudo add-apt-repository ppa:ferramroberto/java $ sudo apt-get update |
그러면 sun-java6-jdk 패키지가 등록이 되고 설치가 된다. java6-jdk와 플러그인 설치를 위해
다음의 명령어로 설치 할 수 있다.
$ sudo apt-get install sun-java6-jdk sun-java6-plugin |
그런데 위의 명령을 통해서 JDK를 설치 할 수 있으나 버젼이 java 6만이 가능하다.
따라서 java7, java8 등 상위버전을 설치하고 싶다면 다음 명령으로 설치 가능하다.
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update |
그러면 Oracle Java Installer를 통해서 원하는 버전의 자바 JDK의 설치가 가능하다.
Java 6를 설치하려면,
$ sudo apt-get install oracle-java6-installer |
Java 7을 설치하려면,
$ sudo apt-get install oracle-java7-installer |
Java 8을 설치하려면,
$ sudo apt-get install oracle-java8-installer |
설치 후 이미 중복 설치되어 있는 여러버전의 JDK를 관리해 줄 필요가 있을 수 있다.
그럴 때는 다음 명령어를 통해서 원하는 JDK를 선택하여 주면 된다.
$ sudo update-alternatives --config java |
선택 경로 우선순 상태 ----------------------------------------------------------------------------------------------------- * 0 /usr/lib/jvm/java-8-oracle/jre/bin/java 1062 자동 모드 1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 수동 모드 2 /usr/lib/jvm/java-8-oracle/jre/bin/java 1062 수동 모드
기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오: |
그럼 위와 같은 콘솔 화면이 나오는데 목록 중 원하는 JDK의 번호를 입력하여 선택해 주면 된다.
선택된 자바의 버전을 확인하기 위해서 다음 명령어를 통해 확인하여 본다.
$ java -version |
③ GIT
리눅스 커널은 git에 의해 버전이 관리되고 다운로드 할 수 있다.
따라서 git을 설치해주어야 한다. git 또한 apt-get을 이용하여 손쉽게 설치 가능하다.
$ sudo apt-get install git |
2. 필요한 라이브러리 패키지들
우분투의 버전마다 필요한 라이브러리가 살짝 다르긴 하다. 구글에서는 우분트 10.04 64비트를 권장하고 있다.
안드로이드 사이트에서는 우분투 버전 10.04 ~ 11.10에 해당하는 시스템들은 다음 명령어를 통하여 필요한 라이브러리를 설치하라고 명시되어 있다.
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproc |
하지만, 이 또한 업데이트가 되지 않아 몇 가지 라이브러리가 오류가 발생한다.
오류가 발생하거나 대체된 것들을 수정한 다음 명령어를 실행하면 한번에 설치 가능하다.
[ ubuntu 10.04에서 ]
$ sudo sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproc libpcsclite-dev |
[ ubuntu 11.10에서 ]
$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 python-markdown libxml2-utils xsltproc libpcsclite-dev |
우분투 10.10 인 경우에는 다음 명령을 통하여 링크하나를 생성해 준다.
$ sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so |
우분투 11.10은 추가적으로 패키지 하나를 추가로 설치하여 준다.
$ sudo apt-get install libx11-dev:i386 |
우분투 12.04 버전인 경우 다음 명령을 통하여 설치해 준다.
$ sudo 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 |
하지만 libgl1-mesa-glx:i386 패키지가 libglapi-mesa:i386 의존성으로 인해 설치가 안 되므로
libglapi-mesa:i386패키지를 추가하여 설치하여 준다. 또한 "make menuconfig"를 수행하기 위하여
필요한 lib32ncurses5-dev 도 미리 설치하여 준다.
$ sudo 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 libglapi-mesa:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 openjdk-6-jdk tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lib32ncurses5-dev |
혹시 다음과 같은 에러가 발생한다면,
다음 패키지의 의존성이 맞지 않습니다: |
위의 패키지에서 libncurses5-dev만 빼고 설치 후
$ sudo apt-get install lib32ncurses5-dev 명령으로 libncurses5-dev만 따로 설치해 준다.
다음 명령을 통하여 링크 파일도 생성하여 준다.
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so |
3. USB 접근(Access) 설정 --> 생략 가능할 것 같음
안드로이드 사이트의 설명에 의하면 기본적으로 GNU/Linux 시스템은 일반 유저가 티폴트 설정에 의해 USB 장치에 직접적으로 접근할 수 없다고 명시되어 있다. 하지만 안드로이드 시스템은 이런 접근을 허용되는 설정이 필요하다고 한다.
이를 해결하기 위한 추천 방안은 /etc/udev/rules.d/51-android.rules 파일을 생성하는 것이다.
파일의 내용은 다음과 같이 적어주면 된다.
여기서 주의할 것은 <username>이라 적힌것은 그대로 쓰는게 아니라
폰에서 USB로 접근 권한을 받을 유저의 이름(계정이름)으로 대체 해주어야 한다.
# adb protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
# fastboot protocol on passion (Nexus One)
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
# adb protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
# fastboot protocol on crespo/crespo4g (Nexus S)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
# adb protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", MODE="0600", OWNER="<username>"
# fastboot protocol on stingray/wingray (Xoom)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="708c", MODE="0600", OWNER="<username>"
# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="<username>"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="<username>"
# adb protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d101", MODE="0600", OWNER="<username>"
# fastboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d022", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d00f", MODE="0600", OWNER="<username>"
# usbboot protocol on panda (PandaBoard ES)
SUBSYSTEM=="usb", ATTR{idVendor}=="0451", ATTR{idProduct}=="d010", MODE="0600", OWNER="<username>"
# adb protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", MODE="0600", OWNER="<username>"
# fastboot protocol on grouper/tilapia (Nexus 7)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e40", MODE="0600", OWNER="<username>"
# adb protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", MODE="0600", OWNER="<username>"
# fastboot protocol on manta (Nexus 10)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee0", MODE="0600", OWNER="<username>"
이런 새로운 규칙은 장치를 플러그 인하고 나서 적용 된다.
따라서 장치를 뽑고 컴퓨터에 다시 플러그할 필요가 있을지도 모른다.
이것은 우분투 Hardy Heron (8.04.x LTS)과 Lucid Lynx (10.04.x LTS) 둘 다 작동한다고 알려져있다. 다른 버젼의 우분투 또는 다른 변종 GNU/Linux에서는 다른 설정이 필요할지도 모른다.
4. ccache의 설정
당신은 ccache 툴 모음을 사용할 것인지 빌드 시 마음대로 알릴 수 있다. ccache는 리빌드시 속력을 빠르게 하는데 사용할 수 있는 컴파일러 캐시로써 동작한다. 이 작업은 당신이 "make clean"을 자주 하거나 다른 빌드 결과물 사이에서 빈번하게 스위치 한다면 매우 좋다.
이것을 사용하기 위해서는 다음 라인을 .bashrc 안에 넣어두면 된다.
export USE_CCACHE=1
export CCACHE_DIR=<path-to-your-cache-directory>
당신은 다운된 소스코드에 한번의 아래 커맨드를 따라 하는 것이 필요할 것이다.
prebuilts/misc/linux-x86/ccache/ccache -M 50G
아이스크림 샌드위치 (ICS, 4.0.x) 또는 상위 버전일 때, ccache는 다른 곳에 위치한다.
prebuilt/linux-x86/ccache/ccache -M 50G
이 세팅은 CCACHE_DIR에 저장되고 계속 지속될 것이다.
5. 별도의 아웃풋 디렉토리를 사용
디폴트 설정에 의하면 각 빌드의 아웃풋은 소스 트리에 일치하는 서브디렉토리 중
out/ 디렉토리에 저장된다.
이것을 설정하기 위해 당신이 아웃풋 디렉토리로 저장되 길 원하는 곳을 가리키는 OUT_DIR_COMMON_BASE 변수를 export 할 수 있다.
export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
각 별도의 소스 트리의 아웃풋 디렉토리는 소스 트리를 가지고 있는 디렉토리의 이름을 따서 명명된다.
예를 들어, 당신은 /source/master1 and /source/master2 라는 소스 트리가 있고, OUT_DIR_COMMON_BASE는 /output 이라고 세팅되어 있을 때,
아웃풋 디렉토리는 /output/master1 and /output/master2 가 될 것이다.
이것은 오직 마스터 브랜치(master branch)가 포함된 젤리빈(4.1)과 더 최신 버전에서만 지원된다.
출처 : http://blog.naver.com/mannunt?Redirect=Log&logNo=70158997181
'UNIX' 카테고리의 다른 글
Origen보드에 Linaro-Linux 올리기 -- SD카드에 Kernel 이미지 쓰기 질문 (0) | 2013.07.12 |
---|---|
우분투 12.04 LTS 안드로이드 개발환경 설정 (3) | 2013.07.10 |
tools/pm-qa not a valid sha1 error (2) | 2013.07.06 |
unable to auto-detect email address (0) | 2013.07.06 |
access denied or repository not exported: /platform/manifest.git (0) | 2013.07.06 |