【HTC J】カーネルビルドのメモ

HTC J(ISW13HT)用のkernelソースが公開されたので、そのbuildを行った際のmemoです。

1.Kernel Sourceのダウンロード

http://htcdev.com/devcenter/downloads から Filter By で J を選択。
2012/08/01 時点では、valente_wx-ics-crc-3.0.8-5d86b4a.zip でした。

2.tool-chainの導入

Sourceのアーカイブ内にあるvalente_readme.txtに従って、tool-chain を git clone

$ git clone https://android.googlesource.com/platform/prebuilt 

※gitがインストールされていない場合は、まずgitを入れる。
各OSでyumなりapt-getなり適当に。

3.ログインシェルにPATHの設定

.bashrcに記載。bashじゃない人は適宜使ってるshellのプロファイルに
toolchainへのPATHを設定する。

$ cat .bashrc
PATH=/home/caplio/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

4.kernel Sourceを解凍したディレクトリ上で make config & make

$ cd valente_wx-ics-crc-3.0.8-5d86b4a
$ make valente_wx_defconfig
$ make -j2 2>&1 | tee `date +%Y_%m_%d_%s`_make.log

makeのログは後から見られるように保存しましょう。

最初は足りないpackageなどがあって素直にmakeが通らないと思うので、
makeが通るようになるまでは試行錯誤する感じで。

ちなみに、さくらVPS entryで make -j1するとこんな感じ。

real    27m42.127s ★リアル27分
user    21m36.171s
sys     2m45.152s

5.zImageからboot.imgの作成

zImageは、arch/arm/boot の下に作成されます。
このzImageにramdiskの中身引っ付けて完成です。

unpack/repack のツールはXDAにありますが、repackのスクリプトは、
mkbootimgの内容を変更しておく必要があります。

system ("mkbootimg --cmdline 'console=ttyHSL0,115200,n8' --kernel $ARGV[0]
 --ramdisk ramdisk-repack.cpio.gz --base 0x80400000 --ramdiskaddr 0x81800000
 -o $ARGV[2]");

編集済みのファイルを repack-htcj.zip として置いておきますね。
mkbootimg を PATHが通る場所に置いて下さい。

ramdiskは、OTAかRUUから取ってきましょう。

5-1 ドライバーのコピー

事前にOTAかRUU等からboot.imgを抜いてunpackしておきます。

$ unpack-bootimg.pl ./boot.img

 kernel written to ./boot.img-kernel.gz
 ramdisk written to ./boot.img-ramdisk.cpio.gz
 3162 blocks

 extracted ramdisk contents to directory ./boot.img-ramdisk/

ramdisk に system/lib/module のディレクトリを作成、そこに buildした
*.koファイルをコピーします。

ex) ~/initramfs/boot.img-ramdiskにramdiskを展開している場合

$ mkdir -p ~/initramfs/boot.img-ramdisk/system/lib/module
$ find -name '*.ko' -exec cp -av {} ~/initramfs/boot.img-ramdisk/system/lib/module \;
`./arch/arm/mach-msm/reset_modem.ko' -> `/home/caplio/initra・・・・
`./arch/arm/mach-msm/dma_test.ko' -> `/home/caplio/initramfs/・・・・
`./arch/arm/mach-msm/msm-buspm-dev.ko' -> `/home/caplio/in・・・・

★ 更新@2013/02/01 ★

HTC Jは、/system/lib/modulesに完成した*.koファイルを持っているため、
上の方法では、/systemが mountされた際に、buildしたモジュールが見えなくなり、
意味がない状態でした。

この為、boot.img-ramdisk/init.valentewx.rc にSYMLINKを追記して対応しています。
(homuhomu氏 の素晴らしい アイデアに感謝。)

参考:https://github.com/caplio/valente_wx-ics/commit/ab1b4864b69ec4b62537d980a772d712ed2dd3b0

5-2 boot.imgの作成

repack-bootimg.pl を使ってbootイメージを作成します。
zImageを予めramdiskと同じ場所に置いておきます。
例は、new.img として出力させる場合。

$ repack-bootimg.pl zImage boot.img-ramdisk new.img
8639 blocks

repacked boot image written at boot.img-ramdisk-repack.img

6. 起動

あとはfastbootから起動の確認して問題なければflashすればいいでしょう。

例)fastbootモードからbootテスト

$ adb reboot-bootloader
$ fastboot boot new.img
downloading 'boot.img'...
OKAY [  1.039s]
booting...
OKAY [  0.002s]
finished. total time: 1.041s

buildが問題なく通る様になったら、defconfigの設定を変えたりXDA見ながら、
他の人のソースをmergeしてみるとかチャレンジしてみると面白いですよ。

■更新@2013/02

htcdevのカーネルソースが更新されていない状況です。
新しく記事を更新していますので、こちらも参考にして下さい。

【HTC J】香港版のsourceをmergeした際のメモ


コメントする

メールアドレスが公開されることはありません。