[ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Modifiche a hardware, software e accessori dei chinafonini

[ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi AlexIT il 26/09/2012, 1:15

Premetto che sono nuovo del forum, e che spero di postare nell'area corretta ...
e anche che la cosa interessi a qualcuno! :D
Da quasi tre settimane sono in possesso del V1277, che piu' lo conosco piu' mi entusiasma.
La prima cosa che ho fatto è metterci su una SDCARD da 32GB e modificare il vold.fstab per
scambiare sdcard con sdcard2 ... ma mi dava un po' fastidio vedere sprecato lo spazio della
partizione chiamata "fat", che veniva vista adesso come sdcard2 ma che veniva snobbata da
tutte le app !
E invece la partizione "usrdata" era soltanto di 834MB !!! :D

Perciò mi sono guardato un po' i file del firmare e ho cercato le corrispondenze tra quello
che veniva fuori con un "fdisk" dalla shell di adb, dalla tabella della EMMC in /proc, e i file
presenti nel pacchetto del firmware originale.


Il file "scatter.txt" originale è questo:
{L_CODE}: {L_SELECT_ALL_CODE}
PRELOADER             0x0 {}
DSP_BL            0x40000 {}
MBR              0x600000 {}
EBR1             0x604000 {}
__NODL_PMT       0x608000 {}
__NODL_NVRAM     0xa08000 {}
__NODL_SECCFG    0xf08000 {}
UBOOT            0xf28000 {}
BOOTIMG          0xf88000 {}
RECOVERY        0x1588000 {}
SEC_RO          0x1b88000 {}
__NODL_MISC     0x2188000 {}
LOGO            0x21e8000 {}
__NODL_EXPDB    0x24e8000 {}
ANDROID         0x26e8000 {}
CACHE          0x1b6e8000 {}
USRDATA        0x346e8000 {}
FAT            0x689e8000 {}
__NODL_BMTPOOL 0xFFFF00a8 {}


Leggiamo adesso la tabella delle partizioni direttamente dal nostro V1277, tramite
{L_CODE}: {L_SELECT_ALL_CODE}
adb shell "cat /proc/emmc"

che a me ha restituito questo:
{L_CODE}: {L_SELECT_ALL_CODE}
partno:    start_sect   nr_sects  partition_name
emmc_p1: 00000020 00000002 "ebr1"
emmc_p2: 0000ac40 00002800 "sec_ro"
emmc_p3: 00010740 000c7800 "android"
emmc_p4: 000d8740 000c7800 "cache"
emmc_p5: 001a0740 001a1000 "usrdata"
emmc_p6: 00341f40 003f99c0 "fat"


E cerchiamo conferma dei dati anche con l'fdisk
{L_CODE}: {L_SELECT_ALL_CODE}
adb shell "fdisk /dev/block/mmcblk0 -lu"

che a me ha restituito questo:
{L_CODE}: {L_SELECT_ALL_CODE}
Warning: ignoring extra data in partition table 5

Disk /dev/block/mmcblk0: 3883 MB, 3883008000 bytes
1 heads, 16 sectors/track, 474000 cylinders, total 7584000 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks  Id System
/dev/block/mmcblk0p1              32          30  2147483647+  5 Extended
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2           44096       54335        5120  83 Linux
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3           67392      884543      408576  83 Linux
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4          886592     1703743      408576  83 Linux
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5         1705792     3413823      854016  83 Linux

... che a parte gli avvisi inutili da quasi le stesse info del comando precedente,
ma in decimale!
Ma manca la "p6" che viene considerata errata ... e in effetti lo è, ma di proposito
(e tra poco lo vedremo)

Prendiamo adesso in considerazione i file MBR e EBR1 che abbiamo nel pacchetto del
firmware originale.
I file MBR e EBR1 sono standard MasterBootRecord (MBR appunto), che è lo stesso
usato dal DOS e dai sistemi operativi in genere (esiste anche il GPT, ma è un'altra storia,
e qui non serve).
I primi 446 byte sarebbero destinati ad un programma di avvio (che qui non c'è quindi
e' tutto a 00) e gli altri 128 byte sono destnati alla descrizione di quattro partizioni
principali.
L'unità di misura nelle tabelle descrittive MBR è il settore, che in genere è di 512 byte
(anche nel nostro caso).

Vediamo cosa contengono
{L_CODE}: {L_SELECT_ALL_CODE}
#MBR
00000000  .. ..
00000010  .. ..
.. .. ..
000001B0  .. ..
000001c0  00 00 05 00 00 00 20 00  00 00 ff ff ff ff 00 00
000001d0  00 00 83 00 00 00 40 ac  00 00 00 28 00 00 00 00
000001e0  00 00 83 00 00 00 40 07  01 00 00 78 0c 00 00 00
000001f0  00 00 83 00 00 00 40 87  0d 00 00 78 0c 00 55 aa


{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1
00000000  .. ..
00000010  .. ..
.. .. ..
000001B0  .. ..
000001c0  00 00 83 00 00 00 20 07  1a 00 00 10 1a 00 00 00
000001d0  00 00 83 00 00 00 20 1f  34 00 df e0 cb ff 00 00
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa


Ora vediamo cosa significano questi numeri (che sono in esadecimale, ma
lo avevate già notato, vero? :D).
La notazione è little-endian (cioè per indicare 0x12345678 si scrive "78 56 34 12")

{L_CODE}: {L_SELECT_ALL_CODE}
#MBR 1c0-1cf
__ __ 05 __ __ __ 20 00 00 00 ff ff ff ff __ __

ovvero, tipo 05 da 0x20 , lunghezza -1
Il tipo 05 è la PartizioneEstesa, ovvero la EBR, che in pratica è un secondo blocco MBR in cui definire altre 4 partizioni (la lunghezza qui è fissa, per questo è -1)
è la nostra "ebr1"

{L_CODE}: {L_SELECT_ALL_CODE}
#MBR 1d0-1df
__ __ 83 __ __ __ 40 ac 00 00 00 28 00 00 __ __

ovvero, tipo 83 da 0xac40 , lunghezza 0x2800 (0x2800=10240settori *512=5242880 byte /1024/1024=5MB)
Il tipo 83 è una partzione di tipo linux (diciamo EXT4 per semplicita')
è la nostra "sec_ro"

{L_CODE}: {L_SELECT_ALL_CODE}
#MBR 1e0-1ef
__ __ 83 __ __ __ 40 07 01 00 00 78 0c 00 __ __

ovvero, tipo 83 da 0x10740 , lunghezza 0xc7800 (=817152 *512=418381824 =399MB)
è la nostra "android"

{L_CODE}: {L_SELECT_ALL_CODE}
#MBR 1f0-1ff
__ __ 83 __ __ __ 40 87 0d 00 00 78 0c 00 __ __

ovvero, tipo 83 da 0xd8740 , lunghezza 0xc7800 (=399MB)
è la nostra "cache"

continuamo quindi con EBR1 per le altre partizioni
ma consideriamo che EBR1 parte dal settore 0x20, e gli offset descritti qui dentro
sono relativi alla sua posizione (cioè bisogna sommare 0x20!)

{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1 1c0-1cf
__ __ 83 __ __ __ 20 07 1a 00 00 10 1a 00 __ __

ovvero, tipo 83 da 0x1a0720+0x20=0x1a0740 , lunghezza 0x1a1000 (=1708032 *512 =834MB)
è la nostra "usrdata"

{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1 1d0-1df
__ __ 83 __ __ __ 20 1f 34 00 df e0 cb ff __ __

ovvero, tipo 83 da 0x341f20+0x20=0x341f40 , lunghezza 0xffcbe0df (in realtà sarebbe 0x3f99c0=2035MB)
è la nostra "fat"
la lunghezza è formalmente errata, ma ha un suo perchè
0x341f20 + 0xffcbe0df = 0xffffffff
in pratica vuol dire fino alla fine ...
probabilmente in questo modo si gestiscono automaticamente le flash di varie dimensioni 4GB 8GB 16GB.

le altre 2 partizioni sono a 00, ovvero non assegnate
{in effetti sarebbe utile mappare la partizione "misc", che è comunque allocata e risparmieremmo
altro spazio, e la definizione in MBR sarebbe di questo tipo

{L_CODE}: {L_SELECT_ALL_CODE}
__ __ 83 __ __ __ 40 dc 00 00 00 28 00 00 __ __

e bisognerebbe spostare la partizione "android" in EBR1 , e fare alcune piccole modifiche al boot.img
ma anche questa è un'altra storia! :D }


La corrispondenza con la tabella delle partizioni letta dal V1277 è abbastanza evidente.
Vediamo ora il file "scatter.txt", che serve soltanto al SP-FlashTool e
contiene soltanto degli offset iniziali
Rispetto al file scatter bisogna partire dall'offset di MBR, quindi nel nostro
caso dobbiamo sommare un 0x600000.
Inoltre l'unità base non è il settore ma il byte, quindi bisogna moltiplicare
per 512 , ovvero per 0x200 ...

{L_CODE}: {L_SELECT_ALL_CODE}
ebr1         0x20 =>     0x4000+0x600000 =   0x604000
sec_ro     0xac40 =>  0x1588000+0x600000 =  0x1b88000
android   0x10740 =>  0x20e8000+0x600000 =  0x26e8000
cache     0xd8740 => 0x1b0e8000+0x600000 = 0x1b6e8000
usrdata  0x1a0740 => 0x340e8000+0x600000 = 0x346e8000
fat      0x341f40 => 0x683e8000+0x600000 = 0x689e8000


Adesso anche la corrispondenza con lo scatter.txt è abbastanza evidente.

Ora che conosciamo tutto (si fa per dire) quello che riguarda le partizioni della
nostra EMMC, siamo anche in grado di modificarle.
Le prime partizioni per ora le lasciamo in pace (ma se proprio volessimo ...)
Supponiamo adesso di voler allargare la partizione "usrdata" a 2754MB (e di
conseguenza stringere la partizione "fat" a 115MB).
{Potremmo anche azzerare la partizione "fat" ma personalmente la uso per
conservarci le installazione delle apk e altra roba, e so che non viene
toccata da un evantuale azzeramento di usrdata , o ripristino da recovery}


Facciamo il calcolo inverso ...

2754MB = 2754*1024*1024 = 2887778304 byte /512 = 5640192settori = 0x561000
quindi
{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1 1c0-1cf
__ __ 83 __ __ __ 20 07 1a 00 00 10 56 00 __ __
                              ^^^^^^^^^^^


in pratica stiamo portato la dimensione di "usrdata" da 0x1a1000 a 0x561000,
cioè abbiamo l'abbiamo aumentata di 0x561000-0x1a1000=0x3c0000 settori,
e abbiamo lasciata invariata la posizione iniziale.
Per pareggiare i conti non ci resta che spostare avanti l'inizio di "fat"
dello stesso numero di settori (quindi 0x341f20+0x3c0000=0x701f20) e diminuirne
di conseguenza la dimensione (quindi 0xffcbe0df-0x3c0000=0xff8fe0DF)
quindi
{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1 1d0-1df
__ __ 83 __ __ __ 20 1f 70 00 df e0 8f ff __ __
                  ^^^^^^^^^^^ ^^^^^^^^^^^


Quindi il nostro EBR1 dovrà essere modificato così ...

{L_CODE}: {L_SELECT_ALL_CODE}
#EBR1
000001c0  00 00 83 00 00 00 20 07  1a 00 00 10 56 00 00 00
000001d0  00 00 83 00 00 00 20 1f  70 00 df e0 8f ff 00 00
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa


Ma per poter flashare abbiamo bisogno anche di uno "scatter.txt" equivalente.
Fino a "usrdata" non abbiamo spostato niente ... quindi calcoliamo da li in poi

{L_CODE}: {L_SELECT_ALL_CODE}
usrdata  0x1a0740 => 0x340e8000+0x600000 = 0x346e8000
fat      0x701f40 => 0xe03e8000+0x600000 = 0xe09e8000


l'offset di "usrdata", visto che non l'abbiamo spostata, ma soltanto allargata è
rimasto invariato, invece è cambiato in avanti l'offset di "fat", quindi dovremo
modificare soltanto il rigo riguardante "fat" con

{L_CODE}: {L_SELECT_ALL_CODE}
FAT            0xe09e8000 {}


Il nuovo "scatter.txt" completo è quindi diventato questo

{L_CODE}: {L_SELECT_ALL_CODE}
PRELOADER             0x0 {}
DSP_BL            0x40000 {}
MBR              0x600000 {}
EBR1             0x604000 {}
__NODL_PMT       0x608000 {}
__NODL_NVRAM     0xa08000 {}
__NODL_SECCFG    0xf08000 {}
UBOOT            0xf28000 {}
BOOTIMG          0xf88000 {}
RECOVERY        0x1588000 {}
SEC_RO          0x1b88000 {}
__NODL_MISC     0x2188000 {}
LOGO            0x21e8000 {}
__NODL_EXPDB    0x24e8000 {}
ANDROID         0x26e8000 {}
CACHE          0x1b6e8000 {}
USRDATA        0x346e8000 {}
FAT            0x689e8000 {}
__NODL_BMTPOOL 0xFFFF00a8 {}


... spero di essere stato abbastanza chiaro per tutti ...
ma vi assicuro che è stato più facile a farlo che descriverlo!!! :D
___
AlexIT @ Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS4.0 GPS WIFI
! IO ODIO I P.M. ! CHI INSISTE FINISCE IN IGNORE-LIST !
SE AVETE BISOGNO DI AIUTO PER PROBLEMI O MODDING
E AVVISATEMI TRAMITE UN P.M. DI INVITO, MASSIMO UNA RIGA
Avatar utente
AlexIT
chinafanatico
 
Messaggi: 667
Iscritto il: 12/09/2012, 20:08
Chinafonini posseduti: Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS GPS WIFI

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi nihil il 26/09/2012, 9:58

Ottimo e grande spiegazione.
Ora provo con il mio x26i ma già sò che ci sono alcune differenze.
1 non ha la partizione ""EMMC""
infatti il comando shel cat proc/emmc non và
ora dovrò cercare la soluzione.
Comunque grazie molto e ben utile.
nihil
chinadepto
 
Messaggi: 161
Iscritto il: 11/08/2009, 11:22
Chinafonini posseduti: N2-Tv; Cect A6; Star A3; Star X26I; Star B943M

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi AlexIT il 26/09/2012, 10:45

Se non è una EMMC dovrebbe essere una NAND ... e quindi

cat /proc/mtd

il resto dovrebbe essere simile, cioè la teoria alla base è sempre la stessa, cambia la device su cui si trovano i dati, ma ai fini del reflash non cambia, i files sono sempre MBR EBR1 e lo scatter.txt
Avatar utente
AlexIT
chinafanatico
 
Messaggi: 667
Iscritto il: 12/09/2012, 20:08
Chinafonini posseduti: Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS GPS WIFI

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi Zbear il 26/09/2012, 12:14

OTTIMO!! :applausi: :applausi: :applausi:

Erano proprio le informazioni che cercavo per fare il partizionamento 2.5 Gb per il Tinji.

Grazie per avermi evitato le solite ore in giro per forum di Android :evvai: :evvai:
(vabbè .... ho capito, è linux ... ma trovare i riferimenti si fa decisamente prima :lol: :lol: )

Ciao

ZBear
RINGRAZIARE NON COSTA NULLA, MA SODDISFA CHI HA DONATO O AIUTATO.
Non rispondo ai PM, e ho poco tempo per cui mi assento anche per lunghi periodi.
Avatar utente
Zbear
chinaesperto
 
Messaggi: 1253
Iscritto il: 08/07/2012, 11:03
Chinafonini posseduti: Haipai Noble i9220 - Tinji i9300- Newman K1 - THL W200s

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi frk il 26/09/2012, 15:10

:-o

AlexIT, non ho parole, davvero un argomento utile e spiegato con pazienza, dovizia di particolari, e anche ordinato nell'impaginazione!

:applausi:

E' un onore e un piacere acquisire nuovi elementi come te su questo forum, che sta diventando davvero un punto di riferimento, non solo per i chinafonini ormai! :ehgia:
Non è l'intelligenza artificiale a farmi paura ma la stupidità naturale
Avatar utente
frk
Site Admin
 
Messaggi: 27104
Iscritto il: 10/09/2008, 12:03
Chinafonini posseduti: Prince A960, JinPeng S6186, Smart M89, A7272+, Mpie MP108

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi tappillo il 26/09/2012, 15:36

Aimè... mi son perso per strada pur avendo parziali cognizioni di ciò che hai esaudientemente spiegato...

Temo che le partizioni del mio V12-6575 resteranno come in origine...

Ma desidero comunque spendere un GRAZIE e un :applausi: per AlexIT...
tappillo
Bannato
 
Messaggi: 605
Iscritto il: 23/03/2012, 0:42
Località: Bassano del Grappa
Chinafonini posseduti: Star V 12 Mt6575

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi AlexIT il 26/09/2012, 18:45

frk {L_WROTE}::-o
E' un onore e un piacere acquisire nuovi elementi come te su questo forum, che sta diventando davvero un punto di riferimento, non solo per i chinafonini ormai! :ehgia:

Addirittura ... grazie 1000, ma così mi fai arrossire :blush: :blush: ... il fatto è che per me ogni cosa nuova è una sfida, e le sfida mi appassionano sempre!
Metti pure che sono un OpenSourceInside da quando sono nato, e quindi per me la conoscenza deve essere "alla portata di tutti" e "portata a tutti" ... il resto viene da sè! :D

ps:
Non so se interessa a qualcuno, ma ho in cantiere altri piccoli studi che potrei condividere su questo giocattolino (ma probabilmente sono generici):
- struttura e modifica del boot logo
- reodexing automatico (cioè se c'è qualcosa in dalvik-cache, viene creato il file odex della relativa apk e pulito tutto)
- porting del recovery TWRP-2.2.2.1 (quella touch)
___
AlexIT @ Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS4.0 GPS WIFI
! IO ODIO I P.M. ! CHI INSISTE FINISCE IN IGNORE-LIST !
SE AVETE BISOGNO DI AIUTO PER PROBLEMI O MODDING
E AVVISATEMI TRAMITE UN P.M. DI INVITO, MASSIMO UNA RIGA
Avatar utente
AlexIT
chinafanatico
 
Messaggi: 667
Iscritto il: 12/09/2012, 20:08
Chinafonini posseduti: Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS GPS WIFI

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi Zbear il 26/09/2012, 19:18

Io sarei anche più felice con il porting dell'ultima recovery CW, la 6 mi pare.

Visto che (probabilmente) sviluppi, hai mica trovato in giro i driver e l'sdk per il kernal ?
Non trovo NULLA.

Ciao

ZBear
RINGRAZIARE NON COSTA NULLA, MA SODDISFA CHI HA DONATO O AIUTATO.
Non rispondo ai PM, e ho poco tempo per cui mi assento anche per lunghi periodi.
Avatar utente
Zbear
chinaesperto
 
Messaggi: 1253
Iscritto il: 08/07/2012, 11:03
Chinafonini posseduti: Haipai Noble i9220 - Tinji i9300- Newman K1 - THL W200s

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi AlexIT il 26/09/2012, 19:51

Zbear {L_WROTE}:Io sarei anche più felice con il porting dell'ultima recovery CW, la 6 mi pare.

Visto che (probabilmente) sviluppi, hai mica trovato in giro i driver e l'sdk per il kernal ?
Non trovo NULLA.

Niente di niente ... ma proprio zero !!!
Ma esiste un contatto con la BiRD (che credo produca la board e il firmware id base) ?

comunque per portare la recovery CW non dovrebbero servirti i source del kernel ...
Ma cosa ha in piu' la CW ? ... mi pare che l'avevo pure messa, ma mi rompeva spostarmi con i tasti volume!
Mi pare che Paolone86 l'abbia installata
___
AlexIT @ Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS4.0 GPS WIFI
! IO ODIO I P.M. ! CHI INSISTE FINISCE IN IGNORE-LIST !
SE AVETE BISOGNO DI AIUTO PER PROBLEMI O MODDING
E AVVISATEMI TRAMITE UN P.M. DI INVITO, MASSIMO UNA RIGA
Avatar utente
AlexIT
chinafanatico
 
Messaggi: 667
Iscritto il: 12/09/2012, 20:08
Chinafonini posseduti: Star V1277 MTK6577 3G+GSM HDMI 4.3" qHD ICS GPS WIFI

Re: [ANDROID ICS] MBR + EBR1 + SCATTER = ripartizionare che passione ...

Messaggiodi Zbear il 26/09/2012, 23:26

No, quella è la 5.5 e si trova dappertutto.
E' la nuova 6 che mi piacerebbe, qui http://forum.xda-developers.com/showthr ... ?t=1855686 .
Fa il backup di TUTTA la rom, a quanto pare.

Ma non dovrebbero rilasciare il tutto in open? Tanto è lo stesso software per tutti e il resto è solo per il SOC.


Ciao

Zbear

PS: sbaglio o non hai accennato che serve busybox installato per fare tutti i lavorucci con fdisk?
Hai qualche set di comandi trapiantabile nativo di Android?
Hai fatto/trovato porting del genere??
RINGRAZIARE NON COSTA NULLA, MA SODDISFA CHI HA DONATO O AIUTATO.
Non rispondo ai PM, e ho poco tempo per cui mi assento anche per lunghi periodi.
Avatar utente
Zbear
chinaesperto
 
Messaggi: 1253
Iscritto il: 08/07/2012, 11:03
Chinafonini posseduti: Haipai Noble i9220 - Tinji i9300- Newman K1 - THL W200s

Prossimo

Torna a Laboratorio Modding

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

cron