vin2809

Разметка памяти мобильных устройств

В этой теме 40 сообщений

разметка.jpg

 

В этой теме хочу предложить теоретические материалы по разметке памяти мобильных устройств, инструкции по практике разметки и несколько моих программ, которые могут помочь простому пользователю. Я хочу сразу объяснить, что не придумал никакого НОВОГО метода разметки, т.к. его просто НЕ существует, а просто предлагаю Вам пересесть, так сказать, со счет на "калькулятор".

Теория

Практические рекомендации

Программы

Для чипов МТК МТ6577, МТ6589, МТ6589Т

 

Для чипов МТК МТ6572, МТ6582, МТ6592, МТ8127

Отредактировал psihipofigist
добавил баннер
11 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итак, начнем от печки...

Что такое разметка памяти?

1.Введение

Спойлер

 

Всю память мобильного устройства в зависимости от назначения, можно условно разделить на несколько видов:

  • оперативная память (ОЗУ);
  • постоянная память (ПЗУ);
  • и перепрограммируемая постоянная память (ППЗУ).

ОЗУ предназначено для хранения текущих данных (стек) и кода выполняемых программ, т.е. оперативно (быстро или часто) ИЗМЕНЯЕМЫХ данных.

ПЗУ предназначено для хранения настроек работы процессора, множителя частоты тактового генератора и т.д., т.е. неизменяемых (постоянных) данных.

Бывает информация, которая должна храниться в неизменном виде, но некоторое время, с возможностью ее замены. Для таких данных как наши контакты, картинки, фильмы, файлы и т.п., т.е. внутренних данных мобильного устройства, используется промежуточный вид памяти, называемый перепрограммируемым ПЗУ (ППЗУ).

Есть еще одна память, которая часто используется - внешняя. Она может быть организована по-разному, например, в виде SD-карты или USB-накопителя. От этого она не перестает быть ППЗУ, т.к. выполняет функции временного хранения перепрограммируемой информации.

За точное название видов я не ручаюсь, т.к. по мере развития науки и техники появляются новые виды и, соответственно, уточняется или меняется терминология, т.е. названия. Я здесь описываю лишь принцип работы и назначение этих видов памяти.

Если провести аналогию и рассмотреть конкретно мобильное устройство, например, смартфон, то ОЗУ это память для процессора. Как правило, она имеет размер 256Мб - 4Гб.

ПЗУ мы с Вами не видим, но на многих моделях можем с ним общаться, например, при прошивке процессора или контроллера тач-скрина.

Самый большой по объему вид памяти это ППЗУ. По размеру он может быть от 256Мб, типовой размер 4-64Гб. У настольного компьютера этот вид памяти мы знаем как винчестер.

Разметка памяти, описываемая далее, как раз и занимается винчестером для смартов, т.е. ВНУТРЕННЕЙ памятью. Ее еще называют внутренней картой памяти.


ПРИМЕЧАНИЕ.
Т.к. каждый вид памяти физически устроен по разному, то в приведенных материалах, Вы не получите совет по расширению ОЗУ за счет внутренней памяти (ППЗУ).

 


СОВЕТ.
Практически все действия с разметкой памяти связаны с потерей данных в связи с изменением ЛОГИЧЕСКИХ адресов их размещения. Поэтому примите совет: перед переразметкой ВСЕГДА производите резервное копирование (т.н. Backup) тех разделов, которые в ней участвуют.

 

 

 

2.Файловая система

Спойлер

 

Итак, с памятью разобрались. А как работать с нею? Как прочитать или записать что-нибудь? Если в чистом поле набросать картошки или навтыкать елочек, что получится? Правильно, прорасти то, скорее всего, прорастет, но толку не будет. Такую картошку всю не соберешь, т.к. будет трудно добраться до каждого куста, а в таком лесу не пройдешь или не захочешь гулять. Поэтому как поле, так и посадки леса ПЛАНИРУЮТ, ну, хотя бы прикидывают, где будут ряды, а где тропинки.

Так и с памятью. Чтобы получить доступ к ЛЮБОЙ точке памяти надо ее РАЗМЕТИТЬ. Что и делает файловая система. Она рисует ряды в памяти (размечает ее) и вскапывает (форматирует). Эти операции разделяют память на небольшие кусочки (блоки) и заполняют их, как правило, нулями. Хотя можно использовать и другой символ-заполнитель.

Для размещения однотипной или родственной информации в памяти создают разделы, объединяя в них несколько блоков. С разделом уже можно работать как с единым куском памяти. Если памяти очень много, то можно пойти дальше и объединить разделы в регионы, назначив, например, один регион в полноправное владение ТОЛЬКО одного пользователя. Тогда разные пользователи не смогут подсмотреть или просто помешать  друг другу (стереть, например). А чтобы не запутаться, где что находится, информация по разметке памяти сохраняется в специальные системные таблицы.

Все эти простые вещи делает для нас файловая система. Кстати, стандартный размер блока - 512 байт. Теперь плавно переходим к рассмотрению таблиц размещения разделов.


 

3.MBR и прочее

Спойлер

 

Итак, файловая система разметила пространство памяти на блоки размером 512 байт, чтобы облегчить нам процесс общения с файлами.

Для разграничения размещения файлов в памяти несколько блоков объединяются в группы, которые называются разделами. В файловых системах, использующих для ввода/вывода BIOS, разделы описываются в специальной таблице, которая используется при загрузке операционной системы и называется главной загрузочной записью или MBR (Master Boot Record - MBR)(Л.5).

Эта таблица сохраняется в первом блоке памяти. Исторически сложилось, что в нее можно записать только 4 записи о разделах. При необходимости увеличения числа разделов их описание (параметры) размещают в следующей таблице, называемой расширенной (Extended Boot Record - EBR)(Л.7), а ссылку на нее размещают в таблице MBR, присваивая ей тип раздела 05-расширенный.

Подробнее про MBR и EBR можно прочитать в заметке "Что такое MBR?"(Л.6).

Так может продолжаться и дальше, правда, не до бесконечности. Число дополнительных разделов, называемых логическими, может быть не более 63. В результате можно получить следующий набор таблиц описания разделов памяти: MBR, EBR1, EBR2, EBR3,...,EBR6.

Есть и другие виды разметки памяти, например, при помощи GPT (GUID Partition Table)(Л.8). Про это читаем в заметке "Что такое GPT?"(Л.9).

Но не все разделы описываются в файлах MBR+EBR. Есть разделы, в которые ничего загружать не надо, и доступ к ним, наоборот, должен быть ограничен. Например, раздел nvram, являющийся энергонезависимым хранилищем настроек самого железа. Или PMT - раздел, хранящий резервную копию разметки памяти. Поэтому существует еще один файл, хранящий ПЕРЕЧЕНЬ разделов памяти мобильного устройства.

Scatter-файл это и есть тот файл, содержащий перечень разделов (фрагментов) памяти. Фирма MediaTek использует его для перечисления разделов памяти, существующей в мобильном устройстве, работающем на чипах МТК.

На сегодняшний день существует две разновидности этих файлов, отличающихся структурой описания разделов памяти.


 

4.Scatter-файл, что это такое и с чем его едят

Спойлер

 

Scatter-файл 1-й разновидности

Назовем его первой версией, содержит информацию только о названии и начальном смещении раздела. Вот как выглядит описание каждого раздела памяти:


MBR 0x600000
{
} 

, где

  • MBR - название раздела, точнее метка;
  • 0x600000 - начальное смещение раздела в 16-ричном формате.

Такая форма scatter-файла используется для устройств на чипах МТ6577, МТ6589, МТ6589Т и многими компоновщиками при создании программ под микроконтроллеры, например, (Л.4). Но он абсолютно не приспособлен к работе с регионами.

Scatter-файл 2-й разновидности

Современные мобильные устройства имеют большой объем внутренней памяти, позволяющий делить ее на части (регионы). Это необходимо делать и в целях безопасности при разграничении доступа при многопользовательском доступе.

Для этого был разработан scatter-файл второй версии, использующийся для чипов МТ6572, МТ6582, МТ6592, MT67xx. Он имеет более сложное описание разделов:


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

Подробное описание scatter-файлов смотрите в "Что такое scatter-файл?" шапки темы. Только добавлю пару слов про некоторые параметры разделов.

Регион - это непрерывный участок памяти, который может содержать и не один раздел. Регионы могут быть расположены в любой точке адресного пространства, даже не соприкасаясь друг с другом.

Параметр linear_start_addr описывает линейный адрес непрерывного адресного пространства всей памяти, а параметр physical_start_addr - адрес в пределах РЕГИОНА.

Scatter-файл второй версии тоже подразделяется на две версии. Для чипов типа МТ6582 используется версия v1.1.1, а для чипов типа МТ6592 - v1.1.2. Внешне они ничем не отличаются.

Недавно появилась разновидность scatter-файла второго типа с дополнительным параметром (d-type). Его назначение мне пока неизвестно.

Номер версии используется программой флешер при работе с разделами.

Дело в том, что память чипов МТ6582 не подразделяется на регионы, а представляет собой один сплошной регион (участок) памяти. Поэтому флешер в качестве параметра использует параметр linear_start_addr scatter-файла версии v1.1.1, который является непрерывным указателем начала разделов. Т.е. там, где кончается один раздел, начинается следующий.

Напротив, память чипов МТ6592 уже делится на регионы, поэтому при прошивке образа или форматировании за начало раздела флешер берет параметр physical_start_addr.

Пока это единственное, но очень существенное отличие, про которое нужно помнить при ручной переразметке памяти.

Какая еще ручная разметка, спросите Вы. Правильно, и я того же мнения. Тогда перейдем к программе-редактору файлов разметки памяти.


 

5.Редактор разметки памяти

Спойлер

 

Редактор был создан для АВТОМАТИЗАЦИИ ручного труда. И все... Никакого ДРУГОГО способа или метода разметки я не придумывал. Редактор выполняет только, то, что и Вы бы делали, но...ручками. Это как счеты и калькулятор, делают одно и тоже, но выполнены по-разному. А для работы каждый использует то средство, какое ему по душе.

Итак, что же делает редактор.

1.Как и Вы читает и просматривает scatter-файл из указанной папки. Если видит, что используются и другие файлы разметки, то дополнительно читает и их. Причем последовательно, т.е. если в файле MBR обнаруживается расширенный раздел, то читается файл EBR1. И так далее.

2.Собирает ВСЮ полезную информацию в одну таблицу, которую и выводит на экран в область просмотра редактора. Большая часть информации берется из scatter-файла. Из файлов MBR+EBR берется только тип раздела и название файла, в котором находится его описание.

3.После того, как Вы, проанализировав информацию, принимаете решение и откорректируете данные таблицы, производится создание заново и запись НОВЫХ файлов разметки в ДРУГУЮ, выбранную Вами папку. Это делается для того, чтобы оставить старые файлы для возможности отката разметки.

Все файлы разметки создаются в том же виде, как и исходные. Т.е. если исходный MBR содержал описание 4 разделов, то конечный будет содержать те же разделы (если Вы их, конечно, не удалили при редактировании). В scatter-файл запишутся описания всех оставшихся после редактирования разделов. Т.к. исходный PMT-файл содержит внутреннюю базу данных разделов, то конечный тоже будет ее содержать, но с НОВЫМИ параметрами разделов согласно НОВОМУ scatter-файлу.

Таким образом, после обработки файлов разметки редактором Вы получите такие же файлы, но с новыми параметрами. Если их залить вместе со старыми образами разделов в мобильное устройство, то Вы получите ту же прошивку, но размещенную в новых разделах. Т.е. изменение разметки ПЕРЕМЕЩАЕТ образы разделов на новые адреса из НОВОГО scatter-файла.


Примечание: Единственное, что не делает редактор за Вас, так это НЕ ДУМАЕТ. Эту маленькую обязанность я оставил за пользователем. Поэтому, прежде чем изменять размеры разделов или их количество, продумайте свои действия.


 

