정보공간_1

[2기 강북 강동하] Nexus S기반의 커널 컴파일과 플래싱 본문

IT 놀이터/Elite Member Tech & Talk

[2기 강북 강동하] Nexus S기반의 커널 컴파일과 플래싱

알 수 없는 사용자 2012. 9. 23. 20:40

Nexus s 단말용 커널을 컴파일 하는 방법과 플래싱 하는 방법을 블로깅 해보도록 하겠습니다.

개발환경은 우분투10.10 64bit환경이고 타겟 Nexus s는 4.0.4환경입니다.


개발 환경설정을 해주어야하는데 온라인에 다양한 패키지 설치 설명들이 있고 

그중 제가 설치했던 패키지 방법은 아래와 같습니다.


add-apt-repository "deb http://archive.canonical.com/ lucid partner"

apt-get update

apt-get install sun-java6-jdk

apt-get install python

apt-get install git-core

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 lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils


그 뒤 커널소스를 다운받기 위해서는

git clone https://android.googlesource.com/kernel/samsung.git

을 이용합니다. 


그 외

$ git clone https://android.googlesource.com/kernel/common.git

$ git clone https://android.googlesource.com/kernel/exynos.git

$ git clone https://android.googlesource.com/kernel/goldfish.git

$ git clone https://android.googlesource.com/kernel/msm.git

$ git clone https://android.googlesource.com/kernel/omap.git

$ git clone https://android.googlesource.com/kernel/samsung.git

$ git clone https://android.googlesource.com/kernel/tegra.git

등으로 다양한 ap의 커널들을 다운 받을 수 있습니다. 

최근에 삼성에서는 http://opensource.samsung.com 에서 갤럭시와 같은 다양한 기종의 커널을 제공합니다.



다운로드가 완료과 된 뒤

git branch -a 를 입력하면 여러버전들이 존재합니다. 

그중 ics 버전 커널이 필요하므로 해당소스코드를 checkout 해줍니다.


git checkout /remote~~(branch 했을당시 나오는 경로)


그 뒤 해당 폴더로 들어가서 

 

export ARCH=arm

export SUBARCH=arm

export CROSS_COMPILE=arm-eabi-


설정 후


make herring_defconfig 로 커널 설정을 해줍니다. 

(넥서스 S 는 herring 또는 crespo 로 불리웁니다. 나중에 프레임워크 빌드시에는 crespo 로 설정해주기도합니다.)


마지막으로 make를 실행하면 

최종적으로 arch/arm/boot/zImage 로 컴파일 완료됩니다. (arm-eabi 가 오류가 나신다면 툴체인을 받아서 설정해주어야합니다.)



이렇게 만들어진 커널이미지를 nexus s에 플래싱 해야합니다.



먼저 nexus s 는 부트로더 언락이 필요하고 fastboot를 사용해서 언락과 플래싱을 진행합니다.


nexus s 파워 종료후 볼륨업버튼을 누른상태에서 파워를 누르면 부트로더로 진입하게됩니다.




해당이미지는 이미 UNLOCKED 된상태이고 초기에는 LOCKED 되어있는 상태입니다.

디바이스의 해당상태에서 PC와 연결하고, fastboot 툴을 다운받습니다. 안드로이드 sdk/platform-tools 에도 포함되어있고, 아니면 해당 실행파일만 구하셔서 하시면 됩니다.

윈도우의 커맨드창이나 리눅스의 터미널을 이용해서


fastboot oem unlock 을 입력하면 nexus s 단말기 상에서 언락하시겠냐는 경고문구가 뜨고 볼륩버튼과 파워버튼을 이용해서 Yes 를 선택하여줍니다.

그뒤 다시 부트로더로 진입하면 UNLOCKED 된상태가 될것입니다.


fastboot 명령어로 부트이미지나 프레임워크의 시스템이미지, 커널이미지 등을 writing 할수 있습니다

그러면 최종적으로 커널이미지 writing 방법은

fastboot flash zimage arch/arm/boot/zImage (로컬경로) 와 같은 방법으로 플래싱 할 수 있습니다.



초기에 안드로이드 커널과 프레임워크 개발환경 설정은 

http://source.android.com/source/index.html 사이트를 참고하시면 많은 도움이 됩니다.