Cucinare una ROM (quasi) da zero.

Questo tutorial si prepone lo scopo di mostrare come cucinare una ROM per il nostro cinafonino (quasi) da zero. Gli unici requisiti necessari per procedere oltre sono i file di Build di una versione Windows Mobile a scelta (IMGFS e XIP), e una qualunque versione di ROM funzionante per estrarre IPL.nb0, RAMInit.nbo, USBLoad.nb0, XLDR.nb0 e il boot.bin1).

Step 0: preliminari

Posizionarsi all'interno della directory della cucina.

Lanciare il batch 0_cleansrc.bat2) per ripulire la directory src.

- Copiare la ROM sorgente all'interno della directory src. Il file della ROM deve chiamarsi ciphone.bin, procedere quindi rinominandolo nel caso si chiamasse in modo differente.

Step 1: dump

Lanciare lo script 1_dump.bat.

Questo script, scritto per essere utilizzato anche per modificare una ROM già esistente, fa molto di più di quanto ci è richiesto per cucinare la nostra ROM (quasi) da zero. In particolare delle operazioni descritte nel dietro le quinte di 1_dump.bat, l'ultima passo, scompattazione e ripacchettizazione di imgfs.bin e xip.bin è superfluo. L'importante comunque è che tramite questo passo otteniamo RAMInit.nb0, USBLoad.nb0, XLDR.nb0 e IPL.nb0 in src\1\ e boot.bin in src\3.3)

Step 2: BuildOs

Lanciare lo script 2_cleanbuildOS.bat per ripulire la directory BuildOS4).

Copiare nella directory src.wm\4 le componenti IMGFS e XIP dell'immagine di WM che si vuole utilizzare. Se si sta utilzzando uno dei pacchetti distribuiti con la cucina dovrebbero già essere presenti anche le relative IMGFS\OEM, XIP\OEMXIPKERNEL e i file ROMHDR.txt e PARTHDR.txt, in caso contrario sarà necessario copiarli a mano, prelevandoli da uno dei pacchetti succitati. Al termine di questa operazione questa dovrebbe essere la struttura di src.wm\4:

Lanciare 3a_buildos_from_dump.bat

Quando compare la finestra di BuildOS premere il tasto con la freccia verde, attendere che completi la sua opera e chiuderlo.

BuildOs metterà il risultato nella directory BuildOS/temp

Durante questo passo è possibile personalizzare secondo il proprio gusto e le proprie esigenze il contenuto della ROM. Per fare cio' si potrà scegliere di agire direttamente aggiungendo, rimuovendo e/o modificando i pacchetti contenuti in src.wm\4 prima del lancio dello script 3a_buildos_from_dump.bat, oppure scegliere di modificare i pacchetti contenuti in BuildOS\OEM, BuildOS\ROM e BuildOs\SYS, dopo il lancio di 3a_buildos_from_dump.bat e prima dell'esecuzione della compilazione (freccia verde) da parte di BuildOS stesso, o ancora, in extremis lavorando direttamente sui file presenti in BuildOS\temp dopo aver chiuso la finestra dell'applicativo.

Per il dietro le quinte di 3a_buildos_from_dump.bat, riferirsi alla medesima sezione del tutorial Cucinare una ROM a partire da una ROM esistente.

Step 3: ExtReloc

Solite operazioni di pulizia del piano di lavoro:
4_cleanextreloc.bat
5_cleannew.bat

Lanciare 6b_extrelocandbuildxipfromWMBase.bat

Verrà creata la cartella ExtReloc\OUT.Tale cartella sarà popolata con i file prelevati da src.wm\4\XIP

Dopo l'avvio automatico di ExtReloc seguire scrupolosamente i passi indicati a video:

********************************************************
* [extreloc]  Import xipport                           *
* [extreloc]  ReallocV                                 *
* [xipport]   Realoc P                                 *
* [xipport]   Write maps                               *
* [extreloc]  Realloc nk.exe, gsiir, ... button        *
* [xipport]   Realloc P again                          *
* [xipport]   Write maps                               *
* [extreloc]  Drag the vertical white line to the left *
* [extreloc]  Realloc imgfs                            *
* [xipport]   Build xip_out.bin                        *
* [extreloc]  Close                                    *
********************************************************

e cioè, spiegato in maniera più estesa:

In Extreloc:
- Import xipport. Rilancia xipport (ci servirà successivamente).
- ReallocV

In XiPPort:
- ReallocP
- Write maps

In Extreloc:
- Realloc NK.EXE, GSIIR, DLL, etc

In XiPPort:
- ReallocP (di nuovo)
- Write maps (Anche questo passo credo non serva a nulla… ma nel dubbio lo lascio…)

In Extreloc:
- Trascinare la linea bianca verticale verso sinistra per visualizzare la schermata relativa al realloc di IMGFS
- Realloc IMGFS modules

In XIPPort:
- Build xip_out.bin

Chiudere la finestra di XIPPort, chiudere la finestra di Extreloc.
Se tutto è andato a buon fine dovremmo avere il file xip.bin dentro la directory new\1

Step 4: build imgfs

Lanciare il file 8_imgfsfromdump.bat per ricostruire il nuovo imgfs.bin a partire da quanto contenuto in BuildOS\temp.

Il nuovo imgfs sarà creato all'interno della directory new\1

Step 5: riassemblare flash.nb0

Lanciare 97_pmud1.bat.

Verrà ricostruito FLASH.nb0, iniettando i nuovi imgfs.bin e xip.bin nel flash.nb0.os.nb presente in src\2, e unendo il tutto con il file flash.nb0.PRE ottenuto precedentemente e anch'esso memorizzato in src\2.

Il risultato viene post in new\4

Step 6: assemblaggio di ciphone.bin

Lanciare 99_IDT.bat per avviare IDT e ricostruire la nuova ROM ciphone.bin.

Se compare la finestra Password premere Cancel (la finestra compare solo nel caso non ci sia un file chiamato ciphone.bin nella directory di IDT).

Dal menù selezionare View → Image merge

Platform select: GSM/EGPRS

Premere il tasto di merge

Confermare l'operazione

Inserire l'hw version: 1.0.0.05)

Salvare l'immagine con il nome ciphone.bin nel percorso proposto.

Chiudere la scheda di image merge

A questo punto è possibile effettuare direttamente il flash rilanciando IDT e mettendo il telefono in modalità flash.

Nota 1: L'immagine logo.bmp corrisponde all'immagine visualizzata nelle prime fasi di avvio del telefono ed è archiviata in new\0.
Nota 2: Verificare che gli elementi elencati in RAMInit, USBLoad, XLDR, IPL siano corretti ed esistano nel path indicato new\4. In caso contrario si potrebbe brickare irrimediabilmente il telefono.

1) Tali file svolgono le funzionalità base dell'apparato, gestiscono le modalità di flash e di inizializzazione, e la prima fase di avvio dello stesso.
2) Attenzione: la directory src verrà svuotata, quindi procedere con un backup del contenuto se lo si ritiene necessario.
3) legitDos.bin, essendo vuoto, possiamo ignorarlo.
4) Vale lo stesso discorso per il backup visto in nota precedentemente.
5) Il valore dovrebbe essere indifferente, avendo disabilitato nelle opzioni la verifica dell'hw version.