6.Литература

1.Файловая система. http://en.wikipedia.org/wiki/File_system

2.Список файловых систем. http://en.wikipedia.or…i/List_of_file_systems

3.Алексей Федорчук. Введение в POSIX'ивизм, © 2005. Глава 9. Физика файловых систем. http://www.linuxcenter…s/posixbook/ch09.phtml

4.ARM Compiler toolchain v5.02 for µVision Using the Linker. http://www.keil.com/support/man/docs/armlink/

5.Extended boot record. https://en.wikipedia.org/wiki/Extended_boot_record

6.Extended boot record. https://en.wikipedia.org/wiki/Extended_boot_record

7.GUID Partition Table. https://en.wikipedia.org/wiki/GUID_Partition_Table

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А теперь легкое отступление от теории:

Программа-редактор Scatter2Editor_v2.06 файлов разметки для чипов МТ6572, МТ6582, МТ6592, МТ8127

Требования:

  • ОС Windows 7 + .NET 4.0;

Позволяет:

  • разобрать файлы разметки (MBR+EBR+scatter) для анализа;
  • редактировать размеры разделов, соответственно и их смещения. Редактировать можно в 10-ой с/с или в 16-ричной. После изменений производится автоматический пересчет всех разделов;
  • удалить любой отдел полностью;
  • сохранить измененные файлы разметки;
  • точно установить верхнюю границу памяти. ;
  • переключать язык интерфейса "на ходу" без перезагрузки.

 

Установка размера памяти может производиться 3 способами:

  •         вручную;
  •         по данным scatter-файла;
  •         фиксированно по заданным значениям;

При этом размер памяти привязан к размеру блока, значение которого можно изменить. Размер памяти можно установить:

  • при фиксированном способе от 0,5Гб до 128Гб;
  • при ручном вводе от 4Мб до 128Гб.

 

Архив с программой можно скачать из первого поста. Внутри сам редактор и языковый пакет в отдельной папке. Устанавливать все вместе в любую папку.

 

Для пользователей МТ6572: предупреждаю, что редактор НЕ ДЕЛАЕТ разрыва между разделами, поэтому может не работать шифрование. Или читаем "К вопросу о шифровании".
5 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Редактор файлов разметки ScatterEditor_v1.06 для чипов МТ6577, МТ6589, МТ6589Т
 
Требования:

  • Windows 7 + .NET 4.0

Выполняет следующие операции:

  • читает scatter, MBR+EBR,PMT;
  • редактирует scatter;
  • сохраняет scatter, MBR+EBR,PMT;
  • можно читать отдельно только scatter;
  • можно сохранить только скаттер;
  • можно читать отдельно PMT;
  • можно сохранить только PMT. При этом формируется и скаттер.

Версия ScatterEditor_v1.06 является наиболее полной по функциональным возможностям. Она позволяет выполнять следующие действия:

  • редактировать размер разделов, ввод данных можно производить как в 10, так и в 16 с/с;
  • удалять разделы полностью;
  • восстанавливать PMT-файл по имеющемуся scatter-файлу;
  • восстанавливать scatter-файл по имеющемуся PMT-файлу;
  • устанавливать размер памяти 3 способами:
    • по данным scatter-файла;
    • вручную, вводя требуемый размер памяти в блоках;
    • фиксированно, как и ранее выбирая из выпадающего списка значение;
  • имеет мультиязычный интерфейс с автоматическим определением языка.

Сам редактор можно взять в первом посте в виде архива. Там ж есть подробная инструкция пользователя в виде .pdf

Отредактировал vin2809
5 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переразметка памяти устройств на базе чипов от MTK

Рекомендация №1.
Перед началом манипуляций с телефоном, советую сделать Дамп важных разделов устройства функцией Read Back программы SP FlashTool!
Вот по этой ссылке есть неплохая инструкция. Как слить бэкап через SP FlashTool
Рекомендация №2.
Не делайте слишком длинные пути к файлам, с которыми будете работать, а имена папок задавайте латинскими буквами.
Как обычно делаю я.
В корне любого диска создаю папку с названием телефона и в нее добавляю соотв. папки с необходимыми утилитами.
1.1.png
1.2.png
Например, в корне диска D расположена папка ZP990 (от названия телефона Zopo Zp990), в которой расположены все необходимые утилиты в соответствующих папках:
• в папке MtkDroidTools будет находиться программа MtkDroidTools;
• в папку ROM я копирую файлы прошивки, которые буду прошивать, используя SpFlashTool;
• в папке ScatterEditor находится редактор разметки памяти чипов MT65ХХ;
• в папке SpFlashTool находится программа SpFlashTool.
Рекомендация №3.
Не изменяйте смещения и размеры разделов памяти устройства, назначение которых Вы не знаете!
1.3.png
На собственном опыте мною было установлено, что:
• для разделов, отмеченных красным цветом, лучше не менять ни смещение, ни размер!
• для разделов, отмеченных желтым цветом, лучше не менять размер!
• для разделов, отмеченных зеленым цветом, можно менять и смещение, и размер!

Приведу несколько примеров переводов чисел из одной системы счисления в другую с использованием стандартного калькулятора Windows.


1. Запускаем калькулятор и выбираем в меню Вид строку Программист
2.1.png2.2.png
2. Примеры расчетов.
Пример №1 – Перевод 12 Мб из 10 с/с в 16 с/с
Устанавливаем на калькуляторе режим работы с десятичными числами, отметив поле «Dec».
Для перевода в 16 с/с необходимо сначала число 12Мб записать в байтах.
Т.к. каждый Мегабайт (Мб) содержит 1024 Килобайта (Кб), а каждый Килобайт содержит по 1024 байта, то набираем на калькуляторе 12 и умножаем его на 1024, получившийся результат опять умножаем на 1024 – в итоге получаем 12582912 это и есть 12Мб в байтах.

12Мб*1024=12288Кб*1024=12582912 байт


2.3.png
Затем переходим из 10 с/с в 16 с/с, выделив поле «Hex», и сразу же получаем на табло калькулятора искомое число в 16-ричной с/с: C00000
2.4.png
Пример №2 – Перевод 5 Гб из 10 с/с в 16 с/с
Для перевода в 16 с/с необходимо сначала перевести 5Гб в байты:
Калькулятор опять переводим в 10 режим работы, набираем 5 и умножаем его на 1024, получившийся результат умножаем на 1024, и опять получившийся результат умножаем на 1024 – в итоге получаем 5368709120 это и есть число 5Гб в байтах.

5Гб*1024=5120Мб*1024=5242880Кб*1024=5368709120 байт


2.5.png
Затем переходим из 10 с/с в 16 с/с, отметив пункт «Hex» в поле выбора систем счисления – получаем на табло калькулятора искомое число 140000000
2.6.png
Пример №3 – Перевод числа A00000 из 16 с/с в 10 с/с.
Для перевода из 16 с/с в 10 с/с необходимо сначала на калькуляторе отметить поле «Hex», т.е. перевести его в 16 режим работы, и затем набрать интересующее число, например, A00000.

10485760 / 1024 = 10240Кб10485760 / 1024 / 1024 = 10Мб.


2.7.png
После этого, переводим калькулятор в 10 режим работы, отметив поле «Dec», и получаем 10485760. Это и есть искомое число в байтах, но в привычной нам десятичной системе счисления:

2.8.png
Вы его можете уже перевести в Кб или в Мб:

Посмотреть размеры разделов телефона можно, например, через программку MTK Droid Tools Для этого подключите тел. к ПК, на котором уже установлены все необходимые драйвера, и запускаем прогу (через эту же прогу получаем временный Root-Shell, если его нет) затем жмем на кнопку "Карта блоков". Появляется новое окошко, в котором и смотрим размеры разделов телефона.

000.png
 

В процессе наполнения!!!

 
Спойлер

 

Предлагаю вашему вниманию

поэтапную инструкцию по работе с программой ScatterEditor, на примере увеличения раздела USRDATA.
Изменение размеров остальных разделов производиться аналогично.
Инструкция

Предлагаю вашему вниманию

подробную и поэтапную инструкцию по созданию образов необходимой длины.
Инструкция

Предлагаю вашему вниманию

подробную и поэтапную инструкцию по переразметке памяти для устройств на базе чипов mt6577,mt6589(mt6589t).
Инструкция

Предлагаю вашему вниманию

подробную и поэтапную инструкцию по переразметке памяти для устройств на базе чипов mt6572, mt6582, mt6592.
Инструкция

Предлагаю вашему вниманию

подробную и поэтапную инструкцию по переразметке памяти для устройств из режима Recovery
Инструкция

Проверить успешность процесса переразмеки, можно только

одним способом: посмотреть каким стал размер того раздела, манипуляции с которым Вы проводили в программе ScatterEditor.

 

 

6 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Практическая инструкция по работе с программой ScatterEditor!

В папке с программой ScatterEditor, создаем две папки Stoсk и Custom:
1.png
В папку Stoсk копируем файлы MBR, EBR1, EBR2 и scatter-файл (для МТ6589 это будет файл MT6589_Android_scatter_emmc.txt) от стоковой прошивки (под FlashTool) для вашего телефона.
2.png

Запускаем программу

ScatterEditor, и сразу же указываем объем ПЗУ вашего устройства в поле «Memory size» (в моем случае 32Гб): Можно установить от 1Гб до 128Гб.
3.png
Затем в меню File выбираем команду Open, и указываем путь к нашему scatter-файлу (MT6589_Android_scatter_emmc.txt), находящемуся в ранее созданной паке Stoсk, щелкаем один раз левой кнопкой мыши по этому файлу и жмем на кнопку «Открыть».
4.png
В программе откроется полный список разделов вашего устройства. Вот какая информация отображается для ZP990, у вас она может отличаться:
5.png
Поле «Partition Name» содержит название разделов. В поле «Offset» выводится смещение каждого раздела от начала памяти в байтах, отображенное в 16-ричной системе счисления. В полях «Size, hex» «Size» выводится размер раздела в 16-ой и 10-ой системе счисления соответственно. Поле «Type» отображает тип раздела, а в «File Name» указано имя файла, в котором параметры этого раздела находятся.
Место, где можно что-то редактировать, оставлено светлым. А поля, запись в которые запрещена, окрашены в серый цвет
Теперь переходим к непосредственному изменению размеров разделов.
Изменять размеры разделов можно как в 10-ричной системе счисления, так и в 16-ричной системе счисления, поэтому рассмотрим оба варианта.
 

Для примера увеличим раздел

4*1024*1024*1024=4294967296

USRDATA до 4Гб. По умолчанию его размер 0x60000000 или 1,5Гб.
Для этого переводим 4Гб из 10 с/с в 16 с/с и получаем число 0x100000000, которое и вводим в ячейку столбца «Size, hex» соответствующую разделу USRDATA, Нажимаем на клавиатуре Enter. При этом произойдёт автоматический перерасчет размера раздела FAT, который уменьшится ровно на столько, на сколько был увеличен раздел USRDATA:
6.png
ПРИМЕЧАНИЕ. Без проблем можно изменять размер сразу нескольких разделов, например, ANDROID и USRDATA.

В редакторе

ScatterEditor есть превосходный режим, позволяющий Вам не ломать голову над переводом чисел из 10-ой в 16-ричную систему счисления и обратно. Для перехода в него идем в меню Tools и выполняем команду «Input metods»->«10». При этом в редакторе столбец «Size» станет светлым, что позволит проводить операцию ввода размера раздела прямо в десятичных числах. Т.к 4Гб это
то и вводить в ячейку нужно именно его. После нажатия клавиши Enter Вы получите следующую картинку.
6.png

