nigakyのブログ

雑多なメモです。

IS01のカーネルをビルドしてみた

IS01のアップデートがないことが確定してしまい残念な限りです。

ところで、この IS01 は android ということもあり、カーネルが OSS として公開されているので、せっかくなのでビルドしてみました。

準備

まずは必要なものをダウンロードしてきます。
(参考:AndroidエミュレータでLinuxカーネルをデバッグ!! (1/3) − @IT MONOist

その他必要に応じて開発環境のパッケージなど。


以下のように展開します。

# mkdir android
# cd android
# tar zxvf /path/to/kernel.tar.gz
# git clone git://android.git.kernel.org/platform/prebuilt.git
# cp /path/to/config.is01 /kernel/.config

カーネルソースの修正

そのままではコンパイルエラーが出たのでソースを少し修正しました。

--- arch/arm/mach-msm/sh_sleepcheck.c.orig      2010-11-19 00:00:57.000000000 +0900
+++ arch/arm/mach-msm/sh_sleepcheck.c   2010-11-19 00:01:08.000000000 +0900
@@ -24,7 +24,7 @@
 #include <linux/wakelock.h>
 #include <linux/pm.h>
 #include <mach/msm_rpcrouter.h>
-#include <smd_private.h>
+#include "smd_private.h"
 #include <sharp/sh_sleepcheck.h>
 
 /* ==========================================================================================

コンパイル

後はコンパイルをするだけです。

# cd kernel
# make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
        :
  OBJCOPY arch/arm/boot/Image
  Kernel: arch/arm/boot/Image is ready
  Building modules, stage 2.
        :
# ls -l arch/arm/boot/Image 
-rwxr-xr-x 1 nobody nobody 5338336 2010-11-19 00:06 arch/arm/boot/Image

(たぶん)これでできました。

実行

実機にはインストールできないので、エミュレータで実行しようとしたのですがうまくできませんでした。
(出来上がった Image を -kernel オプションで指定すればいけるかと思ったのですが…)
android はあまり詳しくないのでこれ以上分からず、このあたりであきらめることにしました。