BUDUJEMY NOWY ROM
Część druga: przygotowujemy plac boju.
Przyszedł czas na prawdziwe działanie. Teraz będziemy robić to, co faceci lubią najbardziej (poza piwem i piłką przed telewizorem :p ) - rozbierać. Będziemy rozbierać dwa ROMy.
Istotą przystosowywania ROMu z jednego urządzenia na inne jest zapewnienie zgodności ROMu z urządzeniem w trzech punktach:
1. Prawidłowy obraz ROMu;
2. Działające jądro systemu (kernel);
3. Działające sterowniki urządzeń.
Cały proces tworzenia nowej bazy ROMu na podstawie innego sprowadza się zasadniczo do zapewnienia powyższych trzech punktów. Prawda, że proste?

Jako, że niektóre z czynności mogą być wykonywane różnie przy pomocy tej, czy innej kuchni, wszelkie operacje będziemy przeprowadzać ręcznie. Dzięki temu porządnie zrozumiemy, co tak na prawdę robimy, zaznajomimy się z narzędziami i będziemy niezależni od danej kuchni - zwłaszcza, że niektóre z nich są fatalnie przygotowane i wymagają np. trzymania jej w jednym, konkretnym katalogu

Ponadto, po zakończeniu kursu, każdy będzie mógł sobie sporządzić swoją własną kuchnie - i tak wszystkie te istniejące działają w oparciu o te same narzędzia, które zebraliśmy w pierwszej części.
Od tej pory, aż do końca tutoriala, zakładam, iż robicie to, co ja - portujemy ROM z Artemisa na Wizarda. Jeśli nie, musicie lekko modyfikować poszczególne komendy, ale ogólna zasada i kolejność postępowania będzie zawsze taka sama.
Zakładamy sobie katalog
Artemis_dump i kopiujemy do niego ściągnięty z linka w pierwszej części tutoriala plik
RUU_signed.nbh. Kopiujemy tam też program
NBHextract.exe. Następnie wykonujemy:
Artemis_dump>NBHextract RUU_signed.nbh
=== NBHextract v1.0
=== Extract contents from HTC NBH files
=== (c)2007 xda-developers.com
=== by: pof & TheBlasphemer based on itsme perl scripts
Device: ARTE*****
CID: T-MOB009
Version: 3.15.118.1
Language: PLK
Extracting: 00_G3IPL.nb
Extracting: 01_G4IPL.nb
Extracting: 02_SPL.nb
Extracting: 03_MainSplash.nb
Encoding: 03_MainSplash.bmp
Extracting: 04_ExtROM.nb
Extracting: 05_GSM.nb
Extracting: 06_OS.nb
Wszystkie nowe pliki, z wyjątkiem 06_OS.nb, kasujemy (no, chyba że chcecie pobawić się ExtROMem, jest tam np. TomTom 6.030

). Plik 06_OS.nb przemianowujemy na
OS.nb.
Następnie rozpakowujemy w tym katalogu zawartość imgfstools i wykonujemy:
Artemis_dump>ImgfsFromNb OS.nb imgfs.bin
ImgfsFromNb 2.0 RC 2
Searching for IMGFS start...
Found IMGFS at 00620000.
Dumping IMGFS at offset 00620000 (size 034dfff0)
Done!
i następnie:
Artemis_dump>ImgfsToDump imgfs.bin
ImgfsToDump 2.0 RC 2
guidBootSignature: F8 AC 2C 9D E3 D4 2B 4D BD 30 91 6E D8 4F 31 DC
dwFSVersion: 00000001
dwSectorsPerHeaderBlock: 00000001
dwRunsPerFileHeader: 00000001
dwBytesPerHeader: 00000034
dwChunksPerSector: 00000008
dwFirstHeaderBlockOffset: 00000200
dwDataBlockSize: 00001000
szCompressionType: XPR
dwFreeSectorCount: 000020C6
dwHiddenSectorCount: 00000100
dwUpdateModeFlag: 00000000
Address: 00000200, dwBlockSignature: 2F5314CE
dwNextHeaderBlock: 00043E00 (size: 00043C00)
........ duuuużo napisów ;) ...... każdy moduł wymieniany tutaj....
Header type: FFFFFEFE, Addr: 030C71A8
dwNextDataTableOffset: 00000000
dwNextStreamHeaderOffset: 00000000
cchName: 00000003
wFlags: 00000000
szShortName: .VM
dwStreamSize: 00000010
dwFileAttributes: 00000047
fileTime: EF754B60 01C809A3
dwReserved: 00000000
dwDiskOffset: 030C7380
cbOnDiskSize: 00000040
wCompressedBlockSize: 0010
wDecompressedBlockSize: 0010
dwDiskOffset: 030C73C0
W tej chwili mamy już utworzony podkatalog
dump, w którym znajduje się nasz nowy system.
Podczas tworzenia nowego ROMu polecam korzystać ze struktury katalogów utworzonej przez narzędzie PKGTool, gdyż w ten sposób łatwiej będzie posortować pliki i ewentualnie przeczyścić ROM z niepotrzebnych aplikacji. Poandto, bez tej struktury, życzę powodzenia w odnajdywaniu wszystkich sterowników...

Kopiujemy więc do naszego katalogu program PKGTool i uruchamiamy go. Wybieramy nasz katalog dump, czytamy wyświetlone info i wciskamy
Tools -> Build Packages. Możemy iść zrobić sobie kawę, albo zapalić