Теперь сохраняем внесенные изменения и при этом получаем готовые к прошивке файлы разметки памяти (

MBR+EBR и scatter). Для этого в пункте меню File выбираем команду Save, указываем путь к ранее созданной папке Custom и нажимаем на кнопку ОК.
7.png
Переходим в папку Custom и убеждаемся, что в ней присутствуют файлы MBR, EBR1, EBR2 и scatter.txt:
8.png
На этом всё, можно смело закрывать программу ScatterEditor.

В связи с выходом новых версий программы ScatterEditor, в которых будут появляться новые возможности, я буду добавлять небольшие инструкции по этим возможностям.
И так, первая из них появилась в ScatterEditor v1.03 - Удаление разделов памяти при помощи ScatterEditor!

6 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создание образов необходимой длины!

В данном посте представлен процесс перепаковки образов прошивки с файловой системой ext4 под новый размер блока памяти в устройстве после переразметки.
Итак, как-то захотелось мне на своем Zopo ZP990+ увеличить размер раздела /system с 800 мб (размер раздела можно глянуть в скаттер файле стоковой прошивки) до 1ГБ.
Мною были сделаны новые файлы разметки и скаттер файл при помощи программы Scatter2Editor... Мне оставалось только переразметить разделы в устройстве при помощи SP FlashTool с последующим форматированием переразмеченных разделов; но, почитав сообщение в теме по переразметке, я пришел к выводу, что у большинства пользователей возникают проблемы с форматированием переразмеченных разделов. Поэтому предлагаю вашему вниманию, способ как уйти от повторного форматирования - это прошивка через SP FlashTool образа в моем случае system.img, длина которого равна размеру переразмеченного блока.
Нам понадобятся:
1. Linux (Я пользуюсь Kubuntu 14.04 х64), можно и на виртуалке.
2. Набор утилит (архив Repack-img.tar.gz)
3. Необходимый образ из стоковой прошивки, длину которого хотим изменить.


Поехали!
Действия пунктов 1-3 проделываются один раз!!!

0.0.png

В консоли вводим

cd ~/Repack-img

0.1.png

В консоли вводим и подтверждаем паролем

sudo chmod a+x ./bin/simg2img ./bin/img2simg ./bin/make_ext4fs ./bin/ext4fixup ./bin/simg_dump.py

0.2.png
0.3.png

В консоли вводим

mkdir system

0.4.png

В консоли вводим

./bin/simg2img system.img system.raw

0.5.png

В консоли вводим

sudo mount -t ext4 -o loop system.raw system/

0.6.png
В папке system у вас будет содержимое образа system.img (при желании его можно изменить).1024M свое число с учетом примечания).
После этого получаем образ system_new.img длиной в 1Гб

Так как я увеличивал раздел с 800Мб до 1Гб, то в консоли ввожу (вы вводите вместо

sudo ./bin/make_ext4fs -s -l 1024M -a system system_new.img system/

0.7.png

В консоли вводим

sudo umount system && rm -fr system.raw system

0.8.png
Примечание: 1G = 1024M = 1048576K = 1073741824 byte
Дабы избежать лишних вопросов, приведу еще пару примеров:


1.0.png

В консоли вводим

mkdir data

1.1.png

В консоли вводим

./bin/simg2img userdata.img userdata.raw

1.2.png

В консоли вводим

sudo mount -t ext4 -o loop userdata.raw data/

1.3.png2G свое число с учетом примечания).
После этого получаем образ userdata_new.img длиной в 2Гб

Так как я хочу уменьшить длину образа с 4Гб до 2Гб, то в консоли ввожу (вы вводите вместо

sudo ./bin/make_ext4fs -s -l 2G -a data userdata_new.img data/

1.4.png

В консоли вводим

sudo umount data && rm -fr userdata.raw data

1.5.png

 

Перепаковка Cache

mkdir cache
./bin/simg2img cache.img cache.raw
sudo mount -t ext4 -o loop cache.raw cache/
sudo ./bin/make_ext4fs -s -l 128M -a cache cache_new.img cache/
sudo umount cache && rm -fr cache.raw cache

Repack-img.tar.gz
MD5: 07FC399A18E58716674C7ADDFFA30010

6 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Инструкция по удалению разделов  памяти при помощи ScatterEditor!

В папке с программой ScatterEditor, создаем две папки Stoсk и Custom:
1.png
В папку Stoсk копируем файлы MBR, EBR1, EBR2 и scatter-файл (для МТ6589 это будет файл MT6589_Android_scatter_emmc.txt) от стоковой прошивки (под FlashTool) для вашего телефона.
2.png

Запускаем программу

ScatterEditor, и сразу же указываем объем ПЗУ вашего устройства в поле «Memory size» (в моем случае 32Гб): Можно установить от 1Гб до 128Гб.
3.png
Затем в меню File выбираем команду Open, и указываем путь к нашему scatter-файлу (MT6589_Android_scatter_emmc.txt), находящемуся в ранее созданной паке Stoсk, щелкаем один раз левой кнопкой мыши по этому файлу и жмем на кнопку «Открыть».
4.png
В программе откроется полный список разделов вашего устройства. Вот какая информация отображается для ZP990, у вас она может отличаться:
5.png
Поле «Partition Name» содержит название разделов. В поле «Offset» выводится смещение каждого раздела от начала памяти в байтах, отображенное в 16-ричной системе счисления. В полях «Size, hex»  «Size» выводится размер раздела в 16-ой и 10-ой системе счисления соответственно. Поле «Type» отображает тип раздела, а в «File Name» указано имя файла, в котором параметры этого раздела находятся.
Место, где можно что-то редактировать, оставлено светлым. А поля, запись в которые запрещена, окрашены в серый цвет
Теперь переходим непосредственно к удалению разделов.
Для примера расширим раздел USRDATA за счет раздела FAT. Для этого удалим раздел FAT полностью.
 

ПРИМЕЧАНИЕ. Т.к. в моем случае в файле EBR2 имеется только один раздел FAT, то при удалении этого раздела можно смело удалять и раздел EBR2, который содержит описание раздела FAT  (в выходных файлах, поэтому будет отсутствовать и файл EBR2). Если у вас будет в файле EBR2 указан еще какой-нибудь раздел (или несколько), то в этом случае раздел EBR2 удалять нельзя (если вы конечно не удалите все разделы указанные в нем), а в файле EBR2 останутся все остальные разделы кроме удаленного.
Также отмечу, что пользуясь программой, можно легко определить какие разделы указаны в МBR (разделы подчеркнуты синим), в EBR1 (разделы подчеркнуты зеленым), в EBR2 (разделы подчеркнуты красным). См. Рис.
6.png
Итак, для удаления раздела FAT, нам необходимо выделить данный раздел, кликнув одни раз левой кнопкой мыши по данному разделу. Затем держа указатель мыши на выделенном разделе кликнуть правой кнопкой мыши, чтобы появилось контекстное меню, и выполнить команду «Remove Partition».
7.png
Появится окно подтверждения вносимых изменений, нажимаем «Да»
Таким же образом удаляем раздел EBR2. При этом произойдет пересчет длины раздела USRDATA, который станет последним. И его длина увеличится на весь размер удаленных разделов.
В итоге получаем следующую картину:
8.png

Теперь сохраняем внесенные изменения и при этом получаем готовые к прошивке файлы разметки памяти (

MBR+EBR и scatter). Для этого в пункте меню File выбираем команду Save, указываем путь к ранее созданной папке Custom и нажимаем на кнопку ОК.
9.png
Переходим в папку Custom и убеждаемся, что в ней присутствуют файлы MBR, EBR1 и MT6589_Android_scatter_emmc.txt:
10.png
На этом всё, можно смело закрывать программу ScatterEditor.

3 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процесс переразметки памяти для устройств на базе mt6577,mt6589(mt6589t)

Файлы разметки получите, используя инструкцию «Практическая инструкция по работе с программой

ScatterEditor».
После того, как у Вас появились все необходимые файлы (scatter.txt, MBR, EBR1, EBR2), созданные редактором для разметки памяти ScatterEditor, перейдем непосредственно к самому процессу переразметки.
Внимание: для устройств на MT6577 файл EBR будет один: EBR1.

1. Копируем scatter-файл от стоковой прошивки для Вашего устройства в папку, в которой расположена программа «SP Flash Tool».
2. Запускаем флешер «SP Flash Tool» от имени администратора.
3. Загружаем scatter-файл. Для этого справа от поля «Scatter-loading file» нажимаем кнопку «Scatter-loading».
4. Из папки, в которой расположена программа «SP Flash Tool», выбираем scatter-файл (он будет называться MT6589_Android_scatter_emmc.txt – если у Вас устройство на MT6589 (MT6589t); либо MT6577_Android_scatter_emmc.txt – если у Вас устройство на MT6577).
1.png
5. Нажимаем на кнопку «Format».
2.png
Сразу же появится новая форма – в ней отмечаем «Manual Format»:
5.1. Для устройств на MT6589 (MT6589t):
Если в стоковом скаттер-файле прописано так

...
__NODL_PMT 0x700000
...
__NODL_PRO_INFO 0xb00000
...

, то Begin Address (Hex) = смещению раздела PMT; Format Length (Hex) = смещение PRO_INFO - смещение PMT = 0xb00000 - 0x700000 = 0x400000
• в поле «Begin Address (Hex)» вводим стартовый адрес 0x0000000000700000
• в поле «Format Length (Hex)» вводим длину 0x0000000000400000
3.png
В случае, если у вас в стоковом скаттер файле иные смещения раздела PMT и/или за разделом PMT следует не раздел PRO_INFO а другой - обозначим его Раздел Х, то
Format Length (Hex) = смещение Раздела Х - смещения PMT
5.2. Для устройств на MT6577
Если в стоковом скаттер-файле прописано так

...
__NODL_PMT 0x608000
...
__NODL_NVRAM 0xa08000
...

, то Begin Address (Hex) = смещению раздела PMT; Format Length (Hex) = смещение NVRAM - смещение PMT = 0xa08000 - 0x608000 = 0x400000
• в поле «Begin Address (Hex)» вводим стартовый адрес 0x0000000000608000
• в поле «Format Length (Hex)» вводим длину 0x0000000000400000
4.png
В случае, если у вас в стоковом скаттер файле иные смещения раздела PMT и/или за разделом PMT следует не раздел NVRAM а другой - обозначим его Раздел Х, то
Format Length (Hex) = смещение Раздела Х - смещения PMT
Например, часто встречаются устройства, у которых в стоковом скаттер-файле прописано так

...
__NODL_PMT 0x00888000
...
__NODL_NVRAM 0x00C88000
...

, то
• в поле «Begin Address (Hex)» вводим стартовый адрес 0x0000000000888000
• в поле «Format Length (Hex)» вводим длину 0x0000000000400000
5.3. Для всех чипов отмечаем галочкой поле «Validation»
6. Выключаем телефон, передергиваем аккумулятор на 5 сек. и вставляем обратно, но телефон не включаем и к компьютеру не подключаем.
7. Нажимаем кнопку «ОК» в форме «Format Option» (рис.3-4) и сразу же подключаем выключенный телефон к ПК через USB-кабель.
8. Все, ждем окончания процесса форматирования (до появления зеленого кружочка):
5.png
9. Закрываем это окно с зеленым кружочком и выходим из программы «SP Flash Tool», закрываем ее.
10. Отключаем телефон от ПК, передергиваем аккумулятор на 5 сек. и вставляем обратно, но телефон не включаем и к компьютеру не подключаем.

Процесс форматирования осуществляется аналогично форматированию раздела PMT, только с той разницей, что в поля «Begin Address (Hex)» и «Format Length (Hex)» нужно вводить другие цифры.
Данные, которые нужно вводить в них, зависят от того, размеры каких разделов вы увеличивали, пользуясь редактором ScatterEditor.
Все возможные варианты я описать не смогу, но пользуясь разработанным мною правилом, я его назвал «Правило SevenMaxs», Вы легко проведете все необходимые расчеты.
Правило SevenMaxs:
Для расчета области форматирования памяти устройства, в пределах которой происходит переразметка, необходимо в программе «SP Flash Tool»:
• в поле «Begin Address (Hex)» ввести смещение раздела из Scatter-файла стоковой прошивки, размер которого был изменен. Если разделов было несколько, то необходимо ввести смещение раздела, расположенного ближе к нулевому смещению 0х0;
• в поле «Format Length (Hex)» ввести число, представляющее собой разность между смешением раздела, введенным выше и смещением раздела FAT!

 

Не менее важным является форматирование той части памяти, в пределах которой происходит передвижение разделов памяти устройства.

Вот несколько примеров:

Пример №1. Был увеличен/уменьшен раздел USRDATA на устройстве с чипом MT6589:
Открываем MT6589_Android_scatter_emmc.txt от стоковой прошивки в любом удобном для вас текстовом редакторе и смотрим смещение раздела USRDATA - оно составляет 0x34f80000
И поэтому в поле «Begin Address (Hex)» программы «SP Flash Tool» вводим 0x0000000034f80000
Затем находим разность между смещениями разделов FAT и USRDATA:

 

0x94f80000 - 0x34f80000 = 0x60000000

 

Значит в поле «Format Length (Hex)» необходимо ввести 0x0000000060000000

Пример №2. Были увеличены/уменьшены разделы ANDROID и USRDATA на устройстве с чипом MT6589:
Открываем MT6589_Android_scatter_emmc.txt от стоковой прошивки в любом удобном для вас текстовом редакторе и смотрим смещение раздела ANDROID - оно составляет 0x4780000 и раздела USRDATA - оно составляет 0x34f80000
Так как раздел ANDROID расположен ближе к нулевому смещению, то в поле «Begin Address (Hex)» программы «SP Flash Tool» вводим 0x0000000004780000
Затем находим разность между смещениями разделов FAT и ANDROID:

0x94f80000 - 0x4780000 = 0x90800000

а значит в поле «Format Length (Hex)» необходимо ввести 0x0000000090800000

Пример №3. Были увеличены/уменьшены разделы BOOTIMG и RECOVERY на устройстве с чипом MT6577:
Открываем MT6577_Android_scatter_emmc.txt от стоковой прошивки в любом удобном для вас текстовом редакторе и смотрим смещение раздела BOOTIMG - оно составляет 0xf88000 и раздела RECOVERY - оно составляет 0x1588000
Так как раздел BOOTIMG расположен ближе к нулевому смещению, то в поле «Begin Address (Hex)» программы «SP Flash Tool» вводим 0x0000000000f88000
Затем находим разность между смещениями разделов FAT и BOOTIMG

0xa29e8000 - 0xf88000 = 0xa1a60000

, а значит в поле «Format Length (Hex)» необходимо ввести 0x00000000a1a60000

Для переразметки памяти производится прошивка файлов разметки, полученных от редактора «ScatterEditor».

 

1. Запускаем (если не запущен) «SP Flash Tool» от имени администратора.
2. Справа от поля «Scatter-loading file» нажимаем кнопку «Scatter-loading».
3. Идем в папку, в которой расположены файлы MBR, EBR1, EBR2 (для устройств на MT6577 этого файла не будет) и scatter.txt, созданные программой ScatterEditor, и выбираем scatter.txt
6.png
4. Отключаем телефон от ПК (если подключен), передергиваем аккумулятор на 5 сек. и вставляем обратно, но телефон не включаем и к компьютеру не подключаем.
5. Нажимаем кнопку «Download» в окне «SP Flash Tool», появляется окошко предупреждения, в котором жмем кнопку «ДА»:
7.png
И сразу же подключаем выключенный телефон к ПК через USB - ждем окончания процесса прошивки (до появления зеленого кружочка).
6. Закрываем появившейся зеленый кружочек и выходим(закрываем) из программы «SP Flash Tool»

 

ВСЁ, ПРЕРАЗМЕТКА ПРОЙДЕНА!

1.После переразметки памяти, в дальнейшем при манипуляциях с телефоном через Flash Tool» необходимо использовать файлы: MBR, EBR1, EBR2 и scatter.txt, которыми Вы делали переразметку памяти.
2.Все что вы делаете – делаете на свой страх и риск! Автор не несет за это никакой ответственности.

Сразу отвечу на Вопрос: Что означает "в дальнейшем при манипуляциях с телефоном через Flash Tool необходимо использовать файлы: MBR, EBR1, EBR2 и scatter.txt из той папки, которыми Вы делали переразметку памяти.
Ответ: Поясняю! Например:
а) вы хотите залить какую-нибудь прошивку под SP Flash Tool, то вам необходимо из этой прошивки удалить файлы MBR, EBR1, EBR2 и MT6589_Android_scatter_emmc.txt и заменить их MBR, EBR1, EBR2 и scatter.txt, которыми размечали память;
б) вы хотите прошить, например RECOVERY, то вам необходимо рядом с образом RECOVERY.IMG положить и scatter.txt, которым размечали память;
в) и так с любым пунктом при перепрошивке через SP Flash Tool, т.к. вновь размеченная сетка разделов для телефона становится "родной".

