Posseggo un cinafonino Ciphone C6A da ormai quasi un anno.
Ho acquistato questo telefono più che altro per avere la possibilità di incominciare a 'cucina' su WM senza dover per forza spendere un capitale in hardware...
Inutile dire che mi sono scontrato, nei mesi scorsi, con la mancanza di informazioni cronica che gravita intorno a questo genere di cellulari, e anche un po' con la maleducazione di alcuni utenti sul forum 'ufficiale' di questo telefono... (tendo a rispettare le scelte di coloro i quali, pur avendo scoperto qualcosa non voglia condividerlo... rispetto un po' meno chi interagisce con gli altri con insulti et similia...).
Ciononostante ho spulciato, cercato, provato... fino a quando non sono riuscito ad ottenere dei risultati accettabili.
Oramai da alcuni mesi riesco a cucinare ROM stabili per questo telefonino (Non ho modo di provarlo... ma credo che grossomodo il medesimo procedimento si possa applicare a quasi tutti i telefonini basati su processore Hisilicon K3), e visto che, certamente quanto letto su questo forum è stato fonte di grande ispirazione nei miei esperimenti, ho deciso di pubblicare qui, in primo luogo i risultati ottenuti...
Non è molto... ma spero che possa servire come base di partenza per altri, e possa ripagare un minimo le informazioni che ho ricavato da questi lidi :D
Tutorial
Questo primo tutorial mostra come fare a cucinare una ROM per Ciphone C6A usando la mia cucina (JCooker, scaricabile qui: JCooker v1.0.0) e, come ingrediente principale, una qualsiasi ROM funzionante per il medesimo telefonino.
Cucinare una ROM a partire da una ROM esistente.
Step 0: preliminari
Posizionarsi all'interno della directory della cucina.

