Nexus7 用 kernel ビルド
すっかり間があいてしまった。
以前、会社の先輩に言われたことを思い出した。
手順等はブログで情報を集める前に公式をしっかり読むべき。
その上で理解できない部分や不足を先人のブログで補填すると。
というわけで、今回は kernel のビルドと書き換えです。
参考にしたのは google 公式の以下。
Building Kernels | Android Developers
Nexus7 は flo なので msm を取得。
$ cd <android top> $ mkdir kernel $ cd kernel $ git clone https://android.googlesource.com/kernel/msm.git
kernel version を確認
$ cd <android top>/out/target/product/flo/ $ dd if=kernel bs=1 skip=$(LC_ALL=C grep -a -b -o $'\x1f\x8b\x08\x00\x00\x00\x00\x00' kernel | cut -d ':' -f 1) | zgrep -a 'Linux version' Linux version 3.4.0-gb736a74 (android-build@vpbs1.mtv.corp.google.com) (gcc version 4.6.x-google 20120106 (prerelease) (GCC) ) #1 SMP PREEMPT Fri Dec 13 15:38:16 PST 2013
kernel は 3.4.0-gb736a74 とのこと。
これは Nexus7 の Settings -> About tablet でも確認できるね。
kernel branch を確認
$ cd <android top>/kernel/msm $ git branch -r origin/android-msm-flo-3.4-jb-mr2 origin/android-msm-flo-3.4-kitkat-mr0 origin/android-msm-flo-3.4-kitkat-mr1
今回、android は android-4.4.2_r2 を使用しているので、きっと最新。
$ git checkout -b my_android-msm-flo-3.4-kitkat-mr1 origin/android-msm-flo-3.4-kitkat-mr1
ビルド準備&ビルド。
$ export ARCH=arm $ export SUBARCH=arm $ export CROSS_COMPILE=arm-eabi- $ make flo_defconfig $ make -j4 2>&1 | tee log_build.txt
kernel image の組み込み
$ cd <android top> $ export TARGET_PREBUILT_KERNEL=kernel/msm/arch/arm/boot/zImage $ make -j4 2>&1 | tee log_build_flo-eng_kernel.txt
boot.img のみを焼き直し。
$ fastboot flash boot out/target/product/flo/boot.img $ fastboot reboot
起動。
kernel version が 3.4.0-gac9222c になりましたが、
特に新しい機能が追加になったわけでもなく、
変哲のない AOSP 版 Nexus7 ですね。
余談。
対象デバイス向けの defconfig が存在しない場合に、
対象デバイスから直接 kernel config を取得する方法を確認。
参考にしたのは以下のサイト。
Nexus 7 のカーネルをビルド、あとCIFSとか。 - y-log.net
で、Nexus7 から adb で config.gz を引っ張ろうとするが、、、
$ adb pull /proc/config.gz remote object '/proc/config.gz' does not exist
あらま、ないね。。
別の方法、boot.img からの取得を試みる。
参考にしたのは以下のサイト。
NEXUS 7 自分でモジュールをbuildするメモ | treffen @ memo
$ cd <android top>/kernel/msm $ scripts/extract-ikconfig <android top>/out/target/product/flo/boot.img > arch/arm/configs/nexus7_defconfig
これで、対象デバイスで使用されている kernel config を取得完了。