Форматирование раздела PMT удаляет внутреннюю базу данных по разметке разделов памяти. Ее необходимо выполнять при ЛЮБЫХ изменениях смещений разделов.
5 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процесс переразметки памяти для устройств на базе mt6572,mt6582,mt6592


Отредактировал SevenMaxs
В процессе наполнения!
1 пользователю понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переразметка памяти устройств из режима Recovery

Наконец-то появилось несколько свободных минут, которые я и vin2809 с удовольствием потратим на изложение своих мыслей о практическом применении файла PMT и создании патчей для установки файлов переразметки, используя recovery. Данный материал будет полезен владельцам устройств на базе чипов mt6577 и mt6589, т.к. в памяти устройств, построенных на данных чипах, есть раздел /dev/pmt. Этот раздел содержит копию разметки памяти Вашего устройства, что очень мешает при прошивке измененных разделов через FlashTool.

1.Проводим ("на старом месте") форматирование области памяти, в пределах которой будет происходить переразметка.

2.Прошиваем НОВЫЕ файлы разметки (pmt, mbr, ebr1, ebr2).
3.Проводим повторное форматирование измененной области памяти, но уже по новым данным разметки, так сказать, "на новом месте".
4.Перезагружаемся.

Сразу хочу отметить, что в режиме recovery (в отличие от прошивки через флешер) нельзя отформатировать все разделы памяти, а только System, Cache, Date, Fat (Emmc).


Данное обстоятельство слегка ограничевает нас в "ассортименте" разделов, размер которых можно без особых усилий изменить.
Но, как мне кажется, это самые "ходовые" разделы в плане переразметки.
Для прошивки файлов разметки можно использовать не только флешер, но и режим recovery. Для этого используются патчи, содержащие файлы разметки и специальные файлы для их переноса в память устройства.
Желательно также установливать патчи переразметки со съемной SD карты, чтобы можно было форматировать внутреннюю SD карту телефона (если она у Вас есть).
Начмем мы с того, что у Вас уже есть все необходимые файлы, полученые программой ScatterEditor версии не ниже 1.05. Просто начиная с этой версии программа научилась создавать файл PMT.
Желательно, конечно, иметь хотя бы начальный уровень знаний по написанию update-script и созданию update.zip.
Также стоит подчеркнуть, что совсем не обязательно шить все файлы переразметки. Если содержимое файла не изменилось, то зачем его прошивать? Например, для большинства устройств на базе mt6589 разделы System, Cache, Date прописаны в файле ebr1, а раздел Fat в ebr2, и поэтому совсем необязательно включать в патч переразметки файл mbr.
Как посмотреть какие разделы расположены в каждом из файлов разметки? Да очень просто - в редакторе ScatterEditor и с этим проблем не должно возникнуть, т.к. под название файла отведена отдельная колонка.
Итак, создадим несколько патчей переразметки под моим руководством.

Увеличим программой ScatterEditor размер раздела Datа за счет раздела Fat на устройстве на базе mt6577. Запускаем редактор и открываем scatter-файл. Т.к. в моем случае оба изменяемых раздела (Datа и Fat) прописаны в файле ebr1, то в патч переразметки нет никакой необходимости включать mbr. Значит для патча нам понадобится только ebr1 и pmt.

Теперь перейдем к написанию update-script.

1.Отключаем (отмонтируем) необходимые для изменения разделы. Подмонтированные разделы находятся под защитой операционной системы и у Вас не получится их отформатировать, а некоторые и прошить.

unmount("/data");
unmount("/emmc");

2.Выводим информационное сообщение.

ui_print("Formating Data, Emmc...");

3.Форматируем разделы по СТАРОЙ разметке.

format("ext4", "EMMC", "/dev/block/mmcblk0p5", "0", "/data");
format("vfat", "EMMC", "/dev/block/mmcblk0p6", "0", "/emmc");

4.Опять выводим сообщение.

ui_print("Repartition...");

5.Копируем файл EBR1 во временную папку /tmp/EBR1, прошиваем его в раздел EBR1 и удаляем временную папку.

assert(package_extract_file("EBR1", "/tmp/EBR1"),run_program("/sbin/flash_image", "/dev/block/mmcblk0p1", "/tmp/EBR1"),delete("/tmp/EBR1"));

6.Копируем PMT в раздел PMT.

package_extract_file("pmt", "/dev/pmt");

7.Выводим сообщение.

ui_print("Formating Data, Emmc...");

8. Форматируем разделы по НОВОЙ разметке.

format("ext4", "EMMC", "/dev/block/mmcblk0p5", "0", "/data");
format("vfat", "EMMC", "/dev/block/mmcblk0p6", "0", "/emmc");

9.Выводим сообщение.

ui_print("Finished...");

Теперь собираем наш патч переразметки. В корень архива update.zip кладем файлы ebr1 и pmt, а update-script (скрипт установки) - в папку \META-INF\com\google\android\.
Полученный архив подписываем и в последствии инсталируем через любое мод. recovery.

Т.к. в этом случае раздел System прописан в файле ebr1, а Fat в файле ebr2, то в патч переразметки опять не включаем файл mbr (т.к. в него не вносились изменения). Нам понадобится только ebr1, ebr2 и pmt.
Отформатировать необходимо разделы, поменявшие свои параметры. Согласно scatter'а или редактора ScatterEditor видно, что это разделы от System до Emmc.
Теперь перейдем к написанию update-script.

1.Отключаем (отмонтируем) необходимые для изменения разделы. Подмонтированные разделы находятся под защитой операционной системы и у Вас не получится их отформатировать, а некоторые и прошить.

unmount("/system");
unmount("/cache");
unmount("/data");
unmount("/emmc");

2.Выводим сообщение.

ui_print("Formating System, Cache, Data, Emmc...");

3.Форматируем разделы по СТАРОЙ разметке.

format("ext4", "EMMC", "/dev/block/mmcblk0p5", "0", "/system");
format("ext4", "EMMC", "/dev/block/mmcblk0p6", "0", "/cache");
format("ext4", "EMMC", "/dev/block/mmcblk0p7", "0", "/data");
format("vfat", "EMMC", "/dev/block/mmcblk0p8", "0", "/emmc");

4.Выводим сообщение.

ui_print("Repartition...");

5.Копируем файл EBR1 во временную папку /tmp/EBR1, прошиваем его в раздел EBR1 и удаляем временную папку.

assert(package_extract_file("EBR1", "/tmp/EBR1"), run_program("/sbin/flash_image", "/dev/block/mmcblk0p1", "/tmp/EBR1"), delete("/tmp/EBR1"));

6.Копируем EBR2 и PMT в соответствующие разделы PMT.

package_extract_file("EBR2", "/dev/ebr2");
package_extract_file("pmt", "/dev/pmt");