Lanciare il batch 0_cleansrc.bat per ripulire la directory src (Attenzione: la directory src verrà svuotata, quindi procedere con un backup del contenuto se lo si ritiene necessario).
- 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
Dietro le quinte di 1_dump.bat
Questo script, prima di tutto, crea quattro sottodirectory in src, chiamate rispettivamente 1, 2, 3 e 4. Queste sottodirectory vengono utilizzate per raccogliere il risultato dei singoli passi di spacchettamento della ROM sorgente.
Nella directory 1 ci sarà il risultato del comando viva.exe ciphone.bin:
- {L_CODE}: {L_SELECT_ALL_CODE}
viva.exe ciphone.bin
-----------------------------------------------------------------------
¦·¦·VIVA ROM 'BIN 2 NB0'¦ñ¥¯ V1.5 -> http://www.592cx.com
-----------------------------------------------------------------------
NB0+-+¦ú¦ RAMInit.nb0 ¦ß+í¦+¦ª
NB0+-+¦ú¦ USBLoad.nb0 ¦ß+í¦+¦ª
NB0+-+¦ú¦ XLDR.nb0 ¦ß+í¦+¦ª
NB0+-+¦ú¦ IPL.nb0 ¦ß+í¦+¦ª
NB0+-+¦ú¦ FLASH.nb0 ¦ß+í¦+¦ª
Durante questo passaggio la ROM viene scomposta nelle sue componenti: RAMInit.nb0, USBLoad.nb0, XLDR.nb0, IPL.nb0 e FLASH.nb0.
Il nostro ingrediente principale per cucinare la ROM sarà FLASH.nb0. Lasceremo pertanto le altre componenti da parte sino a quando non sarà il momento di riassemblare il tutto.
Lo script quindi va ad eseguire il comando osnbtool -sp flash.nb0:
- {L_CODE}: {L_SELECT_ALL_CODE}
osnbtool -sp flash.nb0
OS ROM Partition Tool V1.59 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000008
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
flash.nb0.PRE written.
-------------------------------------------------
Sector counters (extra-data) found in source file.
Partition 0 true offset:00000002 true size:0000027E Len:0000027E
Partition 1 true offset:00000280 true size:000006C0 Len:000006C0
Partition 2 true offset:00000940 true size:0000BD00 Len:0000BD00
Partition 3 true offset:00000000 true size:00000000 Len:00012DC0
flash.nb0.OS.NB written.
Il risultato, consistente nei due file flash.nb0.PRE e flash.nb0.OS.NB viene salvato all'interno della directory 2.
Il passo successivo (sempre eseguito da 1_dump.bat) consiste nell'estrarre le 4 partizioni: boot.bin, xip.bin, imgfs.bin e legitDos.bin contenute in flash.nb0.OS.NB.
- {L_CODE}: {L_SELECT_ALL_CODE}
osnbtool -d flash.nb0.os.nb 0 boot.bin
OS ROM Partition Tool V1.59 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Signature: SRPX
CompressVersion: 5
Uncompressed size: 300000
Deompress processing...
Successfully decompressed to boot.bin
- {L_CODE}: {L_SELECT_ALL_CODE}
osnbtool -d flash.nb0.os.nb 1 xip.bin
OS ROM Partition Tool V1.59 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Can not find compression signature.
Part-1 de-packing...
Successfully de-packed to xip.bin
- {L_CODE}: {L_SELECT_ALL_CODE}
osnbtool -d flash.nb0.os.nb 2 imgfs.bin
OS ROM Partition Tool V1.59 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
Can not find compression signature.
Part-2 de-packing...
Successfully de-packed to imgfs.bin
- {L_CODE}: {L_SELECT_ALL_CODE}
osnbtool -d flash.nb0.os.nb 3 legitDos.bin
OS ROM Partition Tool V1.59 By Weisun :> PDAclan.com
Sector size : 0x00000800
Extra data bytes : 0x00000000
OS IMAGE found.
Partitions infomation:
**************************************
Part-0 type: BOOT SECTION image
Part-1 type: XIP RAM Image
Part-2 type: IMGFS file system
Part-3 type: legit DOS partition
**************************************
ERROR - Part-3 size is wrong!
Il risultato di queste operazioni trova posto nella directory 3.
L'ultima passo di estrazione (dump) della ROM consiste nello scompattare imgfs.bin e xip.bin e nel ricostruire i pacchetti originari.
Per imgfs.bin si procederà dunque così (In teoria si dovrebbe poter usare xidump -b per ricostruire la struttura dei pacchetti anche per imgfs… ma su alcune rom xidump divide erroneamente i pacchetti tra OEM e SYS e quindi prediligo utilizzare packagebuilder per la ripacchettizzazione (In teoria si dovrebbe poter usare xidump -b per ricostruire la struttura dei pacchetti anche per imgfs… ma su alcune rom xidump divide erroneamente i pacchetti tra OEM e SYS e quindi prediligo utilizzare packagebuilder per la ripacchettizzazione):
- {L_CODE}: {L_SELECT_ALL_CODE}
xidump imgfs.bin
XIDUMP v1.0 Beta Copyright (c) 2009-2010 bepe Oct 27 2009 00:17:17
Inizializing RAW Data layer
Found IMGFS Partition...
.hst
.ROM
.VM
01cfec30-34b0-4ab8-9c07-89c16b720030.dsm
........
........
........
........
ZipView.exe
zlib.dll
Done!
- {L_CODE}: {L_SELECT_ALL_CODE}
packagebuilder.exe IMGFS
PACKAGEBUILDER 3 Copyright (c) 2007-2008 bepe Apr 23 2008 22:12:21
[Versions]
SYS: 5.2.23500 5500
SYS: 5.2.23515 5500
........
........
........
........
[Missing Manifests]
723fb954-d931-4348-b672-82a188e587b5.dsm
cb60b333-da30-aaba-ecca-33a4568f566f.dsm
Done!
Analogamente per xip.bin:
- {L_CODE}: {L_SELECT_ALL_CODE}
xidump -b xip.bin
XIDUMP v1.0 Beta Copyright (c) 2009-2010 bepe Oct 27 2009 00:17:17
Inizializing RAW Data layer
Found XIP Partition...
busenum.dll
cachefilt.dll
cecompr.dll
........
........
........
........
sysroots.p7b
OS:
16512.5 (Build: 5500) MSXIPKernel
Done!
Step 2: BuildOs
Lanciare lo script 2_cleanbuildOS.bat per ripulire la directory BuildOS (Vale lo stesso discorso per il backup visto precedentemente).
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.

Dietro le quinte di 3a_buildos_from_dump.bat
Il batch provvede innanzitutto a popolare le directory necessarie a BuildOs:
Copia src\4\IMGFS\OEM —> BuildOs\OEM
Copia src\4\IMGFS\SYS —> BuildOs\SYS
Copia src\4\XIP\MSXIPKernel\boot_ms.rgu —> BuildOs\ROM\XIP\
Copia src\4\XIP\OEMXIPKERNEL\boot.rgu —> BuildOs\ROM\XIP\
Genera le voci di registro necessarie, esportandole dai default.hv e user.hv della ROM sorgente, e le converte in UTF-16
- {L_CODE}: {L_SELECT_ALL_CODE}
rgucomp.exe -o default.hv > default.txt
rgucomp.exe -o user.hv > user.txt
iconv.exe -t UTF-16LE default.txt > default.ucs-2le
iconv.exe -t UTF-16LE user.txt > user.ucs-2le
copia Tools\rguheader.UCS-2LE + default.ucs-2le + user.ucs-2le ---> 034e7cf6-8a37-40ad-85bd-6851b921866a.rgu
A questo punto viene avviato BuildOS.exe che provvederà a creare la struttura del filesystem e ad aggiungere le chiavi contenute nei file *.rgu dentro i file default.hv e user.hv prelevati da SYS/Metadata/. Il risultato delle operazioni di BuildOS viene salvato dentro la directory BuildOS/temp
Step 3: ExtReloc
Solite operazioni di pulizia del piano di lavoro:
4_cleanextreloc.bat
5_cleannew.bat
Lanciare 6a_extrelocandbuildxipfrombin.bat
Se non si ha intenzione di modificare moduli in imgfs o nello XIP, si possono saltare i sottopassi successivi di rilocazione dei moduli. In tal caso chiudere le finiestre di xipport e extreloc quando si presentano e copiare direttamente il file xip.bin da src\3 in new\1 (creare la directory new\1 nel caso non esistesse) e procedere con -- Step 4: build imgfs --
- {L_CODE}: {L_SELECT_ALL_CODE}
**********************
* [xipport] Dump xip *
* [xipport] Close *
**********************
All'apertura della finestra di XIPPort premere dump xip.bin e poi chiudere tranquillamente XIPPort (Avremmo potuto utilizzare il dump di XIP ottenuto precedentemente, tuttavia il formato prodotto da XIPPort è più conforme a quello che ExtReloc si aspetta di ricevere in ingresso, e quindi è meno laborioso procedere con il redump di xip.bin).

Il file xip.bin sarà quindi scompattato nella cartella ExtReloc\OUT.
Dopo aver chiuso XIPPort sarà automaticamente lanciato ExtReloc. Seguire scrupolosamente i passi indicati a video:
- {L_CODE}: {L_SELECT_ALL_CODE}
********************************************************
* [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 xipport and extreloc *
********************************************************
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 (Questo passo credo non serva a nulla… ma nel dubbio lo lascio…)

In Extreloc:
- Trascinare la linea bianca verticale verso il bordo sinistro 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.0 (Il valore dovrebbe essere indifferente, avendo disabilitato nelle opzioni la verifica dell'hw version).
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 [I]src\4. In caso contrario si potrebbe brickare irrimediabilmente il telefono.[/I]
Personalizzare la ROM
Eseguendo i passi soprastanti, è possibile scomporre, e successivamente riassemblare una ROM pre-esistente. L'operazione di per se è abbastanza sterile, e acquista senso soltanto quando il cuoco è intenzionato ad apportare delle modifiche alla ROM originale per personalizzarla secondo le proprie esigenze.
A tal fine è possibile intervenire modificando il filesystem nel passo 2:
- Dopo il lancio di 3a_buildos_from_dump.bat e prima di premere la freccia verde per quanto riguarda le modifiche a pacchetti contenuti in BuildOS\OEM, BuildOS\ROM e BuildOs\SYS.
- Al termine delle operazioni di BuildOs andando ad operare direttamente nella directory BuildOs\temp
Postfazione
Questo è quanto...
Questa guida è stata adattata al formato di questo forum basandomi su quanto da me originariamente scritto qui: Cucinare una ROM a partire da una ROM esistente.
Nello scrivere questa guida ho cercato di rispettare il regolamento. In particolare non ero (non sono) sicuro di poter includere i link alle pagine del mio wiki sul quale ho scritto originariamente la guida (e che uso come riferimento e appunti), o il link alla pagina della cucina stessa. Nel caso avessi infranto qualche regola, prego gli amministratori di farmelo sapere, ed li autorizzo ad apportare le correzioni che ritengono necessarie, posto che lo spirito della guida rimanga immutato.
Grazie...