Autor Wątek: Flash Partitioning  (Przeczytany 7565 razy)

Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Flash Partitioning
« dnia: Wtorek, 03 Luty 2009, 18:33 »
Rysunek poglądowy w załączniku
cholernie przydatnym toolem jest nbinfo z imgfstools

Wskazówki wstępne
Jedna linijka = jedna partycja (oprócz końcówki 2 ostatnie hexów, ale one raz raczej nie interesują)
Błędy w partycjonowaniu nie koniecznie oznaczają brak bootowania, po prostu obraz może się źle składać/rozkładać przez imgfstools (nieraz wystarczy pokombinować właśnie tymi toolsami troszkę i nasze babole zostaną załatane)
1 Block(track?) = block size z MSFLSH (zazwyczaj 0x20000 dla urządzeń ze zmiennym i 0x10000 dla urządzeń ze stałym storage)
1 Sector = tyle bajtów, ile ustawiliśmy przy zrzucaniu

How to remove uldr
// Wskazówka techniczna dla urządzeń ze skompresowanym XIPem, można wrzucić nieskompresowany w jego miejsce, o ile mieści się fizycznie w obszarze dla niego wyznaczonym
Robimy z 3 linijek dwie, na początek opcja z łączeniem partycji uldr i xip
Nowa Partycja powinna wyglądać tak
Cytuj
File System:    0x23 (XIP RAM)
 Start Sector:   taki jaki był pierwotnie w uldr
 Total Sectors:  suma total sectors uldr i xip
 Boot indicator: zazwyczaj 0x00
 First Head:     taki jaki był w uldr
 First Sector:   taki jaki był w uldr
 First Track:    taki jaki był w uldr (czyli 0x00 prawie zawsze)
 Last Head:      taki jaki był gdziekolwiek, zazwyczaj jest taki sam wszędzie
 Last Sector:    taki jaki był w xip
 Last Track:     taki jaki był w xip
Rzecz jasna po tej operacji xip wklejamy na początek uldr

