Nie masz produktów w koszyku.
Układ pamięci urządzeń mobilnych
2017-08-29 11:57:35
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{} |
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 |
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 |
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.
Musisz być zalogowany aby dodać komentarz.
kliknij tutaj zalogować się