7.Выводим сообщение.

ui_print("Formating System, Cache, Data, Emmc...");

8. Форматируем разделы по НОВОЙ разметке.

format("ext4", "EMMC", "/dev/block/mmcblk0p5", "0", "/system");
format("ext4", "EMMC", "/dev/block/mmcblk0p6", "0", "/cache");
format("ext4", "EMMC", "/dev/block/mmcblk0p7", "0", "/data");
format("vfat", "EMMC", "/dev/block/mmcblk0p8", "0", "/emmc");

9.Выводим сообщение.

ui_print("Finished...");

Увеличиваем программой ScatterEditor раздел System за счет раздела Fat на устройстве на базе mt6589.

Теперь собираем наш патч переразметки. В корень архива update.zip кладем файлы ebr1, ebr2 и pmt, а update-script (скрипт установки) в папку \META-INF\com\google\android\.
Полученный архив подписываем и в последствии инсталируем через любое мод. recovery.

Для тех кто пытается, переразметить память через рекавери и получает кирпич (если конечно через SP FlashTool все проходит успешно) при использовании файла pmt, полученного при создании файлов новой разметки используйте вот этот файл pmt.7z
Происходит форматирование раздела /dev/pmt при его прошивке командой:

package_extract_file("pmt", "/dev/pmt");

ПРОШУ ОБРАТИТЬ ВНИМАНИЕ - в зависимости от рекавери номера блоков и точки мотирования разделов могут быть другими. Иногда раздел Fat может быть смонтирован как /sdcard, а не как /emmc, и посему не забываем вносить в скрипт соответствующие правки.


Патчи переразметки описанные в примерах: Repartition_Recovery.7z

5 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процесс переразметки памяти для устройств на базе mt6595,mt6732,mt6752,mt6795


Отредактировал SevenMaxs
В процессе наполнения!
1 пользователю понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вижу, что практики хоть завались. Отлично, тогда добавлю немного теории.

Поговорим об устройстве GPT - GUID Partition Table. Этот зверь применяется в мобильных устройствах для описания разметки памяти.

Описание структуры GPT

1.Введение

GPT это другой формат таблицы размещения разделов памяти типа GUID (GUID Partition Table). Он является частью EFI (Extensible Firmware Interface) - стандарта, используемого вместо BIOS для загрузки разделов памяти.
Переход на другой формат таблицы разделов позволил устранить самый существенный недостаток старого формата (MBR) - число разделов. Если в MBR помещалось только 4 записи с ограничением на длину раздела и его смещение из-за того, что эти параметры описывались 32-разрядными числами, то в GPT можно разместить 128 записей о разделах. Причем их параметры уже описываются 64-разрядными числами.

 

2.Структура GPT

GPT состоит из MBR, заголовка и самой таблицы разделов.
Для совместимости со старым стандартом загрузки (BIOS) и с целью защиты самой таблицы разделов GPT тоже начинается с MBR, которая описывает всего один раздел. Эта "защитная" MBR располагается тоже в первом секторе памяти по адресу 0-0х1FF (512 байт).
Смещение указывает на начало заголовка таблицы разделов GPT, а размер раздела устанавливается равным длине всей памяти устройства. Более подробно я опишу это далее. Тип раздела имеет значение 0хEF (GPT-раздел).
Сразу за MBR, т.е. с адреса 0х200, располагается заголовок GPT, тоже имеющий длину 1 сектор (512 байт). Он имеет следующую структуру:

--------------------------------------------------------------------------------
Смещение   Длина     Значение
--------------------------------------------------------------------------------
00  0x00     8 bytes    сигнатура (строка символов "EFI PART" - 45h 46h 49h 20h 50h 41h 52h 54h)
08  0x08     4 bytes    версия (для GPT версии 1.0 (through at least UEFI версии 2.3.1), должно быть 00h 00h 01h 00h)
12  0x0C     4 bytes    размер заголовка в байтах (little endian, обычно 5Ch 00h 00h 00h, что означает 92 байта)
16  0x10     4 bytes    CRC32 заголовка (от 0+длина заголовка байт). При расчете CRC32 в это поле заносится 0
20  0x14     4 bytes    резерв; должен быть 0
24  0x18     8 bytes    текущий LBA сектор (размещение первичной копии заголовка)
32  0x20     8 bytes    резервный LBA сектор (размещение резервной копии заголовка)
40  0x28     8 bytes    первый разрешенный для использования LBA сектор (т.е. последний LBA сектор таблицы разделов GUID+1)
48  0x30     8 bytes    последний LBA-сектор, разрешенный для использования (т.е. первый LBA сектор резервной таблицы разделов GUID-1)
56  0x38   16 bytes    GUID диска (памяти)
72  0x48     8 bytes    первый LBA сектор таблицы записей о разделах (всегда 2 в первичной копии заголовка)
80  0x50     4 bytes    число записей о разделах
84  0x54     4 bytes    размер одной записи о разделе в байтах (обычно 128)
88  0x58     4 bytes    CRC32 таблицы записей о разделах
92  0x5C      *            резерв; 0 до конца блока (420 байт для сектора размером 512 байт или больше, если сектор имеет другоё размер)
--------------------------------------------------------------------------------

Непосредственно за заголовком, начиная с адреса 0х400, располагается сама таблица разделов. Каждая запись размером 128 байт имеет следующую структуру:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Смещение        Длина         Значение
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  0  0x00        16 bytes        GUID типа раздела. Определяет файловую систему, используемую для хранения данных в этом разделе.
16  0x10        16 bytes        GUID раздела. Является уникальным идентификатором раздела, поэтому создаётся каждый раз, когда создаётся раздел.
32  0x20          8 bytes        первый LBA сектор размещения раздела (little endian)
40  0x24          8 bytes        последний LBA сектор размещения раздела (inclusive, usually odd)
48  0x30          8 bytes        атрибуты раздела (флаги)
56  0x38        72 bytes        строка из имени раздела (36 символов в кодировке UTF-16LE)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Каждая файловая система получает свой GUID, однозначно её идентифицирующий. Стандарт UEFI определяет следующие GUID типов разделов.
Вот таблица некоторых значений GUID:

----------------------------------------------------------------------------------
Значение GUID                                                     Описание
----------------------------------------------------------------------------------
00000000-0000-0000-0000-000000000000        Неиспользуемая запись
C12A7328-F81F-11d2-BA4B-00A0C93EC93B        Системный раздел UEFI
024DEE41-33E7-11d3-9D69-0008C781F39F        Раздел, содержащий традиционную MBR
----------------------------------------------------------------------------------

Другие GUID можно посмотреть в Л[1].
Но в таблице разделов GUID записывается в другом порядке. Например, GUID системного раздела EFI имеет следующий вид: C12A7328-F81F-11D2-BA4B-00A0C93EC93B. Порядок записи байтов в написаниях GUID является little-endian, причем задом наперед пишутся байты только в первых трех блоках.
Для приведенного выше GUID запись в таблице разделов будет иметь такой вид: 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B.
8 байт (64 бита) флагов распределены следующим образом. Биты с 0 по 47 (48 шт.) отведены под общие атрибуты типов разделов, а остальные 16 битов (с 48 по 63) описывают конкретный раздел.
Вот небольшое описание этих битов:

--------------------------------------------------------------------------------
Бит           Значение
--------------------------------------------------------------------------------
  0            системный раздел
  1            EFI игнорирует содержимое этого раздела и даже не пытается читать его
2-47         Зарезервировано для нужд UEFI; должны быть равны нулю
---
60            Read-only (только для чтения)
62            Hidden (скрытый)
63            автоматически не монтируется
--------------------------------------------------------------------------------

3.Литература

1.GUID-таблица разделов (GPT). http://ru.osdev.wikia.com/wiki/GUID-таблица_разделов_(GPT).
2.GUID Partition Table. http://en.wikipedia.org/wiki/GUID_Partition_Table.

В следующий раз я приведу практические примеры работы по изменению и созданию GPT ручным способом. А потом  будет и редактор...

4 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Несколько слов о том, что же такое MBR и EBR. Это загрузочные записи, содержащие описание разделов памяти мобильного устройства.

Кто хочет подробнее смотрите ниже.

Что такое MBR и EBR?

1.Введение

Для работы операционной системы (ОС) необходимо создать таблицу размещения ее частей. Эта таблица находится в загрузочной записи (Boot Record), точнее в главной загрузочной записи или Master Boot Record (MBR), которая физически располагается в первом секторе памяти.
MBR содержит саму таблицу размещения разделов, сигнатуру файла (т.е. признак Boot Record) и может быть еще исполнимый код, используемый некоторыми ОС для загрузки.
Исторически так сложилось, что в MBR можно поместить только 4 записи о разделах. Если требуется большее количество разделов, то используется дополнительная загрузочная запись Extended Boot Record (EBR). В этом случае в MBR вместо записи об одном из разделов помещается запись о дополнительном (extended) разделе, содержащем только EBR.
Сама EBR имеет точно такое же строение и размер, как и MBR, и использовать ее нужно точно также. Т.е., если Вам не хватит числа записей о разделах и в этот раз, то поступайте как и в случае с MBR - создавайте следующую EBR-запись! При этом все файлы, содержащие EBR, должны называться последовательно: EBR1, EBR2,...

 

2.Структура MBR и EBR файлов

MBR и EBR записи имеют размер 512 байт, т.е. один физический сектор, а длина файла их содержащего, может быть и больше. ОС все равно прочитает только саму загрузочную запись. Структура этих записей несколько различается в зависимости от ОС. Но для мобильных устройств они имеют следующий вид:

-------------------------------------------------------------------------
Адрес        Содержимое
-------------------------------------------------------------------------
0000h       Код загрузчика
01BEh       Четыре записи таблицы разделов
01FEh       2-байтовая сигнатура MBR или EBR (0х55AA)
-------------------------------------------------------------------------

Вот пример файла 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
--------------------------------------------------------------------------------------

Запись о первом разделе занимает адреса 1BE-1СD

  •                                           о втором 1CE-1DD;
  •                                          о третьем 1DE-1ED;
  •                                    и о четвертом 1EE-1FD

а по адресу 1FE-1FF видно, что расположена сигнатура файла: 55 AA

Каждая запись таблицы разделов имеет длину 16 байт, а содержимое зависит от используемой ОС. Для мобильных устройств формат записи таблицы разделов имеет следующий вид:

-----------------------------------------------------------------------------------------------------------------------------------------
Смещение    Длина         Описание
-----------------------------------------------------------------------------------------------------------------------------------------
00h              4 байта       Не используется (всегда 0х00)
04h              1 байт        Код типа раздела
05h              3 байта      Не используется (всегда 0х00)
08h              4 байта      Смещение раздела  секторах размером по 512 байт)
0Ch              4 байта      Количество секторов раздела (длина раздела в секторах размером по 512 байт)
------------------------------------------------------------------------------------------------------------------------------------------

Размер раздела выяснить проще, Берем значение в поле "Размер" из записи о разделе и умножаем на размер сектора. Например, если в поле стоит число 0х00000019, то имеем

0х00000019*0х200=0х00003200 (12800 байт)

Смещение раздела указывается по отношению к сектору размещения самой записи. Если в поле смещения раздела указано значение 0х400, а сама таблица (MBR) расположена в памяти, начиная с адреса 0х00600000 (это указывается в scatter-файле), то этот раздел физически будет расположен в памяти с адреса

      0х00600000
   + 0х00080000    (0х400*0х200=0х00080000) - переход от числа секторов к смещению в байтах
    ------------------
      0х00680000

Код типа раздела описывает его содержимое. Так, если раздел не содержит информации, т.е. пуст, то его код устанавливается в 0х00.
Если разделов больше 4 и в одну таблицу MBR они не помещаются, то для дополнительной таблицы устанавливается код 0х05. Коды часто используемых разделов приведены в таблице.

