본문 바로가기

프로그래밍/Android

커널 빌드하기

 

1. 툴체인 : 타겟 플랫폼에 맞게 바이너리를 생성하는 크로스 컴파일러 툴 모음

필요한 타겟에 맞게 툴체인을 설치한다.

http://www.codesourcery.com 이곳에서 제품목록에서 Sourcery G++ 중에

무료인 Lite Edition 을 선택한다.

 

프로세서와 타겟 플랫폼별로 다운로드 할 수 있다.

 

압축을 풀고, 해당 폴더를 export 시킨다.

걍 매번 구찮으면 ~/.bashrc 에 등록해버린다.

 

2. 커널 소스 다운로드

생성하려는 폴더 위치로 이동.

$ cd ~/mysource

 

최신버전의 커널 소스의 저장소를 클론(복사) 한다.

2010.1월 현재 2.6.27 버전이 클론된다.

$ sudo git clone git://android.git.kernel.org/kernel/common.git kernel

 

브랜치를 확인한다.

$ cd kernel

$ git branch

* andorid-2.6.27

 

 

2.5.29 버전을 체크아웃(업데이트)한다.

$ sudo git checkout --track -b android-2.6.29 origin/android-2.6.29

 

버전확인

$ git branch

 

 

기타 다른 커널버전등의 필요한 소스들은 아래 uir로~ 다운받는 방법은 동일하다.

http://android.git.kernel.org/

 

 

3. 소스정리

$ make mrproper

$ make distclean

 

4. Makefile 수정 : 아키텍쳐와 크로스컴파일러 수정

컴파일에 필요한 아키텍처명과 툴체인 정보를 기술한다. 그냥 make 시에 인자로 주어도 된다.

ARCH        ?= arm

CROSS_COMPILE ?= arm-generic-linux-gnueabi-

 

* 만약 안드로이드의 goldfish 를 사용하려면, 플랫폼 소스의 커널 디렉토리로 이동 후

초기화를 하고, 다시 컴파일 한다.

$ cd ~/mydroid/kernel

$ make goldfish_defconfig ARCH=arm

$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-

 

* /kernel/arch/arm/configs/ 디렉토리에 툴체인 설정파일들( defconfig )이 존재하는데,

위 과정은 이 파일을 디볼트 설정파일인 /kernel/.config 파일로 대체하게 된다.

 

5. 커널 환경설정 : 각종 커널 설정..

$ make menuconfig

 

 

6. 빌드

$ make zImage

 

음.... 이제 타겟에 올리는 것만 남았남? 긁적~

 

* 에뮬레이터의 경우 adb pull /proc/config.gz  에뮬레이터의 컨피그 정보를

가져와 해당 정보로 Makefile을 수정해서 컴파일하면 된다.