Android 4.0.1已經(jīng)放出來了,但是其模擬器內(nèi)核是預(yù)編譯的bianry。沒有提供內(nèi)核源代碼。 想自己編譯一個內(nèi)核,這樣子可以改內(nèi)核代碼完,可是找了網(wǎng)上的資料,發(fā)現(xiàn)都已經(jīng)過時了。 本文提供最新的 地址和方法。
由于android kernel的部分封閉策略,kernel org已經(jīng)將 android kernel踢出主線。原有的 同步地址已經(jīng)被重定向,再加上android kernel本身結(jié)構(gòu)的調(diào)整,很多原來的同步方法已經(jīng)不能使用。 下面是最新的方法,適用于編譯 android 4.0.1 模擬器的內(nèi)核 ( qemu kernel, goldfish branch)。
原有的方法大多使用一下地址同步 android goldfish kernel:
- $ git clone git://android.git.kernel.org/kernel/common.git
-
- $ cd common
-
- $ git branch -a
-
- $git checkout remotes/origin/archive/android-gldfish-2.6.29
但是我們可以在 瀏覽器里輸入
- android.git.kernel.org/kernel/common.git
它實際上已經(jīng)被重定向到
- android.googlesource.com/kernel/common.git
但是這個repo 里已經(jīng)不包含 goldfish的分支了。如果同步下來后我們用 git branch -a 將看到只有最新的 3.0 和2.6.39的分支:
- $git branch -a
- * (no branch)
- master
- remotes/origin/HEAD -> origin/master
- remotes/origin/android-2.6.39
- remotes/origin/android-3.0
- remotes/origin/master
其實 goldfish分支已經(jīng)被獨(dú)立為一個單獨(dú)的repo:http://android.googlesource.com/kernel/goldfish.git
以下是最新的正確的 同步步驟:
- $git clone http://android.googlesource.com/kernel/goldfish.git
- $cd goldfish
- $git branch -a
- * (no branch)
- master
- remotes/origin/HEAD -> origin/master
- remotes/origin/android-goldfish-2.6.29
- remotes/origin/master
- $git checkout <pre name="code" class="plain">remotes/origin/android-goldfish-2.6.29
編譯步驟基本沒有變,但需要使用新的config:
- $ make ARCH=arm goldfish_armv7_defconfig
- $make ARCH-arm CROSS_COMPILE=arm-eabi-
-
- ...
- OBJCOPY arch/arm/boot/zImage
- Kernel: arch/arm/boot/zImage is ready
然后就可以用著新的kernel img 來啟動模擬器了:
- $emulator -kernel ...../kernel/goldfish/arch/arm/boot/zImage &
啟動模擬器,到 Setting => About 去看,kernel的確編程我們自己編譯的版本。 可以手工了。
另外,Google 似乎有意提供一個簡單腳本來編譯 kernel,可以看看 external/qemu/docs/ANDROID-KERNEL.TXT 有提到那個 distrib/rebuild-kernel.sh.
但搜索后這個文件并不存在。最接近的兩個腳本是 prebuild/android-arm/kernel/rebuild.sh.
但是這個腳本明顯的是個半成品,--help里的信息和腳本的實現(xiàn)還是有出去的。正確的用法是:
- $cd ics/platform ( your $TOP)
- $prebuild/android-arm/kernel/rebuild.sh kernel/goldfish/ (剛才同步的goldfish kernel 目錄)
編譯可以順利完成,并且生成的新的kernel 會被自動拷貝到 prebuild/android-arm/kernel 里去。但是如果不指定 kernel img 啟動,發(fā)現(xiàn)用的還是原來自帶的的img。
還是需要再啟動 emulator是 用 -kernel 參數(shù) 顯式的指定編譯出來的img:
- ./emulator -avd ics -kernel <$TOP>/prebuilt/android-arm/kernel/kernel-qemu-armv7
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報。