ROMクッキング

うまくいいかずにしばらく投げ出していたROMクッキングですが、年が明けから再チャレンジしていました。すっかり忘れてしまっていたので一から調べなおしたうえ、前回は最初から色々欲張りすぎていたようなので、今回は少しずつ出来ることを確認しながら範囲を広げていくことにしました。


XIPとモジュールベースのカスタマイズには色々と間違いがありそうだったので、まずはレジストリとファイルベースのカスタマイズから始めることにします。とりあえずATOKを入れて起動するROMを作ってみます。


ということで失敗も含めて作業記録を覚書。


■準備
(1)ツール
まずツールですがEFN氏のV5 Kitchenを使います。前のやつとそう変わり映えはしてないようですが、G'reloc.exeやBuildOS.exeの手順が一部加わっており、前回はそれらの使い方がよくわかっていなかったので助けになりました。
http://forum.xda-developers.com/showthread.php?t=409258

今回はC:\i780 V5に展開するものとします。


(2)ベースROM
ベースに使ったROMはいまとなってはちょっと後戻りしてますがDXHE1で進めました。
PDAのみのbinファイルをi780.binとしてC:\i780 V5に配置します。


■調理手順
(1)ROMのダンプ
CreateDump.batを実行すると下記ファイルが作成される。
i780.nb0
 i780.nb0.extra
 i780.nb0.payload
  i780.nb0.payload.header
  i780.nb0.payload.body
   imgfs_raw_data.bin
    dumpフォルダ

imgfsの内容はdumpフォルダに展開されている。

あわせて次のファイルも作成される。あとでサイズ確認に使用する。
bintonb0.txt
dump_MemoryMap.txt


(2)ROM調理−ファイル削除
スペースを作るため使わなそうなものや後でCabにしてインストールできそうなファイルをdumpフォルダから削除する。今回は記録を残すためdel-filesというフォルダを作成し削除せずそこへ退避させておく。
camcorder_end_woman01.wav
camcorder_start_woman01.wav
camera_shutter_chalkak_china.wav
camera_shutter_great.wav
camera_shutter_ok.wav
cheese_china.wav
now_its_done_china.wav
ready_china.wav
smile_china.wav
take_picture_now_china.wav

Podcasts
Podcasts.exe
Podcasts.exe.0409.mui
Podcasts.opml

RssReader
RssReader.exe
RssReader.exe.0409.mui


これら17ファイルで合計4.80M削れる計算です。
なお、PodcastsとRssReaderはEFN氏がcab化したものがあるので必要なら後で入れらます。


(3)ROM調理−ファイル追加
あまり空きも作れそうにないので今回はATOK関係のみ追加してみる。SIPなどは入れません。
ATOK
atok.htm
atok_suisoku.bmp
ATOKIMM.dll
ATOKP.CPL
atokp.dic
atokpce.dll
ATOKPUT.exe
ATOKPW.dll
Atokrc.dll


これら10ファイルで合計4.36M。ギリギリ入る感じです。


(4)レジストリ編集
rgucomp_cn.exeを適当なフォルダにインストール。また、rgu編集用にEmEditer等のUTF-16をサポートしているテキストエディターをインストール。

dumpフォルダのdefault.hvとuser.hvをrgucomp_cnをインストールしたフォルダにコピー。

次のコマンドを実行。
set _FLATRELEASEDIR=.
rgucomp_cn -o default.hv -nologo > default.rgu
rgucomp_cn -o user.hv -nologo > user.rgu

default.rguとuser.rguをテキストエディタで開き、それぞれ必要なレジストリの変更を行い、1行目に"REGEDIT4"を追加し改行(最初のレジストリ行との間はあけない)、最終行の次に1行ブランク行を入れUTF-16LE(BOM付)で保存。

default.rguに次のレジストリ追加、変更を行う。
;Keyboard関係

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Layouts\e0200411]
"Keyboard Layout"="00000409"
"Layout Text"="JUSTSYSTEM ATOK"
"Ime File"="atokimm.dll"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Layouts\e0010411]
"Ime File"="atokimm.dll"
"Keyboard Layout"="00000409"

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Layouts\e0010411\1]
"Keyboard Layout"="00000409"


