一、準備
準備編譯Android的系統內核和文件系統所需要用到的軟件和文件。
-->Android4系統源代碼包
-->arm-linux-gcc編譯工具鏈
-->Fedora14系統
-->Linux3.08內核文件
-->make-3.81工具安裝包
-->mktools壓縮工具鏈
-->VMware10軟件安裝包
二、 編譯Linux內核
1、準備工作
爲了操作方便可以在/tmp目錄下建立一個新的文件夾andorid,以後的操作都在這個文件夾下進行。
# cd /tmp
# mkdir android
# mv************** /tmp/android (***代表文件名,前後都有空格鍵隔開,多次重複這個命令將文件全部移到這個文件夾下)
cd android (進入創建的文件夾)
2、安裝交叉編譯器,和make工具包
a) 安裝gun make-3.81工具包
Fedora14系統原裝的是3.82但是編譯Android4需要用3.81替換掉3.82.
-->卸載make-3.82
# yum removemake
-->安裝 make-3.81,首先進入文件所在目錄,解壓文件
# cd/tmp/android
# tar –xvzfmake-3.81.tar.tgz
-->將目錄文件設置可執行權限ta
# chmod –R 755make-3.81
-->建立安裝目錄
# mkdirmake-build
-->進入安裝目錄
# cd make-build
-->執行配置文件
#../make-3.81/configure
-->在當前目錄下先編譯make-3.81
# sh build.sh
--> 安裝
# ./make install
-->退出後重新登錄,輸入命令查看make-3.81是否安裝成功,成功時的提示信息如下
# make -v
b) 安裝arm-linux-gcc工具鏈
-->解壓工具連的壓縮文件:
# tar –xvzfarm-linux-gcc-4.5.1-v6-vfp-20120301.tgz –C/ (C後面有個空格,並且C是大寫的)
執行該命令將把arm-linux-gcc安裝到/opt/FriendlyARM/toolschain/4.5.1目錄。
-->把編譯器路徑加入系統環境變量,運行命令:
# gedit /root/.bashrc
編輯/root/.bashrc文件,注意bashrc前面有一個“.”在最後一行添加內容:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,保存退出。
-->重新登錄系統(不必重啓機器,System→ Layout即可),使以上設置生效,在命令行輸入
# arm-linux-gcc –v
出現以下信息說明交叉編譯環境已經安裝成功。
3、解壓、編譯內核文件
-->解壓安裝Android4內核源代碼
#tar –xvzflinux-3.08-20140224.tgz
將創建一個linux-3.08的文件夾,裏面包含了完整的內核源代碼。
-->編譯Android4的內核
#cd linux-3.0.8
#cpmini210_android_defconfig .config (注意config前面有個“.”)
然後可以執行make進行編譯
# make
最後會在arch/arm/boot目錄下生成zImage,就是編譯好的內核文件。
-->將他複製到/tmp文件夾中,便可以在Windows中通過Samba訪問了。
# cparch/arm/boot/zImage /tmp
如果提示權限不足可以在/tmp目錄下執行命令
#sudo chmod 755zImage
修改成功後再複製到Windows中。三、 編譯Android文件系統
1、安裝編譯所需的工具包
a) 安裝 ncurses和 gperf
-->使用yum命令安裝ncurses,在網絡連接正常的情況下:
# yum installncurese-devel
-->同樣的方法安裝gperf
# yum installgperf
b) 使用光盤安裝zlib
-->方法和安裝Vim工具相似
c) 修改updatedb.conf的權限,在安裝過程中權限不足會提示錯誤,所以在這裏提前修改。
# cd /etc
# sudo chmod 755 updatedb.conf
2、解壓編譯Android4文件系統
-->解壓Android4源代碼包在/tmp/android目錄中執行
# cd/tmp/android
# tar –xvzfandroid-4.0.3_r1-fs-20140224.tar.gz.
將創建Android-4.0.3_r1目錄。
-->編譯Andorid4源代碼
# cd android-4.0.3_r1
#./build-android
-->編譯Android需要等待很長的時間,編譯過程中會提示出現不同的錯誤,解決後重新回到該目錄下繼續編譯即可。
# cd/tmp/android/android-4.0.3_r1
#./build-android
-->編譯成功後,執行以下命令創建文件目錄系統:
#./build-android
這個腳本會從我們編譯完的Android中提取出我們需要的目標文件系統,最後會生成rootfs_dir目錄,如圖
四、壓縮鏡像文件
要把目標文件系統全部寫入開發板中,一半還需要先把目標文件系統目錄支撐單個的映像文件以便燒寫或者複製,Linux內核啓動時,一般會根據命令行參數掛載不同格式的系統。
1、安裝mktools工具鏈
-->解壓壓縮文件
# cd /tmp/android
# tar –xvzf mktools-20120518.tag.gz –C /
2、製作映像文件
以下執行步驟二選一
-->執行以下命令可以將上一節生成的Android文件系統創建成適用於SLC NAND Flash的yaffs2格式的映像文件,以便燒寫到配備SLC NAND Flash的開發板中:
# cd /tmp/android/android-4.0.3_r1
# mkyaffs2image-128M rootfs_dir rootfs_andorid.img
-->執行以下命令可以將上一節生成的Android文件系統創建成適用於MLC2 NAND Flash的yaffs2的映像文件,以便燒寫到配備MLC2 NAND Flash的開發板中:
# cd /tmp/android/android-4.0.3_r1
# mkyaffs2image-mlc2 rootfs_dir rootfs_andorid-mlc2.img
五、錯誤及解決辦法
錯誤一:
target Dex: android.core.tests.libcore.package.org.no-core-tests-res
make:***[out/target/common/obj/APPS/android.core.tests.libcore.package.com.no-core-tests-res_intermediates/noproguard.classes-with-local.dex]已殺死
make: *** 正在等待未完成的任務....
解決方法:
主要原因是內存不夠,解決辦法可以是增加虛擬機的內存,或者是增加swap的大小。
VM10.0中虛擬機的最大內存好像是2G,仍不能滿足要求,所以要求創建一個4G的交換分區,命令如下。
# dd if=/dev/zero of=/home/swapfile bs=1M count =4096 //創建交換分區文件
# mkswap /home/swapfile //建立SWAP文件系統
#swapon /home/swapfile //啓用swap文件
如果需要可以設置每次開機自動啓用SWAP交換分區,方法是在 /etc 目錄下修改fstab文件,在其中添加一行:
swap /home/swapfile swap defaults 0 0