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した際のメモ