------------------------------------------
Код       Тип раздела
------------------------------------------
00h      Пустая запись (свободное место)
01h      FAT-12
05h      Расширенный раздел
0Bh      FAT-32
----
82h      Linux swap
83h      Linux
----
EEh      GPT (GUID Partition Table)
FFh      BBT (Bad Block Table)
------------------------------------------
2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примеры работы с MBR+EBR

Пару практических уроков по работе с загрузочными записями.

В файлы, содержащие таблицы MBR и EBR, вносятся изменения после корректировки scatter-файла. Зная первоначальные размер и смещение раздела, его можно найти в таблице BR.
Затем новые значения этих параметров переводятся из байт в сектора, разделив их на 512 (0х200), и вписываются в соответствующие поля таблицы. Рассмотрим примеры типичных действий над MBR+EBR.

 

1.Получение данных о разделах.

Спойлер

 

Для облегчения чтения данных я немного разрядил их, внеся пробелы между параметрами разделов. Примеры приведены по файлам разметки памяти для чипов МТ6589.
Например, первый раздел, параметры которого описаны в MBR, имеет следующий вид:


-------------------------------------------------------------------------
          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
-------------------------------------------------------------------------

Из таблицы видно, что тип раздела, расположенный по адресу 1C2, 0х05. Это код расширенного раздела, который говорит, что эта запись описывает РАЗДЕЛ, содержащий следующую таблицу разделов, которую называют расширенной - Extended Boot Record (EBR).
Смещение этого раздела, расположенное по адресу 1C6-1C9, составляет

 


0х00000400*0х200=0х00080000

от сектора размещения таблицы MBR. Весь фокус в том, что все смещения и размеры записаны в обратном порядке, т.е. сразу пишется младший байт, а последним пишется старший байт. Учитывая, что MBR-раздел имеет смещение 0х00600000, настоящее значение смещения раздела будет

 


0х00080000+0х00600000=0х00680000

Размер раздела в данном случае не стоит принимать во внимание, т.к. это РАСШИРЕННЫЙ раздел. А это, как мы уже знаем, раздел, содержащий ТОЛЬКО таблицу описания разделов, которая занимает всего 512 байт полезного места в памяти.


Описание следующего раздела расположено по адресу 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
--------------------------------------------------------

Тип раздела расположен по адресу 1D2 и имеет значение 83. Это раздел, который будет работать под Linux (а для нас это может быть Android, cache, Userdata).
Смещение раздела расположено по адресу 1D6-1D9 и имеет значение


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

Размер раздела расположен по адресу 1DA-1DD и имеет значение


0х00005000*0х200=0х00A00000 (10485760 байт)

Так можно просматривать любую запись для любого раздела. Соответствие между записью в загрузочной таблице и разделом нужно искать в scatter-файле по известному смещению.

 

 

2.Внесение изменений в параметры разделов.

Спойлер

 

Допустим, мы хотим расширить раздел USRDATA до 3Гб, описание которого расположено в файле EBR1. Раздел расположен по смещению 0х34F80000 и в исходном состоянии имеет размер 0х60000000 (1.5Гб). Эту информацию я взял из описания раздела, расположенного в файле scatter.
Следующий раздел, за счет которого будет проводиться расширение USRDATA, это FAT - последний раздел памяти, где располагаются все пользовательские данные: фильмы, книги, фотографии и т.д.
Чтобы "перевести" смещение в сектора, в тот вид, в котором записываются параметры раздела в файлах BR, нужно выполнить следующее:

  • из смещения раздела вычитаем смещение, взятое из scatter-файла, файла EBR1 (т.е. таблицы EBR1), содержащей запись об USRDATA, и получим смещение раздела от НАЧАЛА этой таблицы: 0х34F80000-0х00680000=0х34900000;
  • переведем это значение из байтов в количество сектора: 0х34900000/0х200=0х001A4800;
  • переведем и размер раздела в количество секторов: 0х60000000/0х200=0х00300000;
  • учитывая обратный порядок записи в файлах BR, будем искать запись о смещении в виде 00 48 1A 00, а о длине раздела 00 00 30 00.

Вот выписка из файла EBR1, содержащего запись о разделе 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 
-----------------------------------------------------------------

Наша запись расположена предпоследней по адресам 1DE-1ED и имеет тип раздела 83, т.е. является Linux-разделом.
Пересчитаем параметры разделов. Длина раздела USRDATA должна стать


3*1024*1024*1024=3221225472.

В секторах это будет


3221225472/512=6291456

или в 16-ричном виде 0х00600000. Запишем байты в обратном порядке 00 00 60 00. Это и есть наш размер, который нужно прописать в EBR1-файле по адресу 1EA-1ED.
При увеличении размера этого раздела сместится начало следующего раздела. Т.к. это FAT (последний раздел в памяти), то его размер просто уменьшится, т.к. верхняя граница не может выйти за общий размер памяти.
Теперь изменим смещение раздела FAT, т.к. он расположен следом за USRDATA. А где найти его параметры?
Если пересчитать смещения ВСЕХ записей о разделах, расположенных в файле EBR1, и сравнить их со scatter'ом, то мы найдем только запись об Android, CACHE, USRDATA и EBR2.
А где же FAT? Проверим тогда, что находится в EBR2. Сделать это проще простого: пересчитаем смещение разделов, расположенных в EBR2, из секторов в байты и поищем соответствие в scatter-файле.

Вот выписка из 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
------------------------------------------------------------------------

Видно, что здесь находится одна запись. Значит работы будет меньше. Итак, смещение 00 94 48 00 это 0х00489400. Пересчитаем


0х00489400*0х200=0х91280000

плюс смещение самого раздела EBR2 и получим


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

Судя по scatter'у, это и есть раздел FAT.
Внесем в его запись изменения. Проще расчет вести прямо в секторах, так меньше возни с переводом значений. USRDATA мы расширили на


0х00600000-0х00300000=0х00300000

секторов, то начало, т.е. смещение FAT, тоже надо переместить:


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

Или в обратном порядке 00 94 78 00.
Результат:
В EBR1 предпоследняя запись примет следующий вид:


        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
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
--------------------------------------------------------

А единственная запись 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 | 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. Все описанные Выше операции свободно выполняют редакторы файлов разметки ScatterEditor и Scatter2Editor.

 



Литература.
1.Master Boot Record. http://en.wikipedia.org/wiki/Master_boot_record.

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что такое scatter-файл?

1.Введение

Разметка памяти, т.е. разбивка на разделы, в устройствах на чипах МТК производится при помощи файла, который называется "scatter file".
Он используется программами-прошивальщиками, т.н. флешерами (от английского "flasher") при прошивке полного образа памяти или отдельных ее частей, называемых разделами.
Структура scatter file содержит описание ВСЕХ существующих разделов памяти, независимо от того, что они будут содержать в работающем устройстве.

 

2.Описание первой версии scatter-файла

Спойлер

 

Существует две версии структуры scatter-файла. Первая используется, например, для чипов MT6577, МТ6589. А вторая - для МТ6572, МТ6592.

Рассмотрим первую версию, используемую в большинстве мобильных устройств.
Полное описание одного раздела памяти представляет собой набор строк следующего вида:


[__NODL_]name offset [length]{}, где
  • __NODL_ - "No download" признак того, что раздел будет пропущен флешером, и для его работы не требуется файл для прошивки. Такой раздел можно вообще исключить из scatter file;
  • name - название раздела (зарезервированный набор буквенно-цифровых символов);
  • offset - смещение раздела от начала памяти в 16-ричном виде, байт;
  • length - длина раздела в 16-ричном виде, байт.

Квадратные скобки в записи означают необязательный параметр, который может быть пропущен.
Чаще всего используется сокращенная запись вида:


name offset{}

 Такое описание разделов памяти предполагает, что:

  • каждый раздел имеет длину до начала следующего, без пропусков и разрывов;
  • между двумя разделами не существует третьего (скрытого).

Для примера приведу типичный scatter-file для МТ6589. Он имеет следующий вид:

Спойлер


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.Описание второй версии scatter-файла

Спойлер

 

Рассмотрим структуру scatter-файла второй версии.
Полное описание каждого раздела памяти представляет собой набор строк вида:

Спойлер


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,

 

где

  • partition_index - индексный номер раздела, например, SYS1;
  • partition_name - имя раздела, например, MBR;
  • file_name - имя файла, содержащего образ для прошивания в разделе, или NONE, если образ не требуется;
  • is_download - признак загружаемости раздела (что-то типа __NODL_);
  • type - тип раздела. Указывает на содержимое раздела. Может принимать следующие значения:
    • EXT4_IMG - раздел содержит часть файловой системы EXT4;
    • NORMAL_ROM - раздел содержит сохраненный образ или отдельный файл;
    • SV5_BL_BIN - раздел содержит "сырой код" (Raw Code) загрузчика, т.е. исполнимый код.
  • linear_start_addr - начальный адрес размещения раздела в файле прошивки, байт;
  • physical_start_addr - начальный адрес размещения раздела в памяти устройства (физический адрес), байт;
  • partition_size - размер раздела, байт;
  • region - размещение раздела. Может принимать следующие значения:
    • EMMC_BOOT_1 - регион (область) загрузчика. Может быть ограничен доступ для пользователя;
    • EMMC_USER - пользовательский регион;
  • storage - HW_STORAGE_EMMC
  • boundary_check - признак необходимости отметки границы раздела (во внутренней БД или PMT);
  • is_reserved - признак необходимости резервного копирования;
  • operation_type - тип операции. Может принимать следующие значения:
    • BINREGION - область "сырого кода";
    • BOOTLOADERS - загрузчик;
    • INVISIBLE - невидимый раздел;
    • PROTECTED - защищенный раздел;
    • RESERVED - зарезервирован;
    • UPDATE - обновляемый раздел.
  • reserve

Пример полного scatter-файла второй версии, приведен в файле "Scatter_v2.txt".

 

Любой флешер использует scatter file только для ПОЛНОЙ разметки памяти.
Если Вы прошиваете один или несколько разделов, то флешер размещение разделов берет из внутренней "базы данных" - файла PMT (Partitions Map Table). Он считывает значение смещения для раздела (физический адрес) и копирует, т.е. "прошивает" образ раздела в память, начиная с этого физического адреса.
Т.к. scatter file содержит перечень и физические адреса размещения всех разделов памяти, то изменив его можно произвести переразметку этой памяти. Для этого необходимо изменить значения смещений необходимых разделов.
Например, в разделе USRDATA располагаются данные программ пользователя: логи работы и ошибок, данные о рекордах игр и т.д. Поэтому этот раздел чаще других переполняется, что приводит к появлению сообщений вида "Память переполнена".
В типовом scatter file он имеет смещение 0x34f80000 и размер


0x74f80000-0x34f80000=0х40000000 (или 1073741824=1Гб).

Увеличим его, например, на 256Мб (268435456). Тогда размер раздела станет


1073741824+268435456=1342177280 (или 0х50000000 в hex).

Т.е. мы добавили в раздел еще 0х10000000 байт. Тогда смещение следующего раздела передвинется на эту же величину:


было - 0х74f80000
стало - 0х84f80000

Если сделать так со смещениями ВСЕХ последующих разделов, то они ВСЕ передвинутся и на эту величину увеличится ОБЩИЙ размер памяти, занимаемой прошивкой. А это недопустимо, т.к.общий размер памяти мобильного устройства величина постоянная. Поэтому нужно уменьшить размер какого-либо последующего раздела. У нас это раздел пользователя (FAT).
Изменить его размер мы не можем, т.к. он расположен в самом конце существующей памяти. Он просто автоматически укоротится.
Казалось бы и все, но укорачивать разделы можно до определенного предела (до "нуля"). Поэтому, если смещение последнего раздела переходит верхнюю границу памяти, то придется откатывать назад все изменения или уменьшать размер "прибавки" раздела.

 


