Nexus S 用のカーネルをビルドする

先日、話題のおせちどころではないスカスカ状態の Nexus S が届いたわけですが、あちらは知人用で自分用のは昨年末に入手していました。配送途中の盗難ということで保険が効いて、輸入代行業者から再注文してくれることになったので、ほっとしています。

その Nexus S ですが Nexus One が出たときほどのインパクトもなく、実際に触った感じもファインチューニングくらいの印象で特に感動するような点もありません。開発機として使うのでなければ、わざわざ Nexus One から乗り換えるほどではない感じです。ただ、画面が大きくて軽いのとタッチパネルの精度が上がっているので、自分は今は S をメインに使っています。

Nexus S

さて、早速 Nexus S 用のカーネルをビルドする方法について説明します。Nexus S 用カーネルのソースコードは、android.git.kernel.org で公開されています。まずはここからソースコードを取得します。この取得は結構時間がかかって、下手したら1時間以上かかるので気長に待ちましょう。

$ git clone git://android.git.kernel.org/kernel/samsung.git

ソースが無事に取得できたら、.configを初期化します。herring は、Nexus S に搭載されているボード(基盤)の名称でこれが Nexus S 用のおまじないです。

$ cd samsung
$ make ARCH=arm herring_defconfig

次にカーネルのビルドに入ります。クロスコンパイルのための toolchain の場所を指定します。この toolchain は、Android 本体のソースコードに含まれています。

$ make -j2 ARCH=arm CROSS_COMPILE=/path/to/prebuilt/linux-x86/toolchain/arm-eabi-
4.4.3/bin/arm-eabi-

arch/arm/boot/zImage ができていればビルド成功です。次にこれをブート用のイメージにします。今回は、stock の boot.img から kernel のみを入れ替えることにします。

$ split_bootimg.pl boot.img
Page size: 4096 (0x00001000)
Kernel size: 2799472 (0x002ab770)
Ramdisk size: 142845 (0x00022dfd)
Second size: 0 (0x00000000)
Board name:   
Command line: console=ttyFIQ0 no_console_suspend
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.

$ mkbootimg --cmdline 'console=ttyFIQ0 no_console_suspend' --kernel zImage 
--base 0x30000000 --pagesize 4096 --ramdisk boot.img-ramdisk.gz -o my-boot.img

それでは、実際に実機に転送してブートしてみましょう。注意するべき点としては、いきなり my-boot.img を flash してしまわないことです。試しに起動するだけなら、fastboot コマンドで boot パーティションに変更を加えることなくテストすることができます。

Volume Upボタンを押しながら電源を入れて、ブートローダーモードにした後にUSBケーブルを接続して以下のコマンドを実行します。

$ fastboot boot my-boot.img

問題なく起動して動作するようだったら、boot パーティションに書き込みます。

$ fastboot flash boot my-boot.img

まずは素のカーネルで起動するところまで確認できました。ここが最初のスタート地点です。ここから後はクロックアップするなり、スケジューラを変更するなり、好きなだけチューニングすることができます。



このエントリーのはてなブックマーク (-)