Co to jest uklad pamieci?

1. Wstep

Cala pamiec urzadzenia przenosnego, w zaleznosci od przeznaczenia, moze byc warunkowo podzielona na kilka typów:

  • Pamiec o dostepie swobodnym (RAM);
  • Stala pamiec (ROM);
  • I przeprogramowalna pamiec tylko do odczytu (PROM).

RAM jest przeznaczony do przechowywania biezacych danych (stos) i kodów programów wykonywalnych, czyli szybko (szybko lub czesto) zmiennych danych.

ROM jest przeznaczony do przechowywania ustawien pracy procesora, mnoznik czestotliwosci generatora zegarowego, itp., czyli niezmiennych (stalych) danych.

Zdarza sie informacje, które powinny byc przechowywane w niezmienionej formie, ale przez jakis czas, z mozliwoscia jej wymiany. Dla takich danych jak nasze kontakty, zdjecia, filmy, pliki, itp., czyli wewnetrznych danych urzadzenia mobilnego, uzywany posredni rodzaj pamieci, zwany jako przeprogramowalna pamiec tylko do odczytu (PROM).

Jest tez inna, czesto uzywana pamiec - zewnetrzna. Moze byc zorganizowany na rózne sposoby, na przyklad jako karta SD lub dysk USB. Wynika z tego, nie przestaje byc PROM, czyli wykonuje funkcje tymczasowego przechowywania informacji reprogramowalnych.

Za dokladna nazwe typów nie recze, gdyz w miare rozwoju nauki i techniki pojawiaja sie nowe typy i, odpowiednio, okresla lub zmienia sie terminologia, tzn. nazwy. Tu piszemy tylko zasady dzialania i przeznaczenie tych rodzajów pamieci.

Jesli posluzyc sie analogia i rozwazyc konkretnie urzadzenie mobilne, takie jak smartfon, pamiec RAM to pamiec dla procesora. Zazwyczaj ma rozmiar 256 MB – 4 GB.

ROM my nie widzimy, ale w wielu modelach mozemy komunikowac sie z nim na przyklad z oprogramowaniem sprzetowym procesora lub kontrolerem ekranu dotykowego.

Najwiekszym typem pamieci jest PROM. W rozmiarze moze wynosic 256 MB, typowy rozmiar to 4-64 GB. Na komputerze stacjonarnym jest to pamiec, która znamy jako dysk twardy.

Uklady pamieci, opisane dalej, akurat zajmuja sie dysiemk twardym dla telefonów smart, czyli wewnetrzna pamiecia. Jest tez nazywana karta pamieci wewnetrznej.

Notka

Poniewaz kazdy rodzaj pamieci fizycznie funkcjonuje inaczej, to w tych materialach, nie dostaniesz rady rozbudowy pamieci RAM kosztem pamieci wewnetrznej (PROM).

Rada

Praktycznie wszystkie dzialania z ukladem pamieci zwiazane z utrata danych w zwiazku ze zmiana adresów logicznych ich lokalizacji. Dlatego tez zasiegnij porady: przed redystrybucja zawsze nalezy wykonac kopie zapasowa (tzw. Backup) tych partycji, które w niej uczestnicza.

2. System plików

Tak wiec, z pamiecia zalatwilismy. A jak pracowac z nia? Jak odczytac lub zapisac cokolwiek? Jesli wrzucisz ziemniaki lub rozpraszasz choinki na otwartym polu, co sie stanie? Zgadza sie, najprawdopodobniej sprosnie, ale to bez sensu. Nie mozesz zebrac wszystkich tych ziemniaków, poniewaz Trudno dotrzec do kazdego krzaka, a w takim lesie nie przejedziesz lub nie chcesz chodzic. Dlatego zarówno pole, jak i sadzenia lasu planuja, przynajmniej myszla, gdzie beda szeregi, a gdzie sciezki.

Tak i z pamiecia. Aby uzyskac dostep do dowolnego miejsca pamieci, musisz go rozdzielic. Co i pozwala system plików. Ona rysuje szeregi w pamieci (przestrzeni) i wykopuje ja (formatuje). Operacje te dziela pamiec na male kawalki (bloki) i wypelniaja je, jak zwykle, zerami. Chociaz mozna uzyc inny symbol zastepczy.

Umieszczenie tego samego typu lub zwiazanych z nimi informacji w pamieci, aby utworzyc partycje, laczac je w ciagu kilku bloków. Z sekcja juz mozna pracowac jako z jednym kawalkiem pamieci. Jesli pamieci jest bardzo duzo, to mozna pójsc dalej i polaczyc partycje w regiony, przypisujac, na przyklad, jeden region w pelne posiadanie tylko jednego uzytkownika. To rózni uzytkownicy nie beda mogli podpatrzec lub po prostu przeszkadzac sobie nawzajem (usunac, na przyklad). A zeby nie zaplatac sie, gdzie co jest, informacje o znacznikach pamieci jest zapisywane w specjalne tabele systemowe.

Wszystkie te proste rzeczy robi dla nas system plików. Nawiasem mówiac, srednia wielkosc bloku - 512 bajtów. Teraz plynnie przechodzimy do rozpatrzenia tabele alokacji partycji.

3. MBR i inne

Tak wiec system plików przydzielil przestrzen pamieci bloki o rozmiarze 512 bajtów, aby ulatwic nam komunikacje z plikami.

Aby rozróznic lokalizacje plików w pamieci, kilka bloków jest laczonych w grupy, które sa nazywane sekcjami. W systemach plików wykorzystujacych do wejscia/wyjscia BIOS, sekcje sa opisane w specjalnej tabeli, która jest uzywana podczas uruchamiania systemu operacyjnego i jest nazywana glównym rekordem rozruchu lub MBR (Master Boot Record – MBR).

Ta tabela jest przechowywana w pierwszym bloku pamieci. Historycznie zlozylo sie, ze w niej mozna zapisac tylko 4 wpisy o partycjach. W przypadku koniecznosci zwiekszenia liczby partycji, ich opis (parametry) sa umieszczone w kolejnej tabeli, zwanej rozszerzonej (Extended Boot Record - EBR), a link do niej jest umieszczony w tabeli MBR, przypisujac jej typ partycji 05-zaawansowane.

Wiecej o MBR i EBR mozna przeczytac w notatce "Co jest MBR?".

