- 설정이 안된 바닐라 커널 2.6.27로 진행을 하고자 하였지만 설정 할 것이 너무 많아 프로젝트 진행이 원할하지 못할 것 같아 안드로이드에서 배포하는 안드로이드-리눅스 커널 2.6.29를 사용하기로 하였습니다.
1. 우선 android kernel을 받습니다. (이 버전은 2.6.27입니다.) $ git clone git://android.git.kernel.org/kernel/common.git kernel
2. 2.6.29로 업데이트 하기 위해서 $ cd kernel $ git checkout --track -b android-2.6.29 origin/android-2.6.29
하면 update가 됩니다.
$ git branch해 보시면 android-2.6.27 버전과 android-2.6.29 버전이 보입니다. * 표시가 있는 게 현재 버전입니다
- 원활한 작업을 위해 개발툴들을 설치해 줍니다.
· Git (버전 1.5.4 이상)와 GNU Privacy Guard
$ sudo apt-get install git-core gnupg
· JDK 5.0, update 12 또는 그 이상
$ sudo apt-get install sun-java6-jdk
· Flex, bison, gperf, libsdk-dev, libesd0-dev, libwxgtk2.6-dev(optional), build-essential, zip ,curl
$ sudo apt-get install flex bison gperf libsdk-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev
· Valgrind, memory leaks, stack corruption, array bounds overflows 등을 찾는데 사용한다.
$ sudo apt-get install valgrind
· Intrepid(8.10) 사용자는 새로운 버전의 libreadline이 필요할 수도 있다.
$ sudo apt-get install lib32readline5-dev
· Repo 스크립트를 다운로드하고 실행 파일로 속성을 변경한다.
$ curl http://android.git.kernel.org/repo > ~/bin/repo
- 안드로이드 소스를 다운받고 빌드합니다.
· 최신 버전의 repo를 다운 받기 위해 repo init을 실행한다.
$ repo init –u git://android.git.kernel.org/platform/manifest.git
· 안드로이드 소스를 다운로드할 디렉토리로 이동하여 다음 명령을 실행한다.
$ repo sync
· 안드로이드 소스 트리의 최상위 디렉토리에서 make를 실행하므로 소스코드 전체(커널 제외)를
빌드할 수 있다.
$ make
- 위에 안드로이드 소스 빌드는 커널을 제외하고 실행됩니다. 커널을 포팅할 보드에 맞춰서 설정 및 수정한 수 따로 빌드해야 합니다.
- 먼저 ‘$make allnoconfig’ 명령어를 이용하여 설정 사항을 모두 없애고 보드에 맞는 설정을 하나씩 추가하여 커널을 설정하기로 하였습니다.
- 보드 매뉴얼을 보고 각각의 장비에 대한 설정을 enable 시켜주고 android와 관련된 설정사항을 enable 해줍니다.
- 크로스컴파일을 하기 위해 다운받은 안드로이드 커널 안에서 ‘arm-eabi-gcc’가 있는 폴더를 찾아 경로설정을 해줍니다.
- ‘$make ARCH=arm CROSS_COMPILE=arm-eabi-‘ 명령어로 kernel을 빌드합니다. 여기서 몇 번 에러가 발생하였지만 설정을 수정하여 리빌드하여 커널 이미지인 zImage 파일을 만듭니다.
- 보드에 minicom을 이용하여 커널을 다운로드 합니다. 이때 보드에 있는 부트로더는 blob으로 호스트에서 보드로 다운로드 할 수 있는 명령으로 xdownload가 있는데 이것은 xmodem 프롬프트를 이용하여 시리얼로 다운로드를 할 수 있는 명령어입니다.
- 여기서 작업이 중단되었는데 xmodem은 시리얼포트 다운로드 프로토콜인데 우리는 ‘USB to 시리얼’ 케이블을 사용하여 다운로드가 실행되지 않았습니다. 그래서 노트북이 아닌 PC에서 시리얼 포트를 연결하고 실행을 시켜보니 다운로드가 실행 되었습니다.
- 커널을 다운로드하고 보드의 Flashmemory에 저장을 하고 재부팅을 해보았지만 커널이 실행되지 않았습니다.
- 커널의 루트파일시스템 설정 및 세부적인 설정이 잘못되어 커널이 작동하지 않는 것으로 예상이 되어 현재 이 부분 설정을 작업 중에 있습니다.
- 이 후의 예상되는 작업으로 커널이 정상 작동되게 하고, 거기에 먼저 빌드한 안드로이드를 포팅하고, 몇 가지 디바이스 드라이버를 module로 커널에 올리는 작업을 진행해야 할 것입니다.