Po powrocie zastajemy nasz podkatalog dump w całkiem nowej postaci:
Katalog: Artemis_dump\dump
2007-10-08 12:54 742 b932f30f-04f6-45c8-9447-dac8b90e9ed1.dsm
2007-12-08 01:00 <DIR> OEM
2007-12-08 01:00 <DIR> SYS
Jeżeli przyjdzie nam ochota pogrzebać w rejestrze ROMu, okaże się, że jest on zapisany w binarnym formacie. Przekonwertujemy go do znanej postaci RGU:
Artemis_dump>set _FLATRELEASEDIR=.\dump
Artemis_dump>rgucomp.exe -nologo -o dump\SYS\Metadata\default.hv >dump\default.rgu
Artemis_dump>rgucomp.exe -nologo -o dump\SYS\Metadata\user.hv >dump\user.rgu
Pliki rejestru zostały zapisane w katalogu
dump. Pamiętaj, aby na ich początku dodać zapis
REGEDIT4!
Pozostaje nam jeszcze wyciągnięcie sekcji XIP z pliku OS.nb. Tworzymy katalog XIP, kopiujemy do niego OS.nb, zmieniamy mu nazwę na nk.nba, kopiujemy jeszcze ROMMaster i XIPPort i uruchamiamy:
Artemis_dump\XIP>RomMaster -w 5 nk.nba -x -o xip.bin
[Info] It is a common ROM.
[Warning] o32_rom(0x8c28e318)'s o32_data at 0x00000000 is zero.
[Warning] Found dif-referenced region [OLD] Address=0x8c16a208 Length=0x00000800 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c16a208 Length=0x00000800 ObjectType=0x00008000
[Warning] Found dif-referenced region [OLD] Address=0x8c169970 Length=0x00000600 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c169970 Length=0x00000600 ObjectType=0x00008000
[Warning] Found dif-referenced region [OLD] Address=0x8c17b544 Length=0x00000a00 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c17b544 Length=0x00000a00 ObjectType=0x00008000
[Warning] Memory Block(0x8c101000,0x8c153fe0) overlap with Block(0x8c1028ac,0x8c1028d8).
[Info] New rom filename is 'xip.bin'.
Jak widzimy, otrzymaliśmy nowy plik
xip.bin, będący obrazem naszej sekcji XIP. Następnie uruchamiamy XIPPort i wybieramy
dump xip.bin. Utworzy to nowy katalog
OUT. Możemy jeszcze dla ułatwienia wykonać
make pkgs. Powrót do poprzedniego układu plików poprzez funkcję
undo.
Zostawiamy na razie ROM Artemisa, rozbierzemy teraz nasz stary ROM Wizarda. Generalnie wykonamy te same czynności, ale mimo wszystko prześledźmy cały proces jeszcze raz, gdyż nie jest on
identyczny! Do operacji wybieramy
prawie dowolny, działający ROM Wizarda. Wiadomo, że różne wersje ROMów miały różne babole, sprezentowane nam przez firmę z Redmond. Dlatego najlepiej jest wziąć ten, który nam dobrze działa.
Zakładamy katalog
Wizard_dump, kopiujemy wszystkie narzędzia do niego oraz plik
nk.nbf. Wykonujemy kolejno:
Wizard_dump>typho5.exe -x nk.nbf
extracted OS
Wizard_dump>ren *OS.nb OS.nb
Wizard_dump>ImgfsFromNb OS.nb imgfs.bin
ImgfsFromNb 2.0 RC 2
Searching for IMGFS start...
Found IMGFS at 00620000.
Dumping IMGFS at offset 00620000 (size 031ffff0)
Done!
Wizard_dump>ImgfsToDump imgfs.bin
Wizard_dump>PKGTool.exe
Jeśli po tych operacjach w katalogu dump będzie więcej zawartości ponad katalogi OEM i SYS, oraz ewentualnie jakieś pliki DSM, należy je ręcznie posegregować. Generalnie, taka sytuacja powstaje przez niedbałą kuchnię, bądź niedbałe gotowanie - czyli pliki nie są sparowane z odpowiednimi plikami DSM. Zazwyczaj te luźne pliki powinny wylądować albo w katalogu
OEM\OEMApps, albo
OEM\OEMDrivers.
Rejestr:
Wizard_dump>set _FLATRELEASEDIR=.\dump
Wizard_dump>rgucomp.exe -nologo -o dump\SYS\Metadata\default.hv >dump\default.rgu
Wizard_dump>rgucomp.exe -nologo -o dump\SYS\Metadata\user.hv >dump\user.rgu
Tworzymy katalog XIP, kopiujemy OS.nb do tego katalogu pod nazwą nk.nba, kopiujemy narzędzia i:
Wizard_dump\XIP>RomMaster -w 5 nk.nba -x -o xip.bin
[Info] It is a common ROM.
[Warning] o32_rom(0x8c29c410)'s o32_data at 0x00000000 is zero.
[Warning] Found dif-referenced region [OLD] Address=0x8c177208 Length=0x00000a00 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c177208 Length=0x00000a00 ObjectType=0x00008000
[Warning] Found dif-referenced region [OLD] Address=0x8c176970 Length=0x00000600 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c176970 Length=0x00000600 ObjectType=0x00008000
[Warning] Found dif-referenced region [OLD] Address=0x8c188544 Length=0x00000a00 ObjectType=0x00200000
[Warning] Found dif-referenced region [New] Address=0x8c188544 Length=0x00000a00 ObjectType=0x00008000
[Warning] Memory Block(0x8c101000,0x8c160670) overlap with Block(0x8c1027fc,0x8c102828).
[Info] New rom filename is 'xip.bin'.
Uruchamiamy XIPPort i kończymy zabawę w rozbieranie.