如何下載編譯Android 4.4內核

如何下載編譯Android 4.4內核,需要知道的一點是Android使用的都是prebuild的kernel,這篇文章記錄瞭我替換內核的過程。

首先,我們需要確定當前Android使用的kernel版本,然後要確定下載kernel的版本

查看當前kernel版本

$ dd if=kernel-qemu bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel-qemu | cut -d ':' -f 1) | zgrep -a 'Linux version'

結果為:

Linux version 3.4.0-gfb3ea4f (keunyoung@keunyoung-linux.mtv.corp.google.com) (gcc version 4.7 (GCC) ) 
#1 Tue Apr 2 17:27:47 PDT 2013

從結果可以看出來電腦模擬器使用的是3.4.0的內核

下載內核

$ mkdir android_kernel
$ cd android_kernel
$ git clone https://android.googlesource.com/kernel/goldfish.git

下載完成後

Cloning into 'goldfish'...
remote: Sending approximately 609.12 MiB ...
remote: Counting objects: 28280, done
remote: Finding sources: 100% (7/7)
remote: Getting sizes: 100% (6/6)
remote: Compressing objects: 100% (3709/3709)
remote: Total 3063030 (delta 2572134), reused 3063028 (delta 2572134)
Receiving objects: 100% (3063030/3063030), 608.82 MiB | 303 KiB/s, done.
Resolving deltas: 100% (2574828/2574828), done.

查看內核版本

$ git branch -a

結果

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-goldfish-2.6.29
  remotes/origin/android-goldfish-3.10
  remotes/origin/android-goldfish-3.4
  remotes/origin/linux-goldfish-3.0-wip
  remotes/origin/master

Checkout相對應版本

$ git checkout remotes/origin/android-goldfish-3.4

在一開始我是打算編譯3.10的,但是3.10目前位置還沒有goldfish_defconfig文件,所以退而求其次編譯3.4的內核。

編譯內核

在checkout後就可以開始編譯內核瞭

$ export ANDROID_SRC_PATH=~/work/android_src/
$ export PATH=$ANDROID_SRC_PATH/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eab   #這裡可能是原作者筆誤,應該是export CROSS_COMPILE=arm-eabi-
$ make goldfish_armv7_defconfig
$ make

編譯成功後得到如下的輸出:

 Kernel: arch/arm/boot/zImage is ready

註意:一開始我使用的是make goldfish_defconfig來進行編譯, 這樣可以成功編譯出內核來,但是編譯出來的內核在模擬器中無法啟動。Google之後得知,需要使用goldfish_armv7_defconfig才能make出可以啟動的內核。

現在就可以使用我們編譯出來的內核啟動瞭

emulator -kernel ~/src/android_kernel/goldfish/arch/arm/boot/zImage &

啟動後通過adb shell查看對比前後兩個版本的內核有什麼區別

替換前:

Linux version 3.4.0-gd853d22 (nnk@nnk.mtv.corp.google.com) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 PREEMPT Tue Jul 9 17:46:46 PDT 2013

替換後:

Linux version 3.4.0-g48b9692 (vincent@vincent-pc) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #2 PREEMPT Sun Feb 16 12:30:13 CST 2014

之後我們就可以把編譯出來的內核拷貝到Android source tree下或者使用make bootimage來制作boot image瞭。

You May Also Like