Очень важное замечание: не путайте понятия "размер раздела" памяти и "размер образа", прошиваемого в него. Они связаны только тем, что большой образ НЕВОЗМОЖНО прошить в маленький раздел - он просто не поместится.

 

 

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все мобильные устройства хранят разметку памяти во внутренней базе данных, которая может быть организована по разному. Фирма MediaTek для большого числа своих чипов использует для этого отдельный раздел памяти, который называется PMT (что-то типа Partitions Manager Table).

Так что же такое PMT?

Что такое PMT?

1.Введение

Спойлер

 

Раздел PMT содержит таблицу размещения разделов, так сказать, карту или слепок разметки памяти.

Этот раздел используется загрузчиком и флешерами, например, SP Flash Tool, для заливки (прошивки) образов разделов. Если флешер обнаружит несовпадение параметров заливаемого раздела с таблицей размещения разделов, считанной им из раздела PMT, то процесс загрузки прервется, и Вы получите всем известное сообщение "8038".


Но не надо пугаться, это не сообщение об ошибке, как думают многие, а информационное сообщение, предупреждающее Вас о НЕСОВПАДЕНИИ параметров разделов.

Так разработчики из МТК пытаются ОСТАНОВИТЬ Вас перед возможностью получения неработоспособного устройства ("кирпича"). Удалять это сообщение или как-то обходить - неправильный путь, т.к. "и на старуху бывает проруха" и ВЫ (опытнейший разработчик) тоже можете допустить ошибку, например, в scatter'е, и потерять важную информацию. Другое дело, когда Вы ОСОЗНАННО выполняете действия по изменению разметки памяти.

Именно для этого и необходимо внести изменения не только в scatter, но и в образ раздела PMT.


 

 

2.Структура раздела PMT

Спойлер

 

Образ раздела PMT содержит базовую таблицу размещения разделов. Сразу за ней располагается таблица реального размещения разделов. Каждая из таблиц состоит из:

  • сигнатуры начала таблицы размещения разделов. Для базовой таблицы это строка из следующих символов "1vTP". Для реальной таблицы эта строка имеет вид: "1TPM";
  • самой таблицы разделов, содержащей записи параметров каждого раздела;
  • сигнатуры окончания таблицы. Для базовой таблицы это строка из следующих символов "\х01\х03\х01\х011vTP". Для реальной таблицы эта строка имеет вид: "\х01\х03\х00\х011TPM".

Вот пример PMT-файла:

1.png

Рис. 1. Пример начала файла PMT.

На приведенном рисунке красным цветом отмечена сигнатура начала таблицы размещения разделов, расположенная по смещению 0х0000. Т.к. она видна как строка «1vTP», то это начало базовой таблицы.

2.png

Рис. 2. Пример окончания  базовой таблицы размещения разделов.

На Рис. 2. Пример окончания  базовой таблицы размещения разделов красным цветом выделена сигнатура окончания базовой таблицы размещения разделов, расположенная по смещению 0х07F8. Видно, что следом за ней расположена сигнатура начала реальной таблицы размещения разделов. Она расположена по смещению 0х0800 и равна «1TPM»

Соответственно, начало и конец реальной таблицы размещения разделов приведены ниже:

3.png

Рис. 3. Начало реальной таблицы размещения разделов.

4.png

Рис. 4. Окончание реальной таблицы.

 

 

 

3.Структура таблицы размещения разделов

Спойлер

 

Таблица размещения разделов состоит из записей, содержащих информацию о каждом разделе памяти. Т.е. она полностью описывает разметку памяти мобильного устройства.

Все записи располагаются последовательно и непрерывно, строго следуя одна за одной:

5.png

Рис. 5. Последовательное расположение записей.

На Рис. 5. Последовательное расположение записей для наглядности все разделы отмечены разными цветами: синим - __NODL_EXPDB, зеленым - ANDROID, красным - CACHE, желтым - USRDATA.

Конец каждой таблицы отмечен "пустой" записью, т.е. записью, содержащей код 0х00 во всех полях. На Рис. 2. Пример окончания  базовой таблицы размещения разделов и Рис. 4. Окончание реальной таблицы видно, что после описания раздела __NODL_BMTPOOL и перед сигнатурой окончания базовой таблицы расположена область, заполненная кодом 0х00, т.е. «пустая» запись.

 

 

4.Структура записи таблицы размещения разделов.

Спойлер

 

  Структура записи для большинства мобильных устройств, т.е. для всех 32-разрядных и 64-разрядных, имеющих память типа NAND, состоит из 4 полей и имеет следующий вид:

Таблица 1. Структура записи таблицы размещения разделов
Смещение Длина поля, байт Значение
0х0000 64 (0х40) Имя раздела
0х0040  8 (0х08) Длина раздела
0х0048  8 (0х08) Смещение раздела
0х0050  8 (0х08) Флаги раздела

На рис.2-4 все поля записи параметров раздела выделены разным цветом:

  • синим цветом – имя раздела;
  • зеленым цветом – длина раздела;
  • желтым цветом – смещение раздела;
  • черным цветом выделен резерв.

  Развитие техники внесло свои изменения и в структуру записи о разделах. Для 64-разрядных устройств с памятью типа eMMC было добавлено пятое поле - название региона:


------------------------------------------------------------------
Название    Смещение    Длина поля,    Значение
                   байт
------------------------------------------------------------------
Name          0х0000        64 (0х40)        Имя раздела
Size             0х0040         8 (0х08)        Длина раздела
Part_id        0х0048         8 (0х08)        Название региона
Offset          0х0050         8 (0х08)        Начало раздела
mask_flag   0х0058         8 (0х08)        Флаги
------------------------------------------------------------------

  Скриншот с таблицей для 64-разрядных устройств привести не могу, т.к. ни разу еще не встречал на практике.


 


5. Размещение раздела PMT.
  Для младших устройств линейки МТ65** под PMT выделялся отдельный раздел памяти, который можно было свободно прошить, т.е. изменить его содержимое. К ним относятся, например, устройства на основе МТ6572, МТ6589. Раздел PMT был описан в scatter'е, что и позволяло вносить изменения в разметку, изменив параллельно файлы разметки и содержимое PMT.
  Начиная с МТ6592, этот раздел исчез из scatter'а и его расположение мне неизвестно.Предположительно, он находится в свободном пространстве где-то за userdata. 
 

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Практика работы с GPT

 

1.Просмотр параметров разделов памяти.

Спойлер

 

Давайте пройдемся по реальному файлу, содержащему GPT-таблицу. Я взял файл gpt_main0.bin от Lenovo K910 из прошивки K910_w_SS_S_2_040_0081_131202.qsb. Он содержит главную загрузочную запись MBR и таблицу разделов GPT.

 

1.1.MBR.

Вот как выглядит первый сектор файла. Согласно теории, эти первые 512 байт, т.е. с адреса 0х000 по 0х1FF, занимает MBR:

 

Гл.вид.png

 

Рис.1. Вид начала файла, открытого в Hex-редакторе.

 

Видно, что по адресу 0х1С2 расположен код раздела 0хЕЕ – код раздела GUID Partition Table.
Далее по адресам 0х1С6-0х1С9 расположено поле «Смещение», содержащее значение «01 00 00 00». Учитывая обратный порядок записи, получим смещение раздела – 0х00000001. Т.е. GPT располагается в секторе со смещением 1. А это следующий за MBR сектор, что и видно на рисунке 1, т.к. по адресу 0х200 можно уже заметить сигнатуру GPT.

 

1.2.Заголовок GPT
Рассмотрим hex-код файла далее:

 

Заголовок GPT.png

 

Рис.2. Заголовок GPT

 

Я немного «разукрасил» заголовок, чтобы выделить его поля.
В самом верху справа красным цветом выделен «остаток» предыдущего сектора – сигнатура MBR. Далее мы имеем:

  • с адреса 0х200, как и положено по теории, располагается заголовок  GPT, начинающийся сигнатурой «EFI PART», выделенной бирюзовым цветом;
  • по адресу 0х208 располагается поле «Версия», имеющее значение «00 00 01 00»=0х00010000  и выделенное светло-зеленым цветом;
  • по адресу 0х20С – поле «Размер заголовка», имеющее значение «5С 00 00 00»=0х5С  (92 байта). Оно выделено оранжевым цветом;
  • по адресу 0х210 расположено поле «CRC32 заголовка», имеющее значение «1F 8EBE 09»=0x09BE8E1F и бардовый цвет;
  • за ним по адресу 0х214 следует резервное поле, имеющее нулевое значение;
  • по адресу 0х218 расположено поле «текущий LBA сектор», хранящее номер сектора, где размещается первичная GPT (та, что мы рассматриваем). Оно имеет значение 0х01, как и положено;
  • далее (адрес 0х220) расположено поле «резервный LBA сектор», в котором должен храниться адрес размещения резервной копии заголовка. Мы видим сплошные нули. Вот тебе и теория! Но об этом мы поговорим позже;
  • по адресу 0х228 расположено поле «первый разрешенный для использования LBA сектор», выделенное красным цветом. Оно равно 0х22=34. Именно с этого сектора и будет размещаться первый раздел мобильного устройства, а все место до него зарезервировано под GPT. Владеющие калькулятором или искусством устного счета могут подсчитать, что таблица GPT вместе с MBR занимает с 0 по 33 сектор включительно и имеет размер 34*512=17408 байт. Странно, но именно такова длина файла, хранящего GPT, который мы и разглядываем;
  • по адресу 0х230 расположено поле «последний LBA-сектор, разрешенный для использования», который тоже почему-то «пустой»;
  • по адресу 0х238 расположено поле, содержащее GUIDдиска и выделенное голубым цветом;
  • по адресу 0х248 расположено поле«первый LBA сектор таблицы записей о разделах», указывающее с какого сектора начинаются записи параметров разделов. Оно имеет значение «02» и выделено красным цветом. При дальнейшем рассмотрении Вы увидите, что так оно и есть;
  • 0х250 – содержит число записей о разделах (зеленый цвет), т.е. вся память К910 разбита на 0х18=24 раздела;
  • 0х254 – содержит размер одной записи о разделе в байтах (сиреневый цвет). Как видим 0х80=128 байт;
  • 0х258 – содержит еще одно контрольное поле – «CRC32 таблицы записей о разделах»;
  • 0х25С – с этого адреса и до конца заголовка, т.е. до адреса 0х400, расположен резерв, заполненный нулями.

 

1.3.Таблица описания раздела памяти.

Каждый раздел имеет свою запись в таблице разделов. Одна запись занимает размер в 128 байт, который указан в поле заголовка по адресу 0х254 и имеет следующий вид:

 

Запись о разделе.png

 

Рис.3. Запись параметров раздела в таблице GPT.

Я опять разукрасил картинку:

  • по адресу 0х400 расположено поле «GUID типа раздела»;
  • далее по адресу 0х410 – «GUID раздела»;
  • по адресу 0х420 – поле, содержащее номер первого сектора размещения раздела, т.е. фактически его смещение в памяти;
  • по адресу 0х428 расположен номер последнего сектора раздела. Разность этих двух полей даст нам размер раздела;
  • по адресу 0х430 расположено поле флагов раздела;
  • по адресу 0х438 и до конца записи расположено поле, содержащее метку раздела. Каждый символ занимает два байта, т.к. поле содержит информацию в кодировке UTF-16LE.

С адреса 0х480 располагается запись о следующем разделе.
После описания всех разделов оставшееся место заполняется нулем до конца таблицы разделов, т.е. до размера


(максимальное число разделов=128)*(размер одного раздела=128)=16384 байта. 

Если добавить сюда размер заголовка и размер загрузочной записи, то получим общий размер GPT 16384+512+512=17408 байт или 34 сектора (с нулевого по 33 включительно).

 

 

