2: 2010-08-30 (月) 07:46:55 yuji Attached file: unpack-bootimg.zip, Attached file: repack-bootimg.zip, Attached file: split_bootimg.zip |
現: 2020-12-26 (土) 16:08:16 yuji | ||
---|---|---|---|
Line 16: | Line 16: | ||
cd ~/android/system | cd ~/android/system | ||
-ソースをダウンロードする(CyanogenModのソースにしてみる)~ | -ソースをダウンロードする(CyanogenModのソースにしてみる)~ | ||
- | repo init -u git://github.com/CyanogenMod/android.git -b froyo | + | repo init -u git://github.com/CyanogenMod/android.git -b gingerbread |
repo sync | repo sync | ||
-コンパイラ環境を設定する~ | -コンパイラ環境を設定する~ | ||
Line 28: | Line 28: | ||
git clone git://github.com/CyanogenMod/cm-kernel.git | git clone git://github.com/CyanogenMod/cm-kernel.git | ||
-その後,kernel .configをHT-03Aから持ってくるか,menuconfigなんかで作成する。~ | -その後,kernel .configをHT-03Aから持ってくるか,menuconfigなんかで作成する。~ | ||
- | --持ってくる場合~ | + | --端末から持ってくる場合~ |
cd cm-kernel | cd cm-kernel | ||
adb pull /proc/config.gz /home/user_name/androkern/cm-kernel/config.gz | adb pull /proc/config.gz /home/user_name/androkern/cm-kernel/config.gz | ||
gunzip config.gz && mv config .config | gunzip config.gz && mv config .config | ||
+ | --kernel.imgから抜き出す場合~ | ||
+ | scripts/extract-ikconfig boot.img > .config | ||
--configし直す場合~ | --configし直す場合~ | ||
+ | 用意した.confgファイルを元に適当に設定する。.configがないと最初から設定しなおしになる。 | ||
make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig | make ARCH=arm CROSS_COMPILE=$CCOMPILER oldconfig | ||
もしくは, | もしくは, | ||
Line 38: | Line 41: | ||
とかして,.configを作成する。~ | とかして,.configを作成する。~ | ||
-kernelをコンパイルする~ | -kernelをコンパイルする~ | ||
- | make ARCH=arm CROSS_COMPILE=$CCOMPILER | + | make ARCH=arm CROSS_COMPILE=$CCOMPILER -j`grep 'processor' /proc/cpuinfo | wc -l` |
結構時間がかかる。~ | 結構時間がかかる。~ | ||
kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ | kernelは,~/android/kernel/cm-kernel/arch/arm/boot/zImage に保存される。~ | ||
**WiFi kernelモジュールのコンパイル [#r49724ff] | **WiFi kernelモジュールのコンパイル [#r49724ff] | ||
- | なぜかこの状態だとwifiが不安定になるらしい~ | + | なぜかこの状態だとwifiが不安定になるらしい。~ |
wifiドライバーをモジュールとしてコンパイルして,それをリンクするようにする。 | wifiドライバーをモジュールとしてコンパイルして,それをリンクするようにする。 | ||
+cd ~/android/system/system/wlan/ti/sta_dk_4_0_4_32~ | +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`~ | + | +KERNEL_DIR=~/android/kernel/cm-kernel CROSS_COMPILE=$CCOMPILER ARCH=arm make -j`grep 'processor' /proc/cpuinfo | wc -l`~ |
でコンパイルする~ | でコンパイルする~ | ||
+できたモジュールのファイルを上書きして変更する。 | +できたモジュールのファイルを上書きして変更する。 | ||
Line 56: | Line 59: | ||
*boot.imgの作成 [#m7e8073d] | *boot.imgの作成 [#m7e8073d] | ||
**filesystem [#wb787241] | **filesystem [#wb787241] | ||
+ | HT-03AにはFlash ROM上に,以下のようなROMパーテーションが作られている。 | ||
cat /proc/mtd | cat /proc/mtd | ||
dev: size erasesize name | dev: size erasesize name | ||
Line 66: | Line 70: | ||
mtd3=/system,mtd4=cache,mtd5=/dataにそれぞれmountされる。~ | mtd3=/system,mtd4=cache,mtd5=/dataにそれぞれmountされる。~ | ||
mtd2はboot時使われるファイルで,mtd1はリカバリーモードで使われる。 | mtd2はboot時使われるファイルで,mtd1はリカバリーモードで使われる。 | ||
+ | |||
+ | 一応,"recovery"と"boot"をバックアップしておく | ||
+ | #cat /dev/mtd/mtd1 > /sdcard/mtd1.img | ||
+ | #cat /dev/mtd/mtd2 > /sdcard/mtd2.img | ||
+ | |||
+ | 端末の/system/recovery.imgは,毎回シャットダウンする時にmtd1(recoveryパーテーション)に,自動的に焼かれる。この理由は, | ||
+ | -まちがってmtd1を変に書き換えちゃった時に,文鎮化するのを防ぐ為~ | ||
+ | -mtd1を入れ替えたい場合などに,/system/recovery.imgに入れておくことで,安全に変更できる~ | ||
+ | と思われる。通常は,/system/recovery.imgを入れておかないようにする。 | ||
+ | |||
**bootイメージ [#i1df0efb] | **bootイメージ [#i1df0efb] | ||
bootイメージは,linuxのブート時に使用されていて, | bootイメージは,linuxのブート時に使用されていて, | ||
Line 73: | Line 87: | ||
+2ndステージローダー(オプション) | +2ndステージローダー(オプション) | ||
がbootイメージに入っている。~ | がbootイメージに入っている。~ | ||
+ | |||
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用のアンパックとマージには,&ref(unpack-bootimg.zip);&ref(repack-bootimg.zip);を使うことが出来る。 |
***boot.imgの分解 [#q862084e] | ***boot.imgの分解 [#q862084e] | ||
Line 89: | Line 104: | ||
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz | find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz | ||
新しいkernelとマージする。 | 新しいkernelとマージする。 | ||
- | mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img | + | mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel 新しいkernel --ramdisk newramdisk.cpio.gz -o myboot.img |
上の,repack-bootimgを使うほうが簡単だけど・・・ | 上の,repack-bootimgを使うほうが簡単だけど・・・ | ||
Line 101: | Line 116: | ||
とやって,作業後マージするには, | とやって,作業後マージするには, | ||
% mkbootfs ./ramdisk | gzip > ramdisk-new.gz | % 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 | + | % mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel boot.img-kernel --ramdisk ramdisk-new.gz -o myboot.img |
でマージする。 | でマージする。 | ||
*HT-03Aに新しいboot.imgをflashする [#ua851e8c] | *HT-03Aに新しいboot.imgをflashする [#ua851e8c] | ||
/sdcardに新しいイメージをコピーする | /sdcardに新しいイメージをコピーする | ||
- | adb push ./mynewimage.img /sdcard | + | adb push ./myboot.img /sdcard |
adb shell上で, | adb shell上で, | ||
# cat /dev/zero > /dev/mtd/mtd2 | # cat /dev/zero > /dev/mtd/mtd2 | ||
- | で,現在のbootを綺麗サッパリ消して | + | で,bootパーテーションを綺麗サッパリ消してから, |
- | # flash_image boot /sdcard/mynewimage.img | + | # flash_image boot /sdcard/myboot.img |
として,書き込む。 | として,書き込む。 | ||
リブートして,ちゃんとブートすればOK。ダメだったら,リカバリモードで前に戻す。 | リブートして,ちゃんとブートすればOK。ダメだったら,リカバリモードで前に戻す。 |