Budujemy nowy, świeżutki os.nb
1. Zbieramy informacje.
Zakładam najgorszą opcję, dysponujecie tylko dumpem z pdocread ;)
-na wstępie odrzucamy dump uldr
-zapisujemy sobie listę partycji np tak pdocread -l >listing.txt
-jak w takim razie policzyć block size? to jest tak zwane "dobre pytanie". W krótkiego rozpoznania (czyli przejrzenia romów na dysku) wynika, że urządzenia ze stałym storage mają block size równy 0x10000 bajtów. Urządzenia ze zmiennym storage z kolei posiadają block size równy 0x20000 bajtów. Obliczamy sobie jeszcze sectors per block
-rozmiar boot, msflash to odpowiednio rozmiar jednego sektora.
2. Składamy boot
No to skoro mamy podstawowe informacje to czas zacząć ;)
- obcinamy xip z ewentualnych "FF" na końcu. Ustawiamy tak rozmiar partycji z nim, aby dodając rozmiar boot i msflash był podzielny przez block size. Zapisujemy info w boot jako pierwszą partycję
  • filesystem 0x23
  • start address 0x02
  • total sectors (to co nam wyjdzie z ustawionego rozmiaru dzieląc przez sectors per block)
  • Boot indicator 0x00
  • First Head 0x02
  • First Sector 0x01
  • First Track 0x00
  • Last Head (sector size -1)
  • Last Sector 0x01
  • Last Track (liczba block'ów, czyli to co wychodzi z dzielenia rozmiaru xipa przez block size -1)
- drugi etap, umieszczamy imgfs na swoim miejscu, polecam dump'nąć na chwilę i zaciągnąć z powrotem do pliku. Dopełniamy FF, aby był podzielny przez block size.
zczytujemy rozmiar i dopełniamy "FF", tak aby całość była podzielna przez sector size.
  • filesystem 0x25
  • start address (ilość sektorów poprzedniej partycji + start address poprzedniej partycji)
  • total sectors (to co nam wyjdzie z ustawionego rozmiaru dzieląc przez sectors per block)
  • Boot indicator 0x00
  • First Head 0x00
  • First Sector (last sector poprzedniej partycji)
  • First Track (last track poprzedniej partycji+1)
  • Last Head (sector size -1)
  • Last Sector (zagwozdka, czytaj niżej)
  • Last Track (liczba block'ów, czyli to co wychodzi z dzielenia rozmiaru imgfs przez block size -> ponieważ zazwyczaj wychodzi ponad miejsce na wpisanie, trzeba zostawić poprawną końcówkę np z 0x205 to będzie 04, a resztę czyli 200 dzielimy przez 0x40 i wstawiamy jako pierwszy bajt Last Sector, drugim bajtem last sector jest zawsze 0x1! (o ile trzymamy się tej instrukcji i dostępnych tooli))
- ostatni krok, dla posiadaczy pda z partycją FAT na tym samym obszarze co rom.
Musimy policzyć ile zostało nam wolnych sektorów i bloków biorąc pod uwagę pojemność odczytaną z nuestorage managera.
czyli obliczamy total sectors dostępne - zużyte i wpisujemy
  • filesystem 0x04
  • start address (ilość sektorów poprzedniej partycji + start address poprzedniej partycji)
  • total sectors (to co nam wyjdzie z total sectors dostępne - zużyte)
  • Boot indicator 0x00
  • First Head 0x00
  • First Sector (last sector poprzedniej partycji)
  • First Track (last track poprzedniej partycji+1)
  • Last Head (sector size -1)
  • Last Sector (liczba nadmiarowych sektorów powstałych podczas dzielenia (total sectors dostępne - zużyte) przez sectors per block)
  • Last Track (liczba block'ów, czyli to co wychodzi z dzielenia (total sectors dostępne - zużyte) sectors per block -1, z zastrzeżeniem takim jak w adnotacji do imgfs)
3. Składamy MSFLSH50
Rozmiar dla pocketów ze stałym storage to 0x38 bajtów, ze zmiennym 0x54, resztę dopełniamy "FF"
Więc
  • Leci sygnaturka 4D 53 46 4C 53 48 35 30
  • pusty dword
  • dword z rozmiarem msflash
  • numer wpisu (tutaj 0, liczone od 0)
  • 2 puste dword
  • liczba bloków RAW FS (czyli uldr + xip)
  • sectors per block (dword)
  • bytes per block (dword)
  • unknown (dword 0)
  • numer wpisu (tutaj 1, liczone od 0)
  • 2 puste dword
  • liczba bloków imgfs
  • Sectors per block(dword)
  • Bytes per block(dword)
  • unknown (dword 2 dla urządzeń ze zmiennym storage, 0 dla urządzeń ze stałym storage)(poniższe parametry tylko dla urządzeń ze zmiennym storage, reszta kończy robotę)
  • numer wpisu (tutaj 2, liczone od 0)
  • 2 puste dword
  • liczba bloków partycji FAT, ważne dla stabilności!
  • Sectors per block
  • Bytes per block
  • unknown (dword 2 dla urządzeń ze zmiennym storage)
4. Dla urządzeń ze zmiennym storage trzeba jeszcze ustawić parametry nbmerge, czyli zazwyczaj data = Bytes per sector i extra= 0x8 (zazwyczaj!)
//Bo jest za dużo "zazwyczaj", nie mam możliwości pobawić się każdym urządzeniem, więc poradnik jest na tą chwilę niedopracowany. Liczę na to, że pobawicie się trochę i zdacie relację, co jeszcze dopisać
« Ostatnia zmiana: Poniedziałek, 04 Maj 2009, 21:01 wysłana przez globalbus »

nokser

  • Gość
Odp: Flash Partitioning
« Odpowiedź #1 dnia: Wtorek, 03 Luty 2009, 19:30 »
jak dla mnie bomba, przyda się w moich eksperymentach POzdrawiam :peace:


Offline Mietas

  • Core
  • *****
  • Podziękowań: 53
  • Nokia Lumia 520, MDA Compact IV
Odp: Flash Partitioning
« Odpowiedź #2 dnia: Wtorek, 03 Luty 2009, 20:39 »
Mnie również się przyda.

Jak rozumiem, tym narzędziem (mam na myśli nbinfo) można sprawdzić poprawność partycji w obrazie? Jeśli tak, to tym bardziej dla mnie się przyda...
Lumia 520, WP8 8.0.10211.250, oryginał Plus
MDA Compact IV, MLR 6.1


Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Odp: Flash Partitioning
« Odpowiedź #3 dnia: Wtorek, 03 Luty 2009, 20:50 »
powiedzmy tak, powiedzmy nie (czasem trzeba popatrzeć, czy np wartość last track 99 jest logiczna, zazwyczaj nie jest). Celem końcowym będzie możliwość uzyskania kompletnego obrazu nb z czystego dumpa

Offline utak3r

  • Global Moderator
  • Core
  • *****
  • Podziękowań: 140
  • Samsung Note 4
Odp: Flash Partitioning
« Odpowiedź #4 dnia: Środa, 04 Luty 2009, 01:26 »
Zaglądałeś do narzędzi itsme? Poszukam jeszcze też Ci pliku nagłówkowego z PB... chyba, że masz. Mnóstwo fajnego info, stąd brałem info do wątku o budowie os.nb (oczywiście niedokończonego jak zwykle).


nokser

  • Gość
Odp: Flash Partitioning
« Odpowiedź #5 dnia: Środa, 04 Luty 2009, 08:05 »
Cytuj
Mnóstwo fajnego info, stąd brałem info do wątku o budowie os.nb (oczywiście niedokończonego jak zwykle).
_Jak dla mnie i tak jest wypas .......

Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Odp: Flash Partitioning
« Odpowiedź #6 dnia: Piątek, 06 Luty 2009, 20:49 »
romldr.h? Mam
Podobnie jak resztę źródeł, które wrzuciła cmonex

uwaga techniczna, partycjonowanie track, sector, head jest potrzebne chyba tylko do tooli, bo jak widzę czasem widzę bootsectory romów to się dziwię dlaczego to wstaje. Najważniejszy jest start sector i total sectors.



dodano: Środa, 04 Luty 2009, 16:29
ważne info!
wersja nbinfo ma znaczenie, różnice są spore, warto korzystać z obu na raz

nokser

  • Gość
Odp: Flash Partitioning
« Odpowiedź #7 dnia: Sobota, 07 Luty 2009, 00:34 »
Wielkie dziki na pewno się przyda, zwłaszcza w mojej kolekcji TOOLS :peace:

Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Odp: Flash Partitioning
« Odpowiedź #8 dnia: Sobota, 07 Luty 2009, 21:49 »
dopisałem "trochę"

//będą jeszcze drobne poprawki ofc.
« Ostatnia zmiana: Niedziela, 08 Luty 2009, 11:38 wysłana przez globalbus »

Offline Ham3r

  • GZU
  • Core
  • ****
  • Podziękowań: 50
Odp: Flash Partitioning
« Odpowiedź #9 dnia: Poniedziałek, 30 Marzec 2009, 17:37 »
za chiny nie mogę wywalić tego ULDR  ::)


Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Odp: Flash Partitioning
« Odpowiedź #10 dnia: Poniedziałek, 30 Marzec 2009, 17:57 »
grunt, żeby LBA się zgadzało, na block, head, track nawet jak są błędy to mi o dziwo działa.
no i MSFlash trzeba dopasowywać (często to dependuje użyty adres)

nokser

  • Gość
Odp: Flash Partitioning
« Odpowiedź #11 dnia: Poniedziałek, 30 Marzec 2009, 18:33 »
Wystartuje z tym ale na nowym OS dla i600 - może być miło ;)


Offline globalbus

  • GZU
  • Core
  • ****
  • Podziękowań: 77
  • N900 + Zest
Odp: Flash Partitioning
« Odpowiedź #12 dnia: Poniedziałek, 30 Marzec 2009, 18:48 »
btw, na samsungach jest pewna pułapka, w obrazie rom nie ma storage region, ale są markery nadal.

nokser

  • Gość
Odp: Flash Partitioning
« Odpowiedź #13 dnia: Poniedziałek, 30 Marzec 2009, 19:01 »
Będę się odzywał w czasie modyfikacji, a dzięki za info ;)

Offline utak3r

  • Global Moderator
  • Core
  • *****
  • Podziękowań: 140
  • Samsung Note 4
Odp: Flash Partitioning
« Odpowiedź #14 dnia: Poniedziałek, 30 Marzec 2009, 19:09 »
możesz zajrzeć też tutaj, ostatnio trochę dodałem tekstu... przyda Ci się podczas tej operacji :)