2012年10月22日月曜日

Motorola RAZR i XT890のKernelをビルドしてみた


Kernel sourceが公開されたのでビルドして実機で動かしてみた。
sourceはここ
ここに書いてあるとおりにビルドすればOK…だけど面倒くさいので


https://github.com/turl/linux-razr-i
turlさんがgithubにあげてくれてるコレを使う。

作業はUbuntu 11.04 32bitで行った、64bitでは「cast from pointer to integer of different size」が沢山出てきて修正すんの面倒くさいので32bitで…

git clone git://github.com/turl/linux-razr-i.git
とりあえずsourceをローカルに
それとhardware_ti_wlan.tar.gzとvendor_authentec_vpndriver.tar.gzも必要になるのsourceforgeからダウンロードしておく。

toolchainにAndroidのソースのprebuiltに入ってるものを使用するのでそれもrepo syncするなりしておく。

んでビルド
export PATH=/home/meyskld/android/xt890_kernel/prebuilt/linux-x86/toolchain/i686-android-linux-4.4.3/bin:$PATH
export ARCH=i386
export CROSS_COMPILE=i686-android-linux-
export ARCH_BUILD_FLAGS="ANDROID_TOOLCHAIN_FLAGS=-mno-android"

make i386_mfld_moto_defconfig
time make -j4

export INSTALL_MOD_PATH=/home/meyskld/android/xt890_kernel/modules/
make modules_install
Kernelだけのビルドなので数分で終わる。
Kernelは下記ディレクトリにbzImageという名前で保存される。
/arch/x86/boot/

make modules_installを実行するとINSTALL_MOD_PATHで指定したディレクトリにドライバたちが保存される。
WlanとVPNのドライバは下記URLに書かれている手順で別途ビルドする。
http://sourceforge.net/projects/razr-i.motorola/files/razr-i/8.7.1I-110_IFW-31/
Build compat.ko & wl12xx-sdio.ko~ってところ見れば分かると思う。

"apwr3_0.ko","pax.ko","sep3_7.ko"の3つがビルドされないのだがどーすればええねん?

ビルドした.koをramdiskのlib/modulesにコピー
ramdiskのunpack、repackは以前書いたこのエントリ通りに行えばOK
あれ - Motorola RAZR i XT890: rooted

cpio.gz作るところまでやっておく。

bzImageとramdisk.cpio.gzをくっつける作業をする。
mkbootimg的なツールがあれば良いのだが無いのでバイナリエディタで結合させた…とりあえず動けばいいやなノリ

オリジナルのboot.imgをバイナリエディタで開く。
アドレス0x2000までがheaderでその後ろにbzImage(kernel)をくっつける。
bzImage(kernel)の後ろにramdisk.cpio.gzをくっつける。この際、開始位置をオリジナルと同じにしておく。
headerの0x400にramdiskの開始位置とramdiskのサイズが書かれているのでここを書き換えるのでもOK
最後にオリジナルのfooterを張り付けて保存
物凄い無理やり感ありますけど…

あとはfastbootで焼いて起動するのを確認
fastboot flash boot boot_mod.img


さて、オーバークロックして遊ぶかー