これは、ブート時に必要なシステムをramfs上にコピーして作っちゃうからで、カスタムファームを作ろうと思うとこれがとても邪魔になる。
M001のように、ファーム書き換え即ブートイメージだったら楽なんだけどね。
で、ramfs上に作られる大元のイメージをいじればいいんだけど、これがまたとても面倒くさい。
しかし、やらねばなるまい。やったるで!
と言うことで、MID816用のメモ。
下記の記事は熟読必須。
Rooting research
http://www.slatedroid.com/index.php?/topic/13591-rooting-research/
HOWTO: Unpack, Edit, and Re-Pack Boot Images
http://android-dls.com/wiki/index.php?title=HOWTO:_Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images
※補足、Rooting research で Mmartinez氏が u-Bootイメージのアドレスを 0x03080000 と言ってるが、本当は 0x30800000 が正しい。
私の記事はそれを修正してあるので間違えないように。
まず、必要なもの。
- Linux環境
私の場合はWMware上で動くUbuntu。 - Linux上で動く次のコマンド
split_bootimg.pl
mkbootimg
mkimage
ぐぐったら入手方法なんかは分かるはず。
拾ったら、実行権限を与えてパスの通った場所へコピーしておく。 - オリジナルファーム
20110211-update.zipを使用した。
作業開始。
20110211-update.zipを解凍して、boot.imgを取り出す。
boot.imgをLinux環境上の作業用のディレクトリにとりあえずコピー。
$ mkdir ~/myfirmware
$ cd ~/myfirmware
$ cp hogehoge/boot.img ./
split_bootimg.pl を使って boot.imgをバラす。
$ split_bootimg.pl boot.img
Page size: 2048 (0x00000800)
Kernel size: 3404636 (0x0033f35c)
Ramdisk size: 823260 (0x000c8fdc)
Second size: 0 (0x00000000)
Board name:
Command line:
Writing boot.img-kernel ... complete.
Writing boot.img-ramdisk.gz ... complete.
カレントディレクトリに boot.img-kernel と boot.img-ramdisk.gz が生成される。
gzイメージはそのままでは解凍できない。u-Bootのヘッダがついているので除去する。
$ dd if=boot.img-ramdisk.gz of=boot.img-ramdisk.cpio.gz bs=64 skip=1
12862+1 records in
12862+1 records out
823196 bytes (823 kB) copied, 0.607133 s, 1.4 MB/s
できあがった boot.img-ramdisk.cpio.gz の中身を解凍して展開する。
$ mkdir ramdisk
$ cd ramdisk
$ gunzip -c ../boot.img-ramdisk.cpio.gz |cpio -i
ramdiskディレクトリ内にbootイメージのシステムツリーが展開される。よしよし\(^o^)/
好きなように、必要なファイルを編集したり、ごそごそ作業する(笑)
編集が終わったらリパックする。
ここからは、バラした作業の逆手順をやっていけばいい、、、んだけど、結構ややこしい。
ramdiskディレクトリに入ったまま、
$ find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz
$ cd ..
newramdisk.cpio.gz が生成される。
続いて、u-Bootイメージを作る。この処理でu-Boot用のヘッダを付加しておくわけ。
$ mkimage -A arm -O linux -T ramdisk -C none -a 0x30800000 -e 0x30800000 -n ramdisk -d newramdisk.cpio.gz newramdisk.gz
パラメータなどは、Slatedroid記事他、自力で調べたものをつけている。
ちなみに、-a (load address) と -e (entry address) はブート時に表示されるシーケンスメッセージを見てると表示されているハズ。
-n は要らないかもしれない。
ここのパラメータを間違えるとまず起動しない。
これで、root ramdiskのイメージが出来上がった。
最後に、焼き込み用のイメージを作る。
$ mkbootimg --kernel boot.img-kernel --ramdisk newramdisk.gz --base 0xc0000000 -o myboot.img
でーきーあーがーりーー。
myboot.img を boot.img にリネームして、オリジナルファームの 20110211-update.zip の中に入れ、あとは普通にファームアップデートをすればおk!!
以上、おいら用の備忘録。
いやー、なかなか調べるのに苦労した。英語でも詳しい手順が記事になってないから、素人がする作業ではないことは確かかな。
実際に作ってテストしてたんだけど、一歩間違えるとブート無限ループの刑になったりしてとっても危険(笑)
くれぐれも自己責任で行うように。
死んでも知らんww