;オペレータ名変更(運用機では"46001"="中国?通"や"46000"="中国移?"となっているが"がかけていたので修正)
[HKEY_LOCAL_MACHINE\Software\Microsoft\RIL\OperatorNames\0804]
"46001"=""
"46000"=""

続いてuser.rguに次のレジストリ追加を行う。
;Keyboard関係

[HKEY_CURRENT_USER\keyboard layout\Preload\3]
@="e0200411"


;ATOK関係

[HKEY_CURRENT_USER\Software\JustSystem\ATOKM\UI]
"DUT"="\\Windows\\ATOKPUT.EXE"

[HKEY_CURRENT_USER\Software\JustSystem\ATOKM\DIC]
"1"="\\Windows\\ATOKP.DIC"


次のコマンドを実行。

set _FLATRELEASEDIR=.
copy /Y default.rgu boot.rgu
rgucomp_cn -b
copy /Y boot.hv default.hv
copy /Y user.rgu boot.rgu
rgucomp_cn -b
copy /Y boot.hv user.hv
del boot.rgu
del boot.hv


出来上がったdefault.hv、user.hvをdumpフォルダーへコピーする。



(5)モジュールの再配置
dumpフォルダの名称をSYSへ変更。実行ファイルと同一フォルダ内のSYSフォルダに対して処理される。
1_reloc.exe起動し各項目を\SYS\.VM\imageinfo.txtの内容にあわせて入力。
Slot0: e32_imageflagsの値 "000001FA"
Slot1: e32_entryrvaの値 "03DA0000"
Size of ROM: e32_vbaseの値 "878E1000"
Doit!をクリック。Doneとなったら終了。SYSフォルダの名称をdumpへ戻す。


(6)binファイルの作成
RecreateBin.batを実行。終わったら続けてConvertNb0ToBin.batを実行
しばらくするとi780_flashable_bin.binが作成される。ここまでで一応調理作業は一通り終了。


(7)ファイルサイズの確認
ベースROMとして使用したi780.binのサイズと作成したi780_flashable_bin.binが同じサイズかどうか確認。bintonb0.txtとconv3_output.txtのフッターアドレスサイズが同じかどうか確認。確認方法は次の通り。


CreateDump.batで作成されたbintonb0.txtのフッターアドレスサイズを確認する。
確認する場所は最後から2行目のStart:に続く部分(下記の例では5292400)。


(例)
Start: 5272200, Length: 20200, CheckSUM: 15E20
Start: 5292400, Length: 20200, CheckSUM: 29D71D
Start: 0, Length: 0, CheckSUM: 0


続いてConvertNb0ToBin.batで作成されたconv3_output.txtのフッターアドレスサイズを確認する。
確認する場所は最終行のAddress:に続く部分(下記の例では5292400)


(例)
Address: 5292400 Checksum: 29D71D


両者のサイズが一致していれば成功、後者の方が大きい場合はファイルを追加しすぎのため更なる不要ファイルの削り込みが必要。


(8)ROM焼き
成功していたらMirage_LV_v1.8.exeを立ち上げi780_flashable_bin.binを焼く。


Step1でMIRAGELV imageを選択。
Step2でPDAに今回作成したi780_flashable_bin.binを選択。
Phone Bootloader Updateのチェックをはずす。
右側のlog表示でCalculating...Done!となったらDetectをクリック。
i780本体のFn+Enter+リセットホールを押しエマージェンシーモードにする。
i780本体をPCへUSB接続する。
ROM焼きが開始される。
i780およびMirageでそれぞれ順次進捗が表示され、MirageのDownload ProgressでJob Done.Launched!となればOK。
USBケーブルを抜いて、i780の電源を長押して再起動。


無事に再起動すればとりあえずは成功。あとはATOKがちゃんと動くかどうかです。


(追記)とりあえずブートしました。ということでファイルベースでのROMカスタマイズ手順はあってたようです。ただ、ATOKの方はうまく動かないみたい・・・何がたりないのかもう少し調べてみます。