Tak moze trwac dalej, co prawda nie w nieskonczonosc. Liczba dodatkowych rozdzialów, zwanych logiczne, moze byc nie wiecej niz 63. W rezultacie mozna uzyskac nastepujacy zestaw tabel opisujacych partycji pamieci: MBR, EBR1, EBR2, EBR3,...,EBR6.

Istnieja i inne rodzaje ukladu pamieci, na przyklad, przy uzyciu GPT (GUID Partition Table). O tym czytamy w notatce " Co to jest GPT?".

Ale nie wszystkie sekcje sa opisane w plikach MBR+EBR. Sa sekcje, w których nie trzeba pobierac niczego, a dostep do nich, wrecz przeciwnie, powinien byc ograniczony. Na przyklad sekcja nvram, która jest nieulotnym zapisem ustawien samego sprzetu. Lub PMT - partycja zawierajaca kopie zapasowe znaczników pamieci. Dlatego jest inny plik zapisujacy list sekcji pamieci urzadzenia mobilnego.

Scatter-plik to jest ten plik zawierajacy liste partycji (fragmenty) pamieci. MediaTek uzywa go do wyliczenia partycji pamieciowych, które istnieja w urzadzeniu mobilnym dzialajacym na chipach MTK.

Do tej pory istnieja dwa rodzaje tych plików, rózniace sie struktura opisu partycji pamieci.

4. Scatter-plik, co to jest i „z czym to sie je”?

Scatter-plik 1-go rodzaju

Nazwijmy go pierwszej wersji, zawiera tylko informacje o tytule i poczatkowym przesunieciu partycji. Tak wyglada kazdy opis sekcji pamieci:

MBR 0x600000

