PrzygotowaniaW poprzednich częściach kursu przygotowaliśmy sobie dwa ROMy, jeden stary z naszego urządzenia, drugi nowy z obcego. Skopiujmy teraz katalog z nowym ROMem do nowego katalogu i nazwijmy np.
Wizard_nowy_ROM (podaję nazwę po to, żeby było później odniesienie do głębszych ścieżek). Ściągamy wszystkie dostępne narzędzia (w zasadzie powinniśmy już mieć wszystkie, ale jeśli czegoś w trakcie zabraknie, można dociągnąć) i wrzucamy do tego katalogu.
Dosyć gadania, zabieramy się do roboty. Czas na...
Portowanie sekcji XIPZadanie, które odstrasza większość domorosłych portowców (hehe...) - obróbka sekcji XIP nowego ROMu. Faktem jest, że dopóki narzędzie, którym się będziemy za chwilę posługiwać, zawierało błędy w swojej głównej funkcji, pomyślne zakończenie operacji wymagało niezłego kombinowania i trochę wiedzy, to od pewnego czasu zostało ono już poprawione. Problemem tylko jest odnalezienie tej poprawnej wersji

bo linków do tego programu w sieci jest zatrzęsienie. Dlatego właśnie pobierz go z naszej strony, będziesz miał pewność, że jest to ostatnia, poprawnie działająca wersja. Możesz go pobrać
stąd.
W poprzedniej części tego kursu rozebraliśmy całą sekcję XIP obydwu ROMów na składniki. Pora na właściwe działanie.
W ROMie docelowym musimy zamienić kilka plików, które są wybitnie zależne od sprzętu na te pochodzące z ROMu naszego urządzenia. Podmieniamy więc:
- XIP\nk.nba
- XIP\OUT\PARTHDR.txt
- XIP\OUT\ROMHDR.txt
- XIP\OUT\MODULES\nk.exe
- XIP\OUT\MODULES\TrueFFS.dll
- XIP\OUT\MODULES\imgfs.dll
- XIP\OUT\MODULES\hd.dll
- XIP\OUT\MODULES\cecompr.dll
przy okazji możemy wyrzucić:
- XIP\OUT\MODULES\osaxst0.dll
dzięki czemu zyskamy miejsce, którego może nam zabraknąć (rozmiar sekcji XIP jest ograniczony
sprzętowo!)
W trakcie prac lista ta może oczywiście ulec zmianom - wydłużeniu, skróceniu, przemodelowaniu itp.... W tym procesie nie ma rzeczy stałych i niezmiennych (no, może poza tym, że
na pewno należy zmienić plik
nk.exe - to jest jądro systemu).
Uruchamiamy program XIPPort i wciskamy klawisz "realloc P". Następnie upewniamy się, że w dolnym polu edycyjnym wpisana jest prawidłowa nazwa obrazu, jaką mamy w tym samym katalogu. W przypadku naszego tutoriala musimy zaprogramowaną nazwę nk.nb zmienić na
nk.nba. Wciskamy "build xip_out.bin" i "write xip_out.bin to:". Zamykamy program

Wynikowy plik
nk.nba kopiujemy katalog wyżej, do głównego katalogu naszego ROMu, zmieniając przy tym mu nazwę na
OS.nb,
nadpisując tym samym istniejący tam już plik o tej nazwie. Sekcję XIP możemy na razie zostawić, powinno już działać. W razie czego, jeżeli cokolwiek będziemy jeszcze zmienić, pamiętać należy o realokacji, zapisaniu do nk.nba i skopiowaniu na OS.nb.
To wszystko

