Pages

2012年2月5日日曜日

boot.imgの展開方法

まずboot.img展開に必要なもの
・boot.img(初期ROM等から入手)
・split_bootimg.pl(ググればDLできるはず)
・mkbootfs, mkbootimg →https://gist.github.com/1087757この辺参照してください

まずは適当なディレクトリ(フォルダ)を作って
そこに上のファイルをすべて移動
移動したら初めにboot.imgの展開
./split_bootimg.pl boot.img

これを実行すると
boot.img-kernel boot.img-ramdisk.gz この二つのファイルができると思います。

次にboot.img-ramdisk.gzを展開
まずディレクトリを作成

mkdir ramdisk

作ったディレクトリに移動

cd ramdisk

で、次のコマンドを実行
zcat -dc ../boot.img-ramdisk.gz | cpio -i

これでできたramdiskの中身が
SC-02Bの時のinitramfsにあたるのかな?とか思ってます。

カーネルソースはいじらずに
ramdiskにできたinit.rcなどなどをいじるだけでも
カスタムできると思います。
まだ自分は勉強中ですがw

で、これをもう一度boot.imgの形式に戻します。
ramdiskのディレクトリからいったん出ます

cd ../

それからramdiskディレクトリをアーカイブ(この辺の意味はよくわってません^^;)
./mkbootfs ./ramdisk | gzip > new-boot.img-ramdisk.gz

作成した一時ファイルシステムのファイルと、元のカーネルをアーカイブします。
./mkbootimg --cmdline 'loglevel=4 usb_id_pin_rework=true'\
--kernel boot.img-kernel --ramdisk new-boot.img-ramdisk.gz --base ?? -o new_boot.img

これでnew_boot.imgの完成
この時の
--cmdline ' '←この中はsplit_bootimg.plを実行したときに
Command line:~ の部分をそのまま入力
--base の後の数値は今調べ中^^;

tags_addrってのの数値らしいですが、調べ方が。。。
頑張って探しますw

[追記]
hexdump boot.img | head -n1

このコマンドで出てきた数値の一番後ろ4ケタが
--baseの後ろに打ち込む数値なようです。
自分の場合
000000 4e41 5244 494f 2144 49f4 0049 8000 4040
だったので
0x40400000かなと思ってます^^;

./mkbootimg --cmdline 'loglevel=4 usb_id_pin_rework=true'\
--kernel boot.img-kernel --ramdisk new-boot.img-ramdisk.gz --base 0x40400000 -o new_boot.img

になるのかなと思います。
まだ試してないので、これが正解かどうかわかりません^^;
bootをいじるので、失敗すると文鎮になる可能性大なので
自己責任でお願いします




0 件のコメント:

コメントを投稿