{

w czym:

  • MBR - tytul sekcji, czy raczej znak;
  • 0x600000 - Poczatkowe przesuniecie sekcji w formacie 16-kowym.

Taka forma scatter-pliku jest uzywana do urzadzen na chipach МТ6577, МТ6589, МТ6589Т i wiele laczników podczas tworzenia programów dla mikrokontrolerów itp. Ale to absolutnie nie jest przystosowane do pracy z regionami.

Scatter-plik 2-go rodzaju

Nowoczesne urzadzenia mobilne maja duza ilosc pamieci wewnetrznej, co umozliwia dzielenie jej na czesci (regiony). To jest konieczne równiez z uwzglednieniem bezpieczenstwa przy odgraniczeniu dostepu w dostepie dla wielu uzytkowników.

Do tego zostal zaprojektowany scatter-plik drugiej wersji, stosowany do chipów МТ6572, МТ6582, МТ6592, MT67xx. On ma bardziej zlozony opis partycji:

partition_index: SYS1

partition_name: MBR

file_name: MBR

is_download: true

type: NORMAL_ROM

linear_start_addr: 0x0

physical_start_addr: 0x0

partition_size: 0x80000

region: EMMC_USER

storage: HW_STORAGE_EMMC

boundary_check: true

is_reserved: false

operation_type: UPDATE

reserve: 0x00

Szczególowy opis scatter-plików, zobacz w "Co jest scatter-plik?" w czapce tematu. Tylko dodam pare slów o niektóre ustawienia partycji.

Region jest ciaglym fragmentem pamieci, który moze zawierac wiecej niz jedna partycje. Regiony moga byc umieszczone w dowolnym miejscu w przestrzeni adresowej, nawet nie stykaja sie miedzy soba.

Parametr linear_start_addr opisuje liniowy adres ciaglej przestrzeni adresowej calej pamieci, a parametr physical_start_addr - adres w obrebie regionu.

Scatter-plik drugiej generacji tez jest podzielony na dwie wersje. Dla chipów typu МТ6582 uzywana jest wersja v1.1.1, a dla chipów typu МТ6592 - v1.1.2. Zewnetrznie oni nie róznia sie niczym.

Niedawno pojawila sie odmiana scatter pliku drugiego typu z dodatkowym parametrem (d-type).

Numer wersji jest uzywany przez program flasher podczas pracy z partycjami. Rzecz w tym, ze pamiec chipów МТ6582 nie jest podzielona na regiony, a jest jeden wielki region (obszar) pamieci. Dlatego flasher jako parametru uzywa opcji linear_start_addr scatter-pliku w wersji v1.1.1, który jest ciaglym wskaznikiem poczatku partycji. Czyli tam, gdzie konczy sie jeden rozdzial, zaczyna sie nastepny.

Wrecz przeciwnie, pamiec chipów МТ6592 juz podzielona jest na regiony, dlatego podczas skladania obrazu lub formatowania za poczatek sekcji flasher bierze parametr physical_start_addr.

Chociaz jest to jedyna, ale bardzo znaczaca róznica, która musi Panstwo pamietac przy recznym przydzielaniu pamieci.

Mozna zapytac, jakie recznie dzielanie? Zgadza sie, ja jestem tego samego zdania. Nastepnie przejdziemy do programu-edytora plików znaczników pamieci.

5. Edytor znaczników pamieci

Edytor zostal stworzony w celu automatyzacji pracy recznej. I tyle... Zadnego innego sposobu lub metody znaczników nie wymyslilem. Edytor wykonuje tylko to, co by robili i Panstwo, ale...rekami. To jak liczydlo oraz kalkulator, robia to samo, ale wykonane na rózne sposoby. A dla pracy kazdy uzywa tego narzedzia, które lubi.

Wiec co robi redaktor?

1. Podobnie jak Panstwo, czyta i skanuje scatter-plik z okreslonego folderu. Jesli widzi, ze sa uzywane i inne pliki znaczników, to dodatkowo czyta i ich. Przy czym konsekwentnie, tzn. jesli w pliku MBR znajduje sie rozszerzona partycja, plik jest czytany jako EBR1. I tak dalej...

2. Zbiera wszystkie przydatne informacje w jednej tabeli, która i wyswietla na ekranie w obszarze podgladu edytora. Wiekszosc informacji pochodzi z scatter-pliku. Z plików MBR+EBR bierze sie tylko typ partycji i nazwe pliku, w którym znajduje sie jego opis.

3. Po tym, jak informacja bedzie przeanalizowana, decyzja podjeta i dane z tabeli poprawione, odbywa sie tworzenie na nowo i zapisu nowych plików znaczników w innym, wybranym przez Panstwa folder. Jest to robione po to, aby zostawic stare pliki do mozliwosci wycofywania znaczników.

Wszystkie pliki znaczników sa tworzone w tej samej formie, jak i oryginalne. Czyli jesli oryginalny MBR zawieral opis 4 partycji, to koncowy bedzie zawierac te same patrycji (jesli, oczywiscie, nie byly usuniete podczas edycji). W scatter-plikг zapisza sie opisy wszystkich pozostalych po edycji partycji. Poniewaz oryginalny PMT-plik zawiera wewnetrzna baze danych partycji, to koncowy tez bedzie go zawierac, ale z nowymi ustawieniami partycji wedlug nowego scatter-pliku.

Tak wiec po przetworzeniu plików znaczników w edytorze otrzymamy te same pliki, ale z nowymi parametrami. Jesli ich wlozyc razem ze starymi obrazami partycji w urzadzenie mobilne, to dostaniemy ten sam firmware, ale zamieszczony w nowych sekcjach. Czyli zmiana ukladu przesuwa obrazy partycji na nowe adresy z nowego scatter-pliku.

Notka

Jedyna rzecza, która edytor nie robi zamiast Ciebie - to nie mysli. Ten maly obowiazek zostawilem dla uzytkownika. Dlatego, zanim zmieniac rozmiary partycji lub ich ilosc, zaplanuj swoje dzialania.

Co jest MBR i EBR?

1. Wstep

Do pracy systemu operacyjnego (OS), nalezy utworzyc tabele umieszczenia jej czesci. Ta tabela znajduje sie w rekordzie rozruchowym (Boot Record), a dokladniej w master boot record lub Master Boot Record (MBR), która fizycznie znajduje sie w pierwszym sektorze pamieci.

MBR zawiera sama tablice alokacji partycji, sygnature pliku (tzn. znak Boot Record) i moze byc jeszcze kod wykonywalny, uzywany przez niektóre OS do pobrania. Historycznie tak sie zlozylo, ze w MBR mozna umiescic tylko 4 wpisy o partycjach.Jesli wymagane jest wiecej partycji, jest uzywany dodatkowy rekord rozruchowy Extended Boot Record (EBR).W tym przypadku w MBR zamiast zapisu o jednym z rozdzialów jest umieszczony zapis o dodatkowej (extended) sekcji, zawierajacym tylko EBR.

Sam EBR ma dokladnie taka sama strukture i rozmiar, jak i MBR, i uzywac trzeba ja dokladnie tak samo.Tzn. jesli nie masz wystarczajacej liczby wpisów o partycjach i tym razem, to postepuj tak jak w przypadku MBR - twórz nastepujacy EBR-wpis! Przy tym wszystkie pliki, zawierajace EBR, powinny nazywac sie kolejno: EBR1, EBR2, itp.

2. Struktura MBR i EBR plików

Wpisy MBR i EBR maja rozmiar 512 bajtów, czyli jeden sektor fizyczny, a dlugosc ich zawierajacego pliku moze byc i wieksza. OS i tak przeczyta tylko sam wpis rozruchowy. Struktura tych wpisów jest nieco inna w zaleznosci od systemu operacyjnego. Ale dla urzadzen mobilnych maja nastepujacy wyglad:

-------------------------------------------------------------------------

Adres        Zawartosc

-------------------------------------------------------------------------

0000h        Kod bootloadera

01BEh       Cztery wpisy w tablicy partycji

01FEh       2-bajtowa sygnatura MBR lub EBR (0х55AA)

-------------------------------------------------------------------------

Oto przyklad pliku MBR:

-------------------------------------------------------------------------------------

           0    1    2    3    4    5    6    7     8    9    A    B   C    D    E   F

--------------------------------------------------------------------------------------

0000|  00  00  00  00  00  00  00  00 | 00  00  00  00  00  00  00  00

                                                          |

01B0|  00  00  00  00  00  00  00  00 | 00  00  00  00  00  00  00  00

01C0|  00  00  05  00  00  00  00  04 | 00  00  FF  FF  FF  FF  00  00

01D0|  00  00  83  00  00  00  00  68 | 00  00  00  50  00  00  00  00

01E0|  00  00  83  00  00  00  00  B8 | 00  00  00  50  00  00  00  00

01F0|  00  00  83  00  00  00  00  CC | 00  00  00  30  00  00  55  AA

--------------------------------------------------------------------------------------

Wpis dotyczacy pierwszej sekcji zajmuje adresy 1BE-1СD

  • drugiej 1CE-1DD;
  • trzeciej 1DE-1ED;
  • oraz czwartej 1EE-1FD;

a pod adresem 1FE-1FF widac, ze znajduje sie sygnatura pliku: 55 AA

Kazdy wpis w tablice partycji ma dlugosc 16 bajtów, a zawartosc zalezy od uzywanego systemu operacyjnego. Dla urzadzen mobilnych format zapisu tabeli partycji ma nastepujacy wyglad:

-----------------------------------------------------------------------------------------------------------------------------------------

Przesuniecie     Dlugosc         Opis

-----------------------------------------------------------------------------------------------------------------------------------------

00h                   4 bajty       Nie jest uzywany (zawsze 0х00)

04h                   1 bajt        Kod typu partycji

05h                   3 bajty      Nie jest uzywany (zawsze 0х00)

08h                   4 bajty      Przesuniecie partycji (w sektorach o wielkosci po 512 bajtów)

0Ch                  4 bajty      Liczba sektorów partycji (dlugosc partycji w sektorach po 512 bajtów)

------------------------------------------------------------------------------------------------------------------------------------------

Rozmiar partycji dowiedziec sie latwiej. Bierzemy wartosc w polu "Rozmiar" z zapisu o rozdziale i pomnozymy na rozmiar sektora. Na przyklad, jesli w polu znajduje sie liczba 0х00000019, wtedy mamy

0х00000019*0х200=0х00003200 (12800 bajtów)

Przesuniecie partycji okresla sie w odniesieniu do sektora alokacji samego wpisu. Jesli w polu przesuniecie sekcji jest wyswietlana wartosc 0х400, a sama tabela (MBR) znajduje sie w pamieci, poczawszy od adresu 0х00600000 (jest to wskazane, w scatter-pliku), to ta partycja zostanie fizycznie zlokalizowana w pamieci z adresu

0х00600000

   + 0х00080000    (0х400*0х200=0х00080000) - przejscie z liczby sektorów do przesuniecia w bajtach

    ------------------

      0х00680000

Kod typu partycji opisuje jego tresc. Tak, jesli sekcja nie zawiera informacji, czyli pusta, to jego kod jest ustawiony na 0х00.

Jesli wiecej niz 4 partycje w jednej tabeli MBR nie mieszcza sie, to dla dodatkowej tabeli ustawia sie kod 0х05. Kody czesto uzywanych obszarów przedstawiono w tabeli:

------------------------------------------

Kod      Typ partycji

------------------------------------------

00h      Pusty wpis (wolne miejsce)

01h      FAT-12

05h      Partycja rozszerzona

0Bh      FAT-32

----

82h      Linux swap

83h      Linux

----

EEh      GPT (GUID Partition Table)

FFh      BBT (Bad Block Table)

------------------------------------------

Przyklady pracy z MBR+EBR

Kilka praktycznych lekcji dotyczacych pracy z startowych wpisów. Pliki zawierajace tabele MBR i EBR zmiany dokonywane sa po korektach scatter-pliku. Znajac poczatkowe rozmiar i przesuniecie partycji, mozna go znalezc w tabeli BR.

Nastepnie nowe wartosci tych parametrów sa przenoszone z bajtów na sektor, dzielac je na 512 (0х200), i wpisuja sie w odpowiednie pola tabeli. Rozwazmy przyklady typowych dzialan nad MBR+EBR.

1. Uzyskanie danych o partycjach.

Dla ulatwienia odczytu danych troche je rozrobilem, dokonujac spacje miedzy parametrami partycji. Ponizej podano przykladowe pliki znaczników pamieci dla chipów МТ6589.

Na przyklad, pierwszy rozdzial, parametry którego zostaly opisane w MBR, ma nastepujacy wyglad:

-------------------------------------------------------------------------
        0   1   2   3   4   5   6   7     8   9   A   B  C   D  E  F
-------------------------------------------------------------------------
000: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00
---:                                            |
1B0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00
1C0: 00 00 05 00 00 00 00 04 | 00 00 FF FF FF FF
-------------------------------------------------------------------------

Z tabeli widac, ze typ partycji znajduje sie pod adresem 1C2, 0х05. To jest kod na partycji rozszerzonej, który mówi, ze ten wpis opisuje sekcje, zawierajace nastepujaca tabele partycji, która nazywaja rozszerzonej - Extended Boot Record (EBR).

Przesuniecie tej sekcji, dostepna pod adresem 1C6-1C9, wynosi 

0х00000400*0х200=0х00080000

od sektora rozmieszczenia w tabeli MBR. Cala sztuczka polega na tym, ze wszystkie przemieszczenia i wymiary sa zapisane w odwrotnej kolejnosciczyli najpierw sie pisze mlodszy bajt, a ostatnio pisze sie starszy bajt. Biorac pod uwage, ze MBR-sekcja ma przesuniecie 0х00600000, obecna wartosc przesuniecia partycji bedzie

0х00080000+0х00600000=0х00680000

Rozmiar partycji w tym przypadku nie warto brac pod uwage, poniewaz jest to partycja rozszerzona. A to, jak juz wiemy, rozdzial, zawierajacy tylko tabele opisu partycji, która zajmuje zaledwie 512 bajtów miejsca w pamieci.

Opis nastepnej sekcji znajduje sie pod adresem 1CE-1DD:

         0   1   2   3   4   5   6   7     8   9   A   B  C   D  E  F
-----------------------------------------------------------:
000:  00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00
1B0:                                          |
1C0:  00 00 05 00 00 00 00 04 | 00 00 FF FF FF FF 00 00
1D0:  00 00 83 00 00 00 00 68 | 00 00 00 50 00 00

Typ partycji znajduje sie pod adresem 1D2 i ma wartosc 83. To dzial, który bedzie pracowac pod Linux (a dla nas to moze byc Android, cache, Userdata).

Przesuniecie partycji znajduje sie pod adresem 1D6-1D9 i ma wartosc

0х00006800*0х200=0х00D00000

Rozmiar partycji znajduje sie pod adresem 1DA-1DD i ma wartosc

0х00005000*0х200 = 0х00A00000 (10485760 bajtów)

Tak mozna wyswietlic dowolny wpis dla kazdej sekcji. Zgodnosc pomiedzy wpisem w autonomicznej tabeli i sekcja trzeba szukac w scatter-pliku wedlug znanego przesuniecia.

2. Dokonywanie zmian w ustawieniach partycji.

Zalózmy, ze chcemy rozszerzyc partycje USRDATA do 3 GB, opis którego znajduje sie w pliku EBR1. Sekcja znajduje sie na odsunieciu 0х34F80000 i w oryginalnym stanie ma rozmiar 0х60000000 (1.5 GB). Te informacje wzialem z opisu sekcji, znajdujacego sie w pliku scatter.

Nastepna sekcja, która zostanie wykorzystana do rozszerzenia USRDATA, to FAT - ostatni rozdzial pamieci, gdzie znajduja sie wszystkie dane uzytkownika: filmy, ksiazki, zdjecia, itp.

Aby "przeniesc" przesuniecie w sektorze, w ten wyglad, w którym rejestrowane sa parametry sekcji w plikach BR, trzeba wykonac nastepujace czynnosci:

  • z przesuniecia partycji odejmujemy przesuniecie, wziete z scatter-pliku, pliku EBR1 (czyli tabeli EBR1), zawierajacej wpis o USRDATA, i otrzymamy przesuniecie partycji od poczatku tej tabeli: 0х34F80000-0х00680000=0х34900000;
  • ustawimy ta wartosc z bajtów w ilosc sektora: 0х34900000/0х200=0х001A4800
  • przeliczamy i rozmiar partycji w liczbe sektorów: 0х60000000/0х200=0х00300000;
  • biorac pod uwage odwrotna kolejnosc wpisów w plikach BR, bedziemy szukac zapisu o przesunieciu w wygladzie 00 48 1A 00, a o dlugosci sekcji 00 00 30 00.

Oto fragment z pliku EBR1, zawierajacego zapis o sekcje USRDATA:

         0  1     2     3   4   5    6   7      8   9     A   B  C   D    E  F

-----------------------------------------------------------------

000: 00 00   00   00 00 00  00 00  | 00 00   00 00 00 00   00 00

---:                                                  |

1B0: 00 00   00   00 00 00   00 00 | 00 00   00 00 00 00   00 00

1C0: 00 00   83   00 00 00   00 08 | 02 00   00 50 14 00   00 00

1D0: 00 00   83   00 00 00   00 58 | 16 00   00 F0 03 00   00 00

1E0: 00 00   83   00 00 00   00 48 | 1A 00   00 00 30 00   00 00

1F0: 00 00   05   00 00 00   00 B4 | 01 00   FF FF FF FF   55 AA 

-----------------------------------------------------------------

Nasz wpis znajduje sie w przedostatnim adresów 1DE-1ED i ma typ partycji 83, czyli jest Linux-sekcja. Obliczymy parametry sekcji. Dlugosc sekcji USRDATA musi byc

3*1024*1024*1024=3221225472.

W sekcjach to bedzie

3221225472/512=6291456

Lub w 16-kowej postaci 0х00600000. Piszemy bajty w odwrotnej kolejnosci 00 00 60 00. To i jest nasz rozmiar, który nalezy zapisac w EBR1-pliku pod adres 1EA-1ED.

Po zwiekszeniu rozmiaru tej sekcji przesunie sie poczatek nastepnego rozdzialu. Poniewaz jest to FAT (ostatni rozdzial w pamieci), jego rozmiar po prostu zmniejszy sie, poniewaz górna granica nie moze wyjsc za calkowity rozmiar pamieci.

Teraz zmienimy przesuniecie partycji FAT, poniewaz znajduje sie on w slad za USRDATA. A gdzie znalezc jego parametry?
Jesli policzyc przemieszczenia wszystkich wpisów o partycjach, znajdujacych sie w pliku EBR1, i porównamy je z scatter'em, to znajdziemy tylko zapis o Android, CACHE, USRDATA oraz EBR2.

A gdzie jest FAT? Sprawdzmy wiec, co znajduje sie w EBR2. Zrobic to jest proste jak „bulka z maslem”: przeliczymy przesuniecie partycji znajdujacych sie w EBR2, z sektorów na bajty i poszukajmy zgodnosc w scatter-pliku.

Tutaj jest podany wyciag z EBR2:

------------------------------------------------------------------------

        0   1   2   3    4  5   6   7      8   9   A   B   C  D  E   F

------------------------------------------------------------------------

000: 00 00 00 00 00 00 00 00  | 00 00 00 00 00 00 00 00

---:                                            |

1B0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1C0: 00 00 83 00 00 00 00 94 | 48 00 FF B7 B5 FF 00 00

1D0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1E0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1F0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 55 AA

------------------------------------------------------------------------

Widac, ze znajduje sie tu jeden wpis. Wiec roboty bedzie mniej. W ten sposób przesuniecie 00 94 48 00 to jest 0х00489400. Przeliczymy

0х00489400*0х200=0х91280000

plus przesuniecie samej sekcji EBR2 i otrzymamy

0х91280000+0х03D00000=0х94F80000.

Sadzac po scatter'u, to i jest partycja FAT.

Napiszemy do niego zmiany. Latwiej obliczenia prowadzic prosto w sektorach, tak mniej klopotów z przesunieciem wartosci. USRDATA rozszerzylismy na

0х00600000-0х00300000=0х00300000

sektorów, to poczatek, czyli przesuniecie FAT, tez trzeba przeniesc:

0х00489400+0х00300000=0х00789400.

Lub w odwrotnej kolejnosci 00 94 78 00.

Wynik:

W EBR1 przedostatni wpis przyjmie nastepujaca postac:

         0   1   2   3   4   5   6   7    8   9   A   B  C   D  E  F

--------------------------------------------------------

000: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

---:

1D0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00                   

1E0: 00 00 83 00 00 00 00 48 | 1A 00 00 00 60 00 00 00

1F0: 00 00 05 00 00 00 00 B4 | 01 00 FF FF FF FF 55 AA

--------------------------------------------------------

A jedyny wpis EBR2 bedzie taki:

------------------------------------------------------------------------

         0  1   2    3   4  5   6   7       8  9   A   B   C  D   E  F

------------------------------------------------------------------------

000: 00 00 00 00 00 00 00 00  | 00 00 00 00 00 00 00 00

---:                                            |

1B0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1C0: 00 00 83 00 00 00 00 94 | 78 00 FF B7 B5 FF 00 00

1D0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1E0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00

1F0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 55 AA

------------------------------------------------------------------------

P.S. Wszystkie powyzsze operacje sa swobodnie wykonywane przez redaktorów plików znaczników ScatterEditor oraz Scatter2Editor.

Co jest scatter-plik?

1. Wstep

Uklad pamieci, czyli podzial na sekcje, w urzadzeniach na zetony MTK odbywa sie za pomoca pliku, który nazywa sie "scatter file".

Jest on uzywany przez aplikacje-firwarowalne, tak zwane „Flashers” (z angielskiego "flasher") podczas skladania pelnego obrazu pamieci lub poszczególnych jej czesci, zwanych partycjami.

Struktura scatter-pliku zawiera opis wszystkich istniejacych partycji pamieci, bez wzgledu na to, co one beda zawierac w pracujacym urzadzeniu.

2. Opis pierwszej wersji scatter-pliku

Istnieja dwie wersje struktury scatter-pliku. Pierwsza jest uzywana, na przyklad, do chipów MT6577, МТ6589. A druga - do МТ6572, МТ6592.

Rozwazmy pierwsza wersje uzywana w wiekszosci urzadzen mobilnych. Pelny opis jednej sekcji pamieci jest zestawem nastepujacych typów linii:

[__NODL_]name offset [length]{}

w czym:

  • __NODL_ - "No download" znak, ze sekcja zostanie pominieta przez flashera, i do jego roboty nie jest wymagany plik firmware. Taka sekcje mozna w ogóle usunac z scatter-pliku;
  • name - nazwa sekcji (zarezerwowany zestaw znaków alfanumerycznych);
  • offset - przesuniecie partycji od poczatku pamieci do 16-kowej postaci, bajt;
  • length - dlugosc sekcji w postaci 16-kowej, bajt.

Nawiasy kwadratowe w zapisie oznaczaja opcjonalny parametr, który moze byc pominiety. Najczesciej uzywanym jest skrócony wpis w postaci:

name offset{}

Taki opis partycji pamieci zaklada, ze:

  • kazda sekcja ma dlugosc do poczatku przyszlego, bez pominiec i luk;
  • miedzy dwoma partycjami nie istnieje trzeciej (ukrytej).

Dla przykladu podam typowy scatter-plik dla МТ6589. On ma nastepujacy wyglad:

PRELOADER 0x0{}
MBR 0x600000{}
EBR1 0x680000{}
__NODL_PMT 0x700000{}
__NODL_PRO_INFO 0xb00000{}
__NODL_NVRAM 0xe00000{}
__NODL_PROTECT_F 0x1300000{}
__NODL_PROTECT_S 0x1d00000{}
__NODL_SECCFG 0x2700000{}
UBOOT 0x2720000{}
BOOTIMG 0x2780000{}
RECOVERY 0x2d80000{}
SEC_RO 0x3380000{}
__NODL_MISC 0x3980000{}
LOGO 0x3a00000{}
EBR2 0x3d00000{}
__NODL_EXPDB 0x3d80000{}
ANDROID 0x4780000{}
CACHE 0x2d180000{}
USRDATA 0x34f80000{}
__NODL_FAT 0x74f80000{}
__NODL_BMTPOOL 0xffff00a8{}

3. Opis drugiej wersji scatter-pliku

Rozwazmy strukture scatter-pliku drugiej wersji. Pelny opis kazdej sekcji pamieci jest zbiorem ciagów w postaci:

Spojler:

partition_index: SYS1

partition_name: MBR

file_name: MBR

is_download: true

type: NORMAL_ROM

linear_start_addr: 0x0

physical_start_addr: 0x0

partition_size: 0x80000

region: EMMC_USER

storage: HW_STORAGE_EMMC

boundary_check: true

is_reserved: false

operation_type: UPDATE

reserve: 0x00,

w czym:

  • partition_index - indeksowy numer sekcji, na przyklad, SYS1;
  • partition_name - nazwa sekcji, na przyklad, MBR;
  • file_name - nazwa pliku zawierajacego obraz, który ma zostac wszyty do sekcji, lub NONE, jesli obraz nie jest wymagany;
  • is_download - objaw wczytywalnosci partycji (cos w stylu __NODL_);
  • type - typ partycji. Wskazuje zawartosc sekcji. Moze przyjmowac nastepujace wartosci:
    • EXT4_IMG - sekcja zawiera czesc systemu plików EXT4;
    • NORMAL_ROM - sekcja zawiera zapisany obraz lub osobny plik;
    • SV5_BL_BIN - sekcja zawiera "surowy kod " (Raw Code) bootloadera, czyli kod wykonywalny.
  • linear_start_addr - adres poczatkowy rozmieszczenia sekcji w pliku firmware, bajt;
  • physical_start_addr - poczatkowy adres rozmieszczenia partycji w pamieci urzadzenia (adres fizyczny), bajt;
  • partition_size - rozmiar partycji, bajt;
  • region - rozmieszczenie partycji. Moze przyjmowac nastepujace wartosci:
    • EMMC_BOOT_1 - region (obszar) bootloadera. Moze byc ograniczony dostep dla uzytkownika;
    • EMMC_USER - region uzytkownika;
  • storage - HW_STORAGE_EMMC
  • boundary_check - objaw koniecznosci oznaczenia granicy rozdzialu (w wewnetrznej bazie danych lub PMT);
  • is_reserved - objaw koniecznosci tworzenia kopii zapasowych;
  • operation_type - typ operacji. Moze przyjmowac nastepujace wartosci:
    • BINREGION - obszar "surowego kodu";
    • BOOTLOADERS - bootloader;
    • INVISIBLE - niewidzialna partycja;
    • PROTECTED - chroniona partycja;
    • RESERVED - zarezerwowany;
    • UPDATE - aktualizowujaca partycja.

Przyklad pelnego scatter-pliku drugiej wersji, pokazywany w pliku "Scatter_v2.txt".

Kazdy flasher wykorzystuje scatter-plik tylko dla pelnego ukladu pamieci. Jesli „firmwarujemy” jeden lub kilka partycji, to flasher rozmieszczenia partycji bierze sie z wewnetrznej "bazy danych"- pliku PMT (Partitions Map Table). Odczytuje wartosc przesuniecia partycji (adres fizyczny) i kopiuje, czyli "firmwaruje" obraz partycji w pamieci, poczynajac od tego adresu fizycznego.

Poniewaz scatter-plik zawiera liste i adresy fizyczne wykorzystania wszystkich partycji pamieci, to zmieniajac go mozna zrobic partycjonowanie tej pamieci. Aby to zrobic, nalezy zmienic wartosci przemieszczen potrzebnych partycji.

Na przyklad, w dziale USRDATA znajduja sie dane programów uzytkownika: logi z pracy i bledów, dane na temat zapisów gier itp. Dlatego ten rozdzial czesciej od innych przepelnia sie, co prowadzi do pojawienia sie wiadomosci typu "Pamiec jest pelna".
W typowym scatter-pliku on ma przesuniecie 0x34f80000 i rozmiar:

0x74f80000-0x34f80000=0х40000000 (lub 1073741824 = 1 GB).

Zwiekszymy go, na przyklad, na 256Мб (268435456). Wtedy rozmiar partycji bedzie

1073741824+268435456=1342177280 (lub 0х50000000 w hex).

Czyli dodalismy do sekcji jeszcze 0х10000000 bajtów. Wtedy przesuniecie nastepnej sekcji przesunie sie o te sama wartosc:

bylo - 0х74f80000

stalo - 0х84f80000

Jesli zrobic tak z kolejnymi ustawieniami wszystkich kolejnych rozdzialów, to one wszystkie przesuna sie i na taka wartosc wzrosnie calkowity rozmiar pamieci, zajmowanego przez firmawere. A to jest niedopuszczalne, poniewaz calkowity rozmiar pamieci urzadzenia mobilnego jest wartosca stala. Dlatego trzeba zmniejszyc rozmiar jakiegokolwiek pózniejszego rozdzialu. W naszym przypadku jest to rozdzial uzytkownika (FAT).

Zmienic jego rozmiar nie mozemy, poniewaz znajduje sie on na samym koncu istniejacej pamieci. On po prostu automatycznie stanie skrócony.

Wydawaloby sie ze to wszystko, ale skrócic sekcje mozna do pewnego limitu (do "zera"). Dlatego, jesli przesuniecie ostatniego rozdzialu przekracza górna granice pamieci, to trzeba bedzie cofnac wszystkie zmiany lub zmniejszyc rozmiar "podwyzki" sekcji.

Bardzo wazny punkt: nie nalezy mylic pojecia "rozmiar partycji" pamieci i "rozmiar obrazu", wgrywanego do niego. One sa zwiazane tylko z tym, ze duzy obraz nie mozna wgrac w mala sekcje - on po prostu nie zmiesti sie.

Wszystkie urzadzenia mobilne przechowuja znaczniki pamieci w wewnetrznej bazie danych, która moze byc zorganizowana w rózny sposób. MediaTek dla duzej liczby swoich chipów wykorzystuje w tym celu osobna sekcje pamieci, który nazywa sie PMT (cos typu Partitions Manager Table).

Wiec co to jest PMT?

Co jest PMT?

1. Wstep

Sekcja PMT zawiera tablice alokacji partycji, mozna powiedziec, mape lub wycisk ukladu pamieci.

Ta sekcja uzywa sie przez bootloader`y oraz flesher`y, np. SP Flash Tool, do wypelnienia (firmware) obrazów partycji.Jesli flasher wykryje niezgodnosc parametrów wypelniajacej partycji z tabela rozmieszczenia partycji, zczytanej nim z rozdzialu PMT, to proces pobierania zostanie przerwany, i Panstwo otrzyma dobrze znana wiadomosc "8038".

Ale nie ma czego sie obawiac, to nie jest komunikat o bledzie, jak wielu ludzi mysli, ale wiadomosc informacyjna, ostrzezajaca o niezgodnosci parametrów partycji.

Wiec twórcy z MTK staraja sie powstrzymac przed mozliwoscia uzyskania nieaktywnego urzadzenia ("cegly"). Usunac te wiadomosc lub jakos ominac - zla droga, poniewaz wszystko zdarza i Wy (doswiadczony programista) tez mozesz popelnic blad, na przyklad, w scatter'e, i stracic wazne informacje. Inna sprawa, gdy swiadomie wykonac czynnosci dotyczace zmiany ukladu pamieci.

Do tego wlasnie potrzebne sa zmiany nie tylko w scatter, ale i obraz partycji PMT.

2. Struktura partycji PMT

Obraz partycji PMT zawiera podstawowe tablice alokacji partycji. Tuz za nia znajduje sie tabela rzeczywistego wykorzystania partycji. Kazda tabela sklada sie z:

  • sygnatury poczatku tablicy alokacji partycji. Do podstawowej tabeli to wiersz z nastepujacych znaków "1vTP". Dla prawdziwej tabeli ten wiersz ma wyglad: "1TPM";
  • najnizszej tabeli partycji zawierajacej dane parametrów kazdej sekcji;
  • sygnatury konca tabeli. Do podstawowej tabeli to wiersz z nastepujacych znaków "\х01\х03\х01\х011vTP". Dla prawdziwej tabeli ten wiersz ma wyglad: "\х01\х03\х00\х011TPM".

Oto przyklad PMT-pliku:

Rys. 1. Przyklad poczatku pliku PMT.

Na powyzszym rysunku kolorem czerwonym oznaczona jest sygnatura poczatku tablicy alokacji partycji, polozona o przesuniecie 0х0000. Poniewaz jest ona widoczna jako ciag «1vTP», to jest to poczatek tabeli podstawowej.

Rys. 2. Przyklad zakonczenia podstawowej tablicy alokacji partycji

Na Rys. 2. Przyklad zakonczenia podstawowej tablicy alokacji partycji na czerwono zaznaczona sygnatura zakonczenia podstawowej tablicy alokacji partycji, polozona o przesuniecie 0х07F8.

Widac, ze w slad za nia znajduje sie sygnatura poczatku prawdziwej tablicy alokacji partycji. Ona znajduje sie na przesuniecie 0х0800 i jest równa «1TPM».

Odpowiednio, poczatek i koniec prawdziwej tablicy alokacji partycji znajduja sie ponizej:

Rys. 3. Poczatek prawdziwej tablicy alokacji partycji.

Rys. 4. Zakonczenie prawdziwej tabeli.

3. Struktura tablicy alokacji partycji

Tablica alokacji partycji sklada sie z zapisów zawierajacych informacje o kazdym obszarze pamieci. Czyli jest w pelni opisany uklad pamieci urzadzenia mobilnego.

Wszystkie wpisy sa konsekwentnie i ciagle, scisle znajdujac jeden za jedenym:

Rys. 5. Sekwencyjny uklad rekordów.

Na Rys. 5. Konsekwentna lokalizacja zapisów, dla jasnosci, wszystkie partycje sa oznaczone róznymi kolorami: niebieski - __NODL_EXPDB, zielony - ANDROID, czerwony - CACHE, zólty - USRDATA.

Koniec kazdej tabeli oznaczony "pustym" zapisem, czyli zapisem zawierajacym kod 0х00 we wszystkich polach. Na Rys. 2. Przyklad zakonczenia podstawowej tablicy alokacji partycji i Rys. 4.

W zakonczeniu prawdziwej tabeli widac, ze po opisie sekcji __NODL_BMTPOOL i przed podpisem zakonczenia tabeli bazowej znajduje sie obszar, wypelniony kodem 0х00, czyli "pusty" wpis.

4. Struktura zapisów tablicy alokacji partycji.

Struktura zapisu dla wiekszosci urzadzen mobilnych, czyli dla wszystkich 32-bitowych i 64-bitowych, które posiadaja pamiec NAND, skladaja sie z 4 pól i maja nastepujaca postac:

Tabela 1. Struktura zapisów tablicy alokacji partycji

Przesuniecie

Dlugosc pola, bajtów

Wartosc

0х0000

64 (0х40)

Nazwa partycji

0х0040

 8 (0х08)

Dlugosc partycji

0х0048

 8 (0х08)

Przesuniecie partycji

0х0050

 8 (0х08)

Flagi partycji

Na Rys. 2-4 wszystkie pola zapisu ustawien partycji sa wyróznione róznymi kolorami:

  • na niebiesko – nazwa partycji;
  • na zielono – dlugosc partycji;
  • kolorem zóltym – przesuniecie partycji;
  • kolorem czarnym wyrózniona rezerwa.

Rozwój techniki przyniósl zmiany w strukturze zapisu o partycjach. Dla 64-bitowych urzadzen z pamiecia typu eMMC bylo dodano piate pole - nazwa regionu:

-------------------------------------------------------------------------------------------------------------------------

Nazwa        Przesuniecie   Bajt        Dlugosc pola                  Wartosc

------------------------------------------------------------------------------------------------------------------------

Name            0х0000        64              (0х40)                        Nazwa partycji

Size               0х0040         8               (0х08)                        Dlugosc partycji

Part_id          0х0048          8              (0х08)                         Nazwa regionu

Offset            0х0050          8              (0х08)                         Poczatek partycji

mask_flag     0х0058          8              (0х08)                         Flagi

------------------------------------------------------------------------------------------------------------------------

5. Rozmieszczenie partycji PMT

Dla mlodszych urzadzen linii MT65 ** w ramach PMT przydzielono osobna sekcje pamieci, który mozna bylo swobodnie wszycz, czyli zmienic jego zawartosc. Naleza do nich, na przyklad, urzadzenia na podstawie МТ6572, МТ6589. Partycja PMT zostala opisany w scatter'e, co pozwalilo wprowadzac zmiany w uklad, zmieniajac równiez pliki znaczników i zawartosc PMT.

Opis struktury GPT

1. Wstep

GPT to inny format tablicy alokacji partycji pamieci typu GUID (GUID Partition Table). Jest on czescia EFI (Extensible Firmware Interface) - normy, uzywanego zamiast BIOS do pobrania partycji pamieci.

Przejscie na inny format tabeli partycji pozwolil wyeliminowac najbardziej powazna wade starego formatu (MBR) - liczba partycji. Jesli w MBR miescilo sie tylko 4 wpisy z ograniczeniem dlugosci patrycji i jego przesuniecie z powodu tego, ze parametry te zostaly udokumentowane 32-bitowymi liczbami, to w GPT mozna umiescic 128 wpisów o partycjach. Przy czym ich parametry juz opisano 64-bitowymi liczbami.

2. Struktura GPT

GPT sklada sie z MBR, naglówka i najnizszej tabeli partycji.

Dla kompatybilnosci ze starym standardem ladowania (BIOS) i w celu ochrony najnizszej tablicy partycji GPT tez zaczyna sie z MBR, która opisuje tylko jeden rozdzial. Ta "ochronna" MBR znajduje sie w pierwszym sektorze pamieci pod adresem 0-0х1FF (512 bajtów).

Przesuniecie wskazuje na poczatek naglówka tabeli partycji GPT, a rozmiar partycji jest ustawiany na dlugosci calej pamieci urzadzenia. Bardziej szczególowo opisze to dalej. Typ partycji ma znaczenie 0хEF (GPT-sekcja).

Odrazu za MBR, czyli z adresu 0х200, znajduje sie naglówek GPT, tez ma dlugosc 1 sektor (512 bajtów). On ma nastepujaca strukture:

--------------------------------------------------------------------------------
Przesuniecie  Dlugosc    Wartosc
--------------------------------------------------------------------------------
00  0x00        8 bytes    sygnatura (ciag znaków "EFI PART" - 45h 46h 49h 20h 50h 41h 52h 54h)
08  0x08        4 bytes    wersja (dla GPT wersji 1.0 (through at least UEFI wersji 2.3.1), powinno byc 00h 00h 01h 00h)
12  0x0C        4 bytes    rozmiar naglówka w bajtach (little endian, zwykle 5Ch 00h 00h 00h, co oznacza 92 bajty)
16  0x10        4 bytes    CRC32 naglóweka (od 0+ dlugosc naglówka bajtów). Przy obliczaniu CRC32 w pole wnosi sie 0
20  0x14        4 bytes    rezerwa; musi byc 0
24  0x18        8 bytes    biezacy LBA sektor (umieszczenie poczatkowej kopii naglówka)
32  0x20        8 bytes    biezacy LBA sektor (umieszczenie kopii zapasowej naglówka)
40  0x28        8 bytes    pierwszy dozwolony do uzycia LBA sektor (czyli ostatni LBA sektor tablicy partycji GUID+1)
48  0x30        8 bytes    ostatni LBA- sektor, dozwolony do stosowania (czyli pierwszy LBA sektor kopii tablicy partycji GUID-1)
56  0x38       16 bytes    GUID dysku (pamieci)
72  0x48        8 bytes    pierwszy LBA sektor tabeli wpisów o partycjach (zawsze 2 w poczatkowej kopii tytulu)
80  0x50        4 bytes    liczba zapisów o partycjach
84  0x54        4 bytes    rozmiar jednego wpisu o sekcji w bajtach (zwykle 128)
88  0x58        4 bytes    CRC32 tabele wpisów o partycjach
92  0x5C        *             rezerwa; 0 do konca bloku (420 bajtów dla sektorów rozmiarem w 512 bajt lub wiecej, jesli sektor ma inny rozmiar)
--------------------------------------------------------------------------------

Bezposrednio za naglówkiem, poczawszy od adresu 0х400, umieszczona sama tabela partycji. Kazdy wpis w rozmiarze 128 bajtów ma nastepujaca strukture:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Przesuniecie   Dlugosc      Wartosc
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0  0x00          16 bitów     GUID typu partycji. Okresla system plików, uzywany do przechowywania danych w tym temacie.
16  0x10        16 bitów     GUID rozdzialu. Jest unikalnym identyfikatorem rozdzialu, dlatego jest tworzony za kazdym razem, kiedy tworzy sie rozdzial.
32  0x20         8 bitów      pierwszy LBA sektor rozmieszczenia partycji (little endian)
40  0x24         8 bitów      ostatni LBA sektor rozmieszczenia partycji (inclusive, usually odd)
48  0x30         8 bitów      atrybuty partycji (flagi)
56  0x38        72 bitów     wiersz z nazwy partycji (36 znaków w kodowaniu UTF-16LE)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Kazdy system plików otrzymuje swój identyfikator GUID, jednoznacznie jego identyfikujacy. Standard UEFI okresla nastepujace typów partycji GUID.