ubuntuで作成
必要なファイル群は色々
xdaのこちらを参考にCWMとTWRP入りのものを作成。
1.boot.imgを探す
端末とPCをつないで
adb shell
cat /proc/partitions
major minor #blocks name
179 0 3817472 mmcblk0
179 1 1024 mmcblk0p1
179 2 2048 mmcblk0p2
179 3 20480 mmcblk0p3 ←boot.imgこれ
179 4 1 mmcblk0p4
179 5 30720 mmcblk0p5
179 6 8192 mmcblk0p6
179 7 5120 mmcblk0p7
179 8 8192 mmcblk0p8
179 9 8192 mmcblk0p9
179 10 16384 mmcblk0p10 ←lta-label
179 11 665600 mmcblk0p11 ←system
179 12 163840 mmcblk0p12 ←cache
179 13 3072 mmcblk0p13
179 14 3072 mmcblk0p14
179 15 3072 mmcblk0p15
179 16 768000 mmcblk0p16 ←data
179 17 2103296 mmcblk0p17
179 32 7875584 mmcblk1
179 33 7871488 mmcblk1p1 ←ext_card
cat /proc/partitions
major minor #blocks name
179 0 3817472 mmcblk0
179 1 1024 mmcblk0p1
179 2 2048 mmcblk0p2
179 3 20480 mmcblk0p3 ←boot.imgこれ
179 4 1 mmcblk0p4
179 5 30720 mmcblk0p5
179 6 8192 mmcblk0p6
179 7 5120 mmcblk0p7
179 8 8192 mmcblk0p8
179 9 8192 mmcblk0p9
179 10 16384 mmcblk0p10 ←lta-label
179 11 665600 mmcblk0p11 ←system
179 12 163840 mmcblk0p12 ←cache
179 13 3072 mmcblk0p13
179 14 3072 mmcblk0p14
179 15 3072 mmcblk0p15
179 16 768000 mmcblk0p16 ←data
179 17 2103296 mmcblk0p17
179 32 7875584 mmcblk1
179 33 7871488 mmcblk1p1 ←ext_card
XDAの公開されていたxperia_e_jb_cwm.elfをばらし、ramdisk/sbin/etc/recovery.fstabの中にmount point下のように示してあったので、boot.imgはmmcblk0p3で間違いなし
# mount point fstypedevice [device2] fstype2
/boot emmc/dev/block/mmcblk0p3
/system ext4/dev/block/mmcblk0p11
/cache ext4/dev/block/mmcblk0p12
/data ext4/dev/block/mmcblk0p16
/sdcard vfat/dev/block/mmcblk0p17
/external_sd vfat/dev/block/mmcblk1p1/dev/block/mmcblk1
2.boot.imgをSDカードに抜き取り、SDcardのboot.imgをPCに保存する
# adb shell
$ su
# dd if=/dev/block/mmcblk0p3 of=/sdcard/sony_boot.img
# adb pull /sdcard/sony_boot.img
保存場所は作業ディレクトリをつくるなど
3.boot.imgを解体
$ hexdump -C sony_boot.img > dump
$ head dump
00000000 7f 45 4c 36 01 01 01 61 00 00 00 00 00 00 00 00 |.ELF...a........|
00000010 02 00 28 00 01 00 00 00 00 80 20 00 34 00 00 00 |..(....... .4...|00000020 00 00 00 00 00 00 00 00 34 00 20 00 04 00 00 00 |........4. .....|
00000030 00 00 00 00 01 00 00 00 00 10 00 00 00 80 20 00 |.............. .| <== Byte 9/10/11: is kernel start (after 4k sin header)
00000040 00 80 20 00 28 88 40 00 28 88 40 00 00 00 00 00 |.. .(.@.(.@.....| <== Byte 9/10/11: is kernel length
00000050 00 00 00 00 01 00 00 00 28 98 40 00 00 00 50 01 |........(.@...P.| <== Byte 9/10/11: is ramdisk start
00000060 00 00 50 01 b1 73 18 00 b1 73 18 00 00 00 00 80 |..P..s...s......| <== Byte 9/10/11: is ramdisk length
00000070 00 00 00 00 04 00 00 00 d9 0b 59 00 00 00 00 00 |..........Y.....| <== Byte 9/10/11: is cmdline start
00000080 00 00 00 00 95 00 00 00 95 00 00 00 00 00 00 20 |............... | <== Byte 9/10/11: is cmdline length (512 characters)
00000090 00 00 00 00 53 49 4e 21 b4 00 00 00 00 00 00 00 |....SIN!........|
上とXDAの触れ書き(下)を参考にして(同機種であっても各端末によって違うらしいので面倒だがメモなりする)sony_kernel.imgとsony_ramdisk.img.gzとsony_cmdline.imgにunpackする。
00 10 00 => is 0x001000
68 70 3c => is 0x3c7068
68 80 3c => is 0x3c8068
c6 1b 15 => is 0x151bc6
2e 9c 51 => is 0x519c2e
00 02 00 => is 0x000200
68 70 3c => is 0x3c7068
68 80 3c => is 0x3c8068
c6 1b 15 => is 0x151bc6
2e 9c 51 => is 0x519c2e
00 02 00 => is 0x000200
$ dd skip=$((0x001000)) count=$((0x408828)) bs=1 if=sony_boot.img of=sony_kernel.img
4229160+0 記録始め
4229160+0 記録終わり
4229160 バイト (4.2 MB) コピー終了, 19.6939 s, 215 kB/s
$ dd skip=$((0x409828)) count=$((0x1873b1)) bs=1 if=sony_boot.img of=sony_ramdisk.img.gz
1602481+0 記録始め
1602481+0 記録終わり
1602481 バイト (1.6 MB) コピー終了, 32.3733 s, 49.5 kB/s
$ dd skip=$((0x590bd9)) count=$((0x000095)) bs=1 if=sony_boot.img of=sony_cmdline.img
149+0 記録始め
149+0 記録終わり
149 バイト (149 B) コピー終了, 0.000796749 s, 187 kB/s
$ hexdump -C sony_ramdisk.img.gz | head
$ gunzip sony_ramdisk.img.gz
$ mkdir ramdisk
$ cd ramdisk/
/ramdisk$ cpio -i < ../sony_ramdisk.img
4586 blocks
でramdiskが出来る4229160+0 記録始め
4229160+0 記録終わり
4229160 バイト (4.2 MB) コピー終了, 19.6939 s, 215 kB/s
$ dd skip=$((0x409828)) count=$((0x1873b1)) bs=1 if=sony_boot.img of=sony_ramdisk.img.gz
1602481+0 記録始め
1602481+0 記録終わり
1602481 バイト (1.6 MB) コピー終了, 32.3733 s, 49.5 kB/s
$ dd skip=$((0x590bd9)) count=$((0x000095)) bs=1 if=sony_boot.img of=sony_cmdline.img
149+0 記録終わり
149 バイト (149 B) コピー終了, 0.000796749 s, 187 kB/s
$ hexdump -C sony_ramdisk.img.gz | head
$ gunzip sony_ramdisk.img.gz
$ mkdir ramdisk
$ cd ramdisk/
/ramdisk$ cpio -i < ../sony_ramdisk.img
4586 blocks
↑ramdiskの中身(画像左のramdisk-twrpがmountしているのは間違いですね,,,)
4.ramdisk.cpioを作る
どこかホームなどにramdiskをコピペして
$ find | cpio -o -H newc > ../ramdisk.cpio
4586 blocks
ramdisk.cpioができあがる(後で使う)4586 blocks
5.XDAのdualboot.imgをunpackする
XDAにあったdualrecoveryカーネルをdualboot.imgをunpackしTWRPとCWM入りのramdiskをお借りする。
unpackはsplit_bootimgを使用?忘れた
unpckboot.imgで検索すればでてくる
unpck後
ramdisk内は
・sbin
・init
・sonylogo.rle
だけ
さらにsbin内に
・bootrec-device
・busybox
・init.sh ←これを覗いてみると感心する
・ramdisk.cpio(FW11.3.A.2.1)
・ramdisk.cwm.cpio
・ramdisk.twrp.cpio
↓のような状態
で、ここramdisk/sbin/に4.で作ったramdisk.cpioを上書き保存し
3.で作ったsony_kernel.imgがあるディレクトリにramdiskを保存、全て置き換える
6.boot.imgをrepack
ramdisk.img.gzを作る
$ cd ramdisk
/ramdisk$ find . | cpio --quiet -H newc -o | gzip > ../my_ramdisk.img.gz
/ramdisk$ find . | cpio --quiet -H newc -o | gzip > ../my_ramdisk.img.gz
boot.imgを作る(mkelf.pyが必要)
$ python mkelf.py -o my_boot.img sony_kernel.img@0x00208000 my_ramdisk.img.gz@0x01500000,ramdisk sony_cmdline.img@0x0,cmdline
python: can't open file 'mkelf.py': [Errno 2] No such file or directory
python: can't open file 'mkelf.py': [Errno 2] No such file or directory
とmkelf.pyに実行権限を与え忘れて怒られる
$ python mkelf.py -o my_boot.img sony_kernel.img@0x00208000 my_ramdisk.img.gz@0x01500000,ramdisk sony_cmdline.img@0x0,cmdline
my_boot.imgできあがり
7.boot.imgをflash
fastboot flash boot ./my_boot.img
sending 'boot' (11672 KB)...
(bootloader) USB download speed was 5149kB/s
OKAY [ 2.361s]
writing 'boot'...
(bootloader) Flash of partition 'boot' requested
(bootloader) S1 partID 0x00000003, block 0x00002000-0x0000bfff
(bootloader) Erase operation complete, 0 bad blocks encountered
(bootloader) Flashing...
(bootloader) Flash operation complete
OKAY [ 1.273s]
finished. total time: 3.634s
sending 'boot' (11672 KB)...
(bootloader) USB download speed was 5149kB/s
OKAY [ 2.361s]
writing 'boot'...
(bootloader) Flash of partition 'boot' requested
(bootloader) S1 partID 0x00000003, block 0x00002000-0x0000bfff
(bootloader) Erase operation complete, 0 bad blocks encountered
(bootloader) Flashing...
(bootloader) Flash operation complete
OKAY [ 1.273s]
finished. total time: 3.634s
無事起動できればOK?
XDAのhsr0さんpurplemazeさんに感謝いたします。
あれやこれやと仮定してから作っているので誤っている部分があるかもしれません、ご指摘いただけたら幸いで御座います。
このやり方で間違いないのであれば、OS4.3なり、4.4のアップデートがきてもSONYのソース公開を待たずしてTWRPやCWMがポート出来るのかも
スポンサーリンク
------------------------------------------
0 件のコメント :
コメントを投稿