把玩"魔術師" -- 編譯 HTC Kernel 原始碼
This document is provided as is. You are welcomed to use it for non-commercial purpose.Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
看其他教材
在編譯 AOSP 的原始碼過程中,我們可以清楚的知道,其編譯主要分成 kernel 的編譯以及 AOSP 平台的編譯;而 kernel 的編譯需要取得適當的 kernel 原始碼, 否則就算編譯成功,可能也會無法正常使用;而編譯 AOSP 的過程中,我們也需要 一些從之前的 ROM 中解出來的 .so 檔。(疑問:這些 .so 檔究竟在架構中是屬於 哪一塊?應該不是 device drivers,因為驅動程式的副檔名應該是 .ko 才對,那麼 這些 .so 檔究竟是架構圖中綠色的 libraries 還是 Android Runtime 系統的 藍色 Core Libraries?)
- 從 logcat 來看,以 libGLES_qcom.so 為例,它是在 啟動 Android Runtime 時必定要載入的,所以好像是藍色的 core library;可是 libGLES_qcom.so 似乎又是綠色的 OpenGL ES 的 library。
- 你需要幫自己安裝一部執行 Linux 的電腦,AOSP 的文件建議使用 Ubuntu,而我安裝的是 Ubuntu 10.04 x86 32 bit 版。為了不影響平常的 使用,我是將 Ubuntu 安裝在一個名為 VirtualBox 的虛擬機器上;VirtualBox 是一套 Windows 的免費軟體,當在 VirtualBox 內執行 Ubuntu 的時候,電腦 基本上就同時執行 Windows 和 Ubuntu。當你將 Ubuntu 安裝完後,記得先用 "更新管理員"將所有軟體進行更新。
- 在編譯 kernel 原始碼之前,我們必須先安裝一些套件。這些步驟主要是參考
dferreira 發表的 [HOW-TO] Compile AOSP Froyo + [ROM] Latest AOSP Froyo for Sapphire。
- 在 /etc/apt/sources.list 檔案的最後加上下列兩行:
deb http://pl.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://pl.archive.ubuntu.com/ubuntu/ jaunty universe
- 檔案修改完後,請執行下列指令來該新 apt 的資料庫:
sudo apt-get update
- 請執行下列指令(只有一行)來安裝必要的軟體:
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind libreadline5-dev gcc-multilib g++-multilib libc6-dev libncurses5-dev x11proto-core-dev libx11-dev libreadline5-dev libz-dev
- 請在自己的家目錄($HOME)底下新增一個 bin 目錄,並將 repo 安裝到 bin 內。安裝後可以登出然後登入,剛安裝的 repo 就可以開始使用。
cd ~ mkdir bin curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo
- 取得 AOSP,本文以 Android 2.2.1 為例,指令為:
cd ~ mkdir froyo repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2.1_r1 repo sync
- 在 /etc/apt/sources.list 檔案的最後加上下列兩行:
- 取得 kernel 的原始碼:HTC 的 kernel 原始碼都發佈於 HTC Developer Center。本文以
HTC Magic (Rogers) - Ecliar - 2.6.29 kernel source code 為範例,下載之後的檔案名稱為 sapphire-2.6.29-9cfb347e.tar.gz;請將該檔案
複製於 $HOME,並解壓縮;於解壓縮完成後,將目錄名稱更改為 kernel。指令如下所示:
cd ~ tar zxvf sapphire-2.6.29-9cfb347e.tar.gz mv sapphire-2.6.29-9cfb347e kernel
- 編譯 kernel 以及無線網路的驅動程式:這部分主要參考 編譯在G1上運行的android 2.2(froyo)代碼_正規版。
- 先到 ~/kernel 目錄:cd ~/kernel。
- 產生設定檔:make ARCH=arm CROSS_COMPILE=~/froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- sapphire_defconfig。
- 請注意: 依據 sapphire_defconfig
的設定所編繹出來的 zImage,在我測試的所有 AOSP Froyo 都會造成觸控螢幕無法正常運作;如果你也有 這樣的情形,請在本步驟完成後,修改 ~/kernel/.config 檔案內容(該檔案就是 這個步驟所產生的設定檔)。請將以下設定:
CONFIG_TOUCHSCREEN_CONCATENATE_REPORT=y
#CONFIG_TOUCHSCREEN_CONCATENATE_REPORT is not set
cd ~/froyo/system/wlan/ti/sta_dk_4_0_4_32 make ARCH=arm CROSS_COMPILE=~/froyo/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- KERNEL_DIR=~/kernel
cp ~/froyo/kernel/arch/arm/boot/zImage ~/froyo/device/htc/sapphire/kernel cp ~/froyo/system/wlan/ti/sta_dk_4_0_4_32/wlan.ko ~/froyo/device/htc/sapphire/wlan.ko
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
沒有留言:
張貼留言