作者:王勁南,華清遠見嵌入式學院講師。
移植Android 2.2.1過程
環境:Ubuntu10.04及以後版本、Linux2.6.30源碼包(軟體)、ATMEL9G45開發板。(硬體)
工具:Gcc4.4及以後版本,Java6-JDK
庫檔案:flex, bison, gperf, libsdl-dev, libesd0-dev, libwxgtk2.6-dev, build-essential, zip, curl
過程簡介:
先拿到適合Android平台啟動並執行核心源碼樹,可以從官網下,也可以從製造商處拿到。再同步Android平台源碼樹。再安裝Java 1.6及其它第三方的庫。編譯核心、編譯Android平台(根檔案系統)、NFS聯機調試。
移植基本步驟:
1. 製做出適合於Android啟動並執行核心
a) 解壓linux-2.6.30.tar.gz源碼包
i. tar xf linux-2.6.30.tar.gz
b) 在ATMEL的官網上下載針對linux-2.6.30的補丁包
i. 網址是http://at91.com/android4sam
c) 按照網上的步驟,打補丁。
i. http://www.at91.com/android4sam/bin/view/Android4SAM/LinuxKernel
ii.
iii. 分別下載以上檔案並解壓安裝補丁:
1. tar xvjf linux-2.6.30.tar.bz2
2. cd linux-2.6.30
3. zcat 2.6.30-at91.patch.gz | patch -p1
4. tar xvzf 2.6.30-at91-exp.4.tar.gz
5. for p in 2.6.30-at91-exp.4/*; do patch -p1 < $p ; done
6. patch -p0 < linux-2.6.30-at91-exp4-android-2.0.1_r1-ver1.diff
2. 編譯打好補丁的核心。
a) make ARCH=arm menuconfig
b) make uImage ARCH=arm CROSS_COMPILE=<cross_tools>
3. 同步Android平台代碼
a) Android平台實質上是根檔案系統,通過NFS掛載,我們可以很輕鬆的調試我們的平台,在同步之前要保證磁碟有足夠大的空間。理論是2GB,但實際上要有8GB的空間,才能保證萬無一失。
b) 同步Android是通過一個repo的指令碼實現的,它會調用git這個工具去下載Android平台中的各各獨立分支。
c) 具體的同步方法如
i. sudo apt-get install curl
ii. cd ~
iii. mkdir ~/bin
iv. curl http://android.git.kernel.org/repo > ~/bin/repo
v. chmod a+x ~/bin/repo
vi. mkdir mydroid
vii. cd mydroid
viii. repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2.1_r1
ix. repo sync
4. 同步好源碼後需要安裝一些庫檔案及Java6環境
a) sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java6-jdk sun-java6-jre zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
b) JAVA_HOME=<java的安裝路徑>
c) PATH=$JAVA_HOME/bin:$PATH
d) CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
e) export JAVA_HOME
f) export PATH
g) export CLASSPATH
5. 編譯Android平台
a) 進入Android平台根目錄
b) source build/envsetup.sh
c) make