2.Изменение параметров разделов памяти.

Спойлер

 

Эксперименты по изменению таблицы разделов начнем с описания расчета контрольных сумм, расположенных в заголовке. А уж затем попробуем передвигать разделы, изменяя их длину, или просто удалять их.
При всех экспериментах с разделами нужно помнить, что они расположены в памяти НЕПРЕРЫВНО и БЕЗ РАЗРЫВОВ между ними, т.е. если в каком-то секторе завершается один раздел, то в следующем обязательно начинается следующий.
Чтобы не производить все эти расчеты фирма Lenovo разработала особый механизм, позволяющий все делать автоматически. Об этом и файле, содержащем перечень ВСЕХ разделов памяти, поговорим в самом конце.

 

2.1.Подсчет контрольных сумм заголовка.

Т.к. контрольная сумма заголовка должна «оберегать» весь заголовок, то все его поля должны быть заполнены перед расчетом. Поэтому первой рассчитывается контрольная сумма таблицы разделов.
Для расчета CRC32 всей таблицы разделов нужно взять всю таблицу с первой записи и по последнюю включительно БЕЗ ЗАГОЛОВКА. Высчитаем последний адрес таблицы разделов:


число записей (поле 0х250)*длину одной записи (поле 0х254)+(стартовый адрес таблицы=0х400)=0х18*0х80+0х400=0х1000.

Следовательно, для расчета берем содержимое по адресам с 0х400 по 0х1000. Воспользуемся услугами WinHex-редактора.

  • открываем файл;
  • выделяем все поля указанного диапазона;
  • и выполняем команду «Инструменты->Подсчитать хеш->Выбрать метод расчета», указав на «CRC32 (32bit)»:
  •  

CRC таблицы.png

 

Рис.4. Данные для расчета CRC32 таблицы разделов.

 

Полученный результат вставляем в поле заголовка по адресу 0х258 (Рисунок 2).
Переходим к расчету контрольной суммы всего заголовка.
Для расчета CRC32 заголовка берутся все 92 байта заголовка, только само поле CRC32 заголовка предварительно заполняется нулями:

 

Подсчет CRC заголовка.png

 

Рис.5. Данные для расчета CRC32 заголовка GPT

 

А вот и результат, сравните со значением в заголовке:

CRC заголовка.png

 

Рис.6. Результат расчета.

 

Данные для Подсчет CRC заголовка.png

 

Рис.7. Первоначальное значение из файла по адресу 0х210.

Вся разница только в обратном способе записи…
Итак, с контрольными суммами разобрались. Можно попытаться поменять параметры самих разделов, например, размер.

 

2.2.Изменение размеров разделов памяти.

При выполнении таких работ нужно учитывать несколько правил:

  • Все разделы расположены непрерывно и строго друг за другом.
  • Общий размер памяти равен сумме размеров всех разделов.

Т.к. при изменении длины одного раздела нарушается второе правило, то для восстановления равновесия нужно уменьшить (увеличить) размеры одного или нескольких последующих разделов. Здесь может быть несколько случаев:

  • нужно уменьшить (увеличить) размер предыдущего раздела для смещения его конца и, следовательно, расширения (уменьшения) нашего раздела;
  • уменьшить (увеличить) размер последующего раздела, т.е. сместить его начало, что опять же приведет к увеличению (уменьшению) длины нашего.

Рассмотрим первый случай. Допустим, что необходимо расширить раздел «system» на 100 Мб за счет предыдущего раздела «cache». Это приводит к перемещению нижней границы раздела «system» в сторону начала памяти. Т.е. необходимо выполнить следующие действия:

  • рассчитать новое значение смещения, т.е. положение первого сектора раздела «system» (поле «первый LBA сектор размещения раздела»):

новое значение =старое значение  100Мб.
  • рассчитать новое значение поля «последний LBA сектор размещения раздела» для раздела«cache»:

 


новое значение=старое значение-100Мб;
  • внести изменения в запись таблицы разделов.

Посмотрим, как это выглядит в hex-редакторе на реальном файле, учитывая, что


100 Мб=104857600 (0х6400000) байт или 0х32000 секторов:

Рис.8.png

 

Рис.8. Параметры разделов до изменений

 

Размер раздела «system»:


0х41FFFF-0x120000+1=0x300000 или 1610612736 байт

Нижние границы обоих разделов выделены зеленым цветом («старт» раздела, его начало), а верхние – красным («стоп» раздела, его последний сектор).
Проведем расчеты:

  • для раздела «system» нижняя граница переместится на сектор

0х120000-0х032000=0х0EE000
  • для раздела «cache»имеем

0х11FFFF-0х032000=0х0EDFFF

Записываем новые значения на свои места, не забывая про обратный порядок:

 

Рис.9.png

 

Рис.9. Результаты сдвига нижней границы раздела System.

 

Проверим результаты работы. Длина раздела «system» стала:


0х41FFFF-0x0EE000=0x331FFF

Рассмотрим второй  случай – перемещение верхней границы раздела «system», но уже за счет другого соседа раздела «userdata».Необходимо выполнить следующее:

  • сместить вверх по памяти верхнюю границу («последний LBA сектор размещения раздела») «system»

новое значение =старое значение + 100Мб;
  • сместить вверх нижнюю границу («первый LBA сектор размещения раздела») «userdata»

новое значение =старое значение + 100Мб.

До изменений записи о разделах выглядели так:

 

Рис.10.png

 

Рис.10. Разделы system и userdata

 

Проведем расчеты:

  • для раздела «system» верхняя граница переместится в сектор

0х41FFFF+0х032000=0х451FFF
  • для раздела «userdata» нижняя граница переместится в сектор

0х420000+0х032000=0х452000

Записываем новые значения на свои места, не забывая про обратный порядок:

 

Рис.11.png

 

Рис.11. Разделы после перемещения границы вверх.

 

Проверим результаты работы:


0х451FFF-0x120000+1=0x332000 или 1715470336 байт

Разность составила 104875600байт или 100Мб. Расчеты выполнены правильно!
А теперь можно попробовать и совсем удалить раздел.

 

2.3.Удаление раздела.

«Разрушать» или удалять всегда легче. Считать ничего не требуется. Нужно только решить какому разделу будет отдано освободившееся место.
При удалении раздела верхняя граница предыдущего раздела просто перемещается на место верхней границы удаляемого. Или наоборот, нижняя граница последующего перемещается на место нижней границы удаляемого.
У меня нет под рукой хорошего примера прошивки, у которой можно удалить что-то «лишнее», поэтому используем предыдущий пример и, чисто теоретически конечно, представим, что нужно удалить раздел «system». Вот как выглядела таблица разделов до вмешательства:

 

Рис.12.png

 

Рис.12. Вид таблицы разделов до проведения «экзекуций».

 

Вот параметры разделов до изменений:

  • «cache» первый сектор – 0х0E0000, последний сектор – 0x11FFFF, длина –0х040000 (134217728 байт);
  • «system»первый сектор – 0х120000, последний сектор – 0x41FFFF, длина – 0х300000 (1610612736 байт=1,5Гб);
  • «userdata»первый сектор – 0х420000, последний сектор – 0x71FFFF, длина – 0х300000 (1610612736 байт=1,5Гб).

При удалении раздела «system» и расширении «cache»  это будет означать, что значение из поля «последний LBA сектор размещения раздела» «cache» примет значение из поля «последний LBA сектор размещения раздела» «system», а запись о разделе «system» будет полностью удалена из таблицы разделов:

 

Рис.13.png

 

Рис.13. Вот как выглядит таблица разделов после удаления System и расширения Cache

 

Видно, что данные о разделе «system» полностью исчезли из таблицы, поле «последний LBA сектор размещения раздела» предыдущего раздела «cache» получило новое значение, а параметры последующего раздела «userdata» остались без изменений. Проверим параметры разделов:

  • «cache»первый сектор – 0х0E0000, последний сектор – 0x41FFFF, длина – 0х340000 (1744830464 байт). Т.е. этот раздел УВЕЛИЧИЛСЯ на размер удаленного раздела;
  • «userdata»первый сектор – 0х420000, последний сектор – 0x71FFFF, длина – 0х300000 (1610612736 байт=1,5Гб). Этот раздел ОСТАЛСЯ без изменений

Если за счет удаления «system» расширить «userdata», то тогда значение поля «первый LBA сектор размещения раздела»«userdata» примет значение из поля «первый LBA сектор размещения раздела» удаляемого «system»:

 

Рис.14.png

 

Рис.14. Вот как выглядит таблица разделов после удаления раздела System

 

Видно, что на этот раз изменилось только поле «первый LBA сектор размещения раздела»  последующего раздела «userdata». Проверим параметры разделов:

  • «cache»первый сектор – 0х0E0000, последний сектор – 0x11FFFF, длина – 0х040000 (134217728 байт);. Т.е. этот раздел ОСТАЛСЯ без изменений;
  • «userdata»первый сектор – 0х120000, последний сектор – 0x71FFFF, длина – 0х600000 (3221225472 байт=3Гб). Этот раздел УВЕЛИЧИЛСЯ на размер удаленного раздела.

 

  •  
2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После переразметки с ROW 4 GB НА CN телефон вообще не врубается хотя все прошло успешно.И когда подключаю к компу он подписывается как Unknow Divise.Что делать назад не перепрошивается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обновил версию редактора Scatter2Editor в связи с ошибкой формирования scatter-файла из-за нового параметра разделов.

Версию Scatter2Editor_v207 забираем в первом посте.

Дополнил пост по работе с GPT-таблицей разметки.

Отредактировал vin2809
3 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 vin2809

Благодарю за труды. Шикарный мануал.

Но прошу дополнительно осветить вопрос возможности замены раздела с фаловой системой FAT на EXT4. Не хочется иметь, во-первых, SD-CARD с размером блока более 4К. А во-вторых хочется иметь возможность делать на SD-ешке жесткие и символические ссылки.

 

И еще, пожалуйста. Верно ли что возможность применения того или иного типа файловой системы (mbr, gpt) обусловлена моделью используемого устройства?
То есть, на Lenovo K910 можно делать разбивку используя gpt, а, например, на Lenovo S750 только mbr+embr?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 vin2809

... прошу дополнительно осветить вопрос возможности замены раздела с фаловой системой FAT на EXT4...

Если Вы не меняетепараметры каких-либо разделов (размер, смещение), то этот вопрос не имеет отношения к разметке. Т.е. mbr или gpt абсолютно все равно, что ВЫ и где размещаете в памяти. Меняется только тип раздела в mbr или GUID в gpt.

А вот как заменить тип файловой системы это вопрос к ромоделам. Если вкратце, то смотрите тему по замене внутренней памяти на внешнюю или наоборот.

По второму Вашему вопросу могу сказать, что это заблуждение.. От модели используемого устройства зависит только наличие поддержки данной разметки в ядре Вашего аппарата. По Lenovo у меня статистики еще нет, а по МТК могу сказать, что аппараты, созданные на одном и том же процессоре могут иметь РАЗНЫЕ типы разметки, как MBR+EBR, так и GPT.

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

классный материал! спасибо за труд!

а можно осветить инфу о том какой блок чему соответствует и какие они бывают? например, nvram - параметры работы железа, usrdata - пользовательские данные. а остальные? preloader, boot и т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Процесс переразметки памяти для устройств на базе mt6595,mt6732,mt6752,mt6795

 

А можно узнать как дела с этой темой? Купил телефон на MT6732 c 8 Gb ROM. Под /data выделен 1,1 Gb, нужна переразметка, без нее совсем тоскливо((((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А можно узнать как дела с этой темой?

К сожалению, ввиду отсутствия аппаратов на данной платформе на руках, у меня нет никаких экспериментальных данных по переразметке на 6732 - есть только теория. Мы работаем над этим вопросом.

Отредактировал SevenMaxs
1 пользователю понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу