1: 2010-08-30 (月) 05:55:18 yuji | 2: 2010-08-30 (月) 07:46:55 yuji Attached file: unpack-bootimg.zip, Attached file: repack-bootimg.zip, Attached file: split_bootimg.zip |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | #contents | ||
+ | |||
*kernelのコンパイル [#n214438c] | *kernelのコンパイル [#n214438c] | ||
Androidのkernelをソースからコンパイルしてみる。 | Androidのkernelをソースからコンパイルしてみる。 | ||
Line 39: | Line 41: | ||
結構時間がかかる。~ | 結構時間がかかる。~ | ||
kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ | kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ | ||
+ | |||
+ | **WiFi kernelモジュールのコンパイル [#r49724ff] | ||
+ | なぜかこの状態だとwifiが不安定になるらしい~ | ||
+ | wifiドライバーをモジュールとしてコンパイルして,それをリンクするようにする。 | ||
+ | +cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32~ | ||
+ | +KERNEL_DIR=~/android/kernel CROSS_COMPILE=$CCOMPILER ARCH=arm make -j`grep 'processor' /proc/cpuinfo | wc -l`~ | ||
+ | でコンパイルする~ | ||
+ | +できたモジュールのファイルを上書きして変更する。 | ||
+ | adb shell mount -o remount,rw /system~ | ||
+ | adb shell cp /system/lib/modules/wlan.ko /system/lib/modules/wlan.ko.backup~ | ||
+ | adb push wlan.ko /system/lib/modules/wlan.ko~ | ||
+ | リブートすれば,新しいwlan.koをkernelが使うようになる。 | ||
*boot.imgの作成 [#m7e8073d] | *boot.imgの作成 [#m7e8073d] | ||
Line 61: | Line 75: | ||
kernelをコンパイルした後,kernelファイルとこれらのファイルをマージしてboot.imgを作成する。~ | kernelをコンパイルした後,kernelファイルとこれらのファイルをマージしてboot.imgを作成する。~ | ||
これをmtd2にflashすると,bootloaderがkernelを起動してくれる。 | これをmtd2にflashすると,bootloaderがkernelを起動してくれる。 | ||
+ | |||
+ | アンパックとマージには,&ref(unpack-bootimg.zip);&ref(repack-bootimg.zip);を使うことが出来る。 | ||
+ | |||
+ | ***boot.imgの分解 [#q862084e] | ||
+ | とりあえず今あるboot.imgを分解して,kernelとramdiskにわける。~ | ||
+ | 最初の2kbyteを飛ばして0x1F8B(gzipのヘッダー)を見つける,次の0x1F8Bまでがkernelになる。~ | ||
+ | その次の0x1F8Bまでがramdiskになる。バイナリエディター等やddなんかで書き出せば取り出せる。ファイルはgzip圧縮されているんで解凍すれば,ramdiskに中にあるファイルを編集できるようになる。 | ||
+ | gunzip -c ../your-ramdisk-file | cpio -i | ||
+ | 上の,unpack-bootimgを使うほうが簡単だけど・・・ | ||
+ | |||
+ | ramdiskを編集したら,コンパイルしたkernelと共に再度パッキングする。~ | ||
+ | まず,ramdiskをgzipで圧縮する。 | ||
+ | find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz | ||
+ | 新しいkernelとマージする。 | ||
+ | mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img | ||
+ | 上の,repack-bootimgを使うほうが簡単だけど・・・ | ||
+ | |||
+ | もしくは,&ref(split_bootimg.zip);も使える。 | ||
+ | 分解するときは, | ||
+ | % ./split_bootimg.pl boot.img | ||
+ | % mkdir ramdisk | ||
+ | % cd ramdisk | ||
+ | % gzip -dc ../boot.img-ramdisk.gz | cpio -i | ||
+ | % cd .. | ||
+ | とやって,作業後マージするには, | ||
+ | % mkbootfs ./ramdisk | gzip > ramdisk-new.gz | ||
+ | % mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o boot-new.img | ||
+ | でマージする。 | ||
+ | |||
+ | *HT-03Aに新しいboot.imgをflashする [#ua851e8c] | ||
+ | /sdcardに新しいイメージをコピーする | ||
+ | adb push ./mynewimage.img /sdcard | ||
+ | adb shell上で, | ||
+ | # cat /dev/zero > /dev/mtd/mtd2 | ||
+ | で,現在のbootを綺麗サッパリ消して | ||
+ | # flash_image boot /sdcard/mynewimage.img | ||
+ | として,書き込む。 | ||
+ | リブートして,ちゃんとブートすればOK。ダメだったら,リカバリモードで前に戻す。 |