Czeka nas teraz...
Portowanie plików systemuZasada postępowania tutaj jest w zasadzie identyczna, jak w przypadku sekcji XIP, tylko narzędzia będą inne. Naszym głównym celem jest podstawienie do nowego ROMu sterowników przeznaczonych do naszego urządzenia, w miejsce tych oryginalnych. Lista plików, które wymagać będą podmianie, jest długa i nieokreślona ściśle - dlatego właśnie zalecam rozbicie dumpa ROMu za pomocą
PackageTool - zadanie będzie nieco prostsze.
Problem jest tylko jeden: znaleźć wszystkie pliki, które należy podmienić, wraz z odpowiadającymi im wpisami rejestru (plikami
RGU)
Na początek śmiało można z naszego starego ROMu przekopiować wszystkie pliki z katalogu
dump\OEM\OEMDrivers, a także większość z katalogu
dump\OEM\OEMAPPS. Warto zajrzeć do katalogu
dump\OEM\OEMOPERATORS, gdzie znajdują się ustawienia specyficzne dla operatora sieci (głównie pliki
*.provxml).
Następnie w katalogu
dump\SYS\.VM namierzamy plik
imageinfo.txt i również podmieniamy naszym starym.
Teraz najgorsza część... przeglądamy resztę pakietów w katalogu
dump\SYS. Znajdują się tam pliki i wpisy od wyposażenia urządzenia, typu bluetooth, IrDA itp. Do tego kroku będziemy powracać wielokrotnie, aż do osiągnięcia sukcesu końcowego - czyli w pełni działającego nowego ROMu.
Po zakończeniu operacji podmiany/edycji plików i
RGU, do katalogu
dump kopiujemy program
G'Reloc i uruchamiamy. Jeżeli wcześniej skopiowaliśmy odpowiedni plik
dump\SYS\.VM\imageinfo.txt, wprowadzone w oknie parametry będą prawidłowe - wciskamy "
Doit!" i czekamy.
Pozostaje sekcja bootująca system. W katalogu dump tworzymy katalog
ROM a w nim
XIP, i kopiujemy do niego plik
Wizard_nowy_ROM\XIP\OUT\FILES\boot.rgu.
Edycja plików zakończona, pozostaje tylko...
Złożenie końcowego obrazu ROMuTo są czynności, które po pierwsze, każdy powinien już jako tako znać, a po drugie, planuję napisać o tym jeszcze szerzej w następnej części tego kursu. Dlatego też tutaj potraktuję temat dość skrótowo, bez obszernych opisów, bardziej jak tutorial.
Za chwilę zbudujemy namiastkę mini-kuchni (prawdziwą kuchnię będziemy składać później). W plikach
user.rgu i
default.rgu zmieniamy kodowanie na Unicode i dodajemy w pierwszej linii napis
REGEDIT4, oraz upewniamy się, że na końcu plików jest przynajmniej jedna pusta linia. Następnie tworzymy katalog
dump\Tools i kopiujemy do niego wszystkie pliki
EXE i
DLL, które mamy w naszym głównym katalogu:
Wizard_nowy_ROM>mkdir dump\Tools
Wizard_nowy_ROM>copy *.dll dump\Tools
Wizard_nowy_ROM>copy *.exe dump\Tools
Wizard_nowy_ROM>cd dump
Do katalogu dump kopiujemy jeszcze
BuildOS.exe i
pkgcommon.dll, po czym uruchamiamy
BuildOS, a w nim klikamy ikonkę podobną do "
PLAY" w odtwarzaczach. Jeżeli program zwróci błąd podczas uruchamiania się, oznacza to, że mamy błąd w samej strukturze plików, np. zdublowane
GUID w plikach
RGU i/lub
DSM. Jeżeli program zwróci błąd podczas budowania systemu, to może oznaczać np. zdublowane pliki, albo błąd podczas budowania rejestru. W katalogu
dump\temp znajduje się plik
log.txt, który taki błąd wychwyci i pokaże nam.
Po zakończeniu działania BuildOS budujemy z przygotowanego katalogu systemu obraz systemu plików do wpisania w ROM:
Wizard_nowy_ROM\dump>cd temp
Wizard_nowy_ROM\dump\temp>copy ..\..\imgfs.bin .
Wizard_nowy_ROM\dump\temp>..\Tools\ImgfsFromDump imgfs.bin imgfs-new.bin
Total Sectors: 0x17a00
Wizard_nowy_ROM\dump\temp>copy imgfs-new.bin ..\..
Wizard_nowy_ROM\dump\temp>cd ..\..
Wizard_nowy_ROM>ImgfsToNb imgfs-new.bin OS.nb OS-port.nb
ImgfsToNb 2.0 RC 2
Done!
W efekcie tych operacji w katalogu głównym mamy nowy plik
OS-port.nb, który stanowi nasz nowy obraz ROMu. Pozostaje przygotować plik do flaszowania za pomocą programu
nb2nbf.exe.
Jeśli wgrany ROM nie będzie działał (co podczas takich zajęć jest normą), następny próbny ROM wgrywamy z poziomu bootloadera (record+camera+reset).
To w zasadzie tyle, jeśli chodzi o techniczną stronę portowania ROMów z innych urządzeń. Jak z tego krótkiego opisu widać, jedyny problem leży w decyzji, które pliki podmienić. Poprawnie bootujący ROM uzyskacie bardzo szybko, natomiast sprawdzanie poszczególnych sterowników może zająć sporo czasu...
W następnej części kursu zbudujemy prostą kuchnię, na której z powodzeniem można smażyć wysoko-spersonalizowane ROMy.