Разметка внутренней памяти андроид

Мобильные устройства изнутри. Изменение разметки памяти планшета

Изменение разметки памяти планшета

1.Введение.

Как-то попался мне в руки планшет YB1-X90L от Lenovo, выполненный на чипе от Intel:

Рис.1. Планшет YB1-X90

Я попытался выполнить над ним некоторые, в принципе, я бы сказал, стандартные модификации для мобильного устройства (МУ), попавшего в руки разработчика:

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

Все пункты плана были успешно выполнены. Одним из незапланированных пунктов стало исследование раздела разметки, который я назвал GPT-разделом Intel-типа.

Тем не менее, на многих сайтах очень популярна тема по изменению разметки МУ, выполненной по GPT-схеме, тем более, если это GPT-раздел Intel-типа. Получается, что этот вопрос, несмотря на теоретические выкладки, так и остается до сих пор не закрытым… Вот я и решил воспользоваться моментом, что у меня на руках имеется свободное МУ, которое можно немного «помучать», и провести натурные испытания своих теоретических познаний. Короче, я задумал изменить разметку памяти…

Перед началом выполнения работ я снял все, что можно по существующей разметке: файлы partitions, dev/block/by-name/ и образ GPT-раздела.

  • планшет, имеющий стоковую прошивку;
  • образ GPT-раздела Intel-типа;
  • файл partitions, снятый с реально работающего МУ.

Что надо: для своих экспериментов мне понадобился отдельный раздел памяти размером 512Мб.

Соответственно, для его размещения нужно где-то в памяти планшета найти эти мегабайты…

2.Планирование изменений разметки памяти.

Давайте внимательно рассмотрим файл partitions:

«Кандидатами» на «урезание» из-за своих размеров могут быть, например, три раздела: android_country (mmcblk0p11), android_data (mmcblk0p14) и android_system (mmcblk0p13). Они, как правило, имеют размер раздела гораздо больше, чем образ, заливаемый в них, что и позволило бы мне беспрепятственно выделить память под новый раздел. Однако не забывайте, что изменение размеров разделов, соответственно и смещений расположения разделов, потребует возни с восстановлением данных этих разделов, т.е. их резервного сохранения и последующего восстановления… Поэтому проще «откусить» свободное место от раздела data, т.к. он расположен последним. Это позволит нам избежать выполнения пересчета размеров затронутых разделов памяти и восстанавливать придется только один раздел.

Таким образом, нам нужно только добавить новый раздел между разделом android_system и разделом android_data. Этот раздел назовем win_tools, а размер зададим 512Мб. Все параметры нового раздела сведены в таблицу:

3.Внесение изменений в прошивку планшета.

Нам повезло, т.к. если бы GPT-раздел был стандартным, то пришлось бы изменять оба раздела: основной и резервный. А так только меняем один GPT-раздел Intel-типа. Приступаем…

3.1.Внесение изменений в GPT-файл.

Сначала внесем изменения непосредственно в GPT-файл, хранящий образ GPT-раздела прошивки планшета. Для этого берем из стоковой прошивки файл gpt.bin и:

    Загружаем его в hex-редактор:

Находим запись о разделе android_system и копируем ее полностью в качестве шаблона нового раздела:

Переходим на начало записи о следующем разделе, т.е. android_data, и вставляем шаблон:

Новая запись должна содержать описание нового раздела, возьмем значения параметров описания из табл.1 и заполним поля Size (было 0x00000F00, станет 0x00000200), Label (было android_system, станет win_tools) нового раздела. Все внесенные изменения отмечены красным цветом на рисунке:

Переходим на заголовок GPT-раздела и внесем изменения в поле Number (Число записей о разделах) (смещение 0х08 заголовка). В поле было число 0х000E (14 разделов), мы запишем туда число 0x000F (станет 15 разделов), на рисунке ниже оно выделено красным цветом:

  • Сохраняем обновленный файл GPT-раздела Intel-типа.
  • Все, раздел разметки изменили, теперь нужно его поместить в планшет.

    3.2.Прошивка GPT-файла в МУ.

    Т.к. мы решили переместить начало раздела android_data, то, чтобы потом найти данные там сохраненные, выполним backup раздела. После этого можно смело менять разметку памяти…

    Прошивка любых образов разделов, снятие/установка блокировки загрузчика и т.п. действия выполняются при помощи флешера фирмы Intel PhoneFlashTools. Причем использовать нужно тот, версия которого поддерживает Ваше МУ. Исследуемый планшет нужно «препарировать» версией 5.3.2.0. Дополнительным условием для успешного проведения операции является наличие json-файла, управляющего процессом выполнения. С версией флешера разобраться легко, а вот json_файл пришлось писать самому, т.к. изменять разметку, похоже, еще никто не пробовал.

    ВНИМАНИЕ! Перед выполнением любых работ по изменению разметки памяти ОБЯЗАТЕЛЬНО выполните резервное копирование всех разделов памяти.

    Дело в том, что переразметка физически затрагивает только один раздел — раздел разметки. Все Ваши данные, система, IMEI сохраняются на прежних местах. Только МЕНЯЮТСЯ указатели на эти места, которые и хранятся в разделе разметки. Это приводит к тому, что Вы средствами МУ (операционной системой) просто не сможете попасть в места хранения информации.

    Читайте также:  Как заменить android webview

    4.Проверка результатов проделанной работы.

    После выполнения работ я снял всю информацию по новой разметке: файлы partitions и образ нового GPT-раздела.

    Посмотрим содержимое partitions:

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

    Видно, что раздел mmcblk0p14 размером 24986624 переместился на строчку ниже, уменьшился до размера 24462336 и стал теперь разделом mmcblk0p15, а на его месте появился новый раздел mmcblk0p14 размером 524288.

    Ну и сравним содержимое образов GPT-разделов до и после переразметки. Вот заголовок стокового GPT-раздела:

    Вот записи о промежутке разделов system — data этого же образа:

    А вот заголовок GPT-раздела после переразметки:

    Вот записи о том же промежутке разделов system — data GPT-раздела после переразметки:

    Все говорит за то, что раздел действительно существует, кстати, а вот список разделов, снятый из папки /dev/block/by-name при помощи Total Commander:


    Рис.9. Список образов разделов МУ

    5.Заключение.

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

    Гораздо больше проблем возникает при занесении этой разметки внутрь МУ, хотя это уже материал для другой публикации…

    Источник

    Разметка внутренней памяти андроид

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

    В этой теме будут затронуты следующие вопросы:

    • строение файлов разметки памяти, таких как scatter, MBR, EBR, GPT, EFI, parameter и др.;
    • предложены средства (приложения) для изменения разметки памяти;
    • даны практические рекомендации по осуществлению операций по переразбивке (переразметке) памяти мобильных устройств.

    Для начала стоит начать с материала под спойлером «Полезная информация«, а затем, наполнившись знаниями, приступить и к практике, используя приложения, представленные ниже:

    Требования:

    • операционная система Windows 7 или выше;
    • установленный пакет .NET 4.0.

    Возможности:

    • позволяет изменять размер ЛЮБОГО раздела памяти с автоматическим пересчетом параметров всех разделов;
    • позволяет удалять любой раздел полностью;
    • восстанавливать PMT-файл по имеющемуся scatter-файлу;
    • восстанавливать scatter-файл по имеющемуся PMT-файлу;
    • автоматически формирует файлы разметки памяти (scatter, MBR+EBR);
    • устанавливает верхнюю границу памяти 3 способами ;
    • размеры памяти привязаны к размеру блока, размер которого можно выбрать ;
    • работает с нестандартными scatter-файлами;
    • мультиязычность. Поддерживается два языка: русский и английский.

    Свежая версия
    Архив содержит папку с ресурсами русского языка, распаковать ВСЮ структуру вместе.
    ScatterEditor_v1.06.zip ( 43.32 КБ )

    Инструкция
    Инструкция пользователя ScatterEditor_v1.06.zip ( 1.36 МБ )

    Требования:

    • операционная система Windows 7 или выше;
    • установленный пакет .NET 4.0.

    Возможности:

    • поддерживает файлы новой структуры;
    • позволяет изменять размер ЛЮБОГО раздела памяти с автоматическим пересчетом параметров всех разделов;
    • позволяет удалять разделы;
    • автоматически формирует файлы разметки памяти (scatter, MBR+EBR);
    • правильно устанавливает верхнюю границу памяти, которая просматривается через свойства аппарата;
    • мультиязычность. Поддерживается два языка: русский и английский.

    Свежая версия
    Архив содержит папку с ресурсами русского языка, распаковать ВСЮ структуру вместе.
    Scatter2Editor_v207.7z ( 34.77 КБ )

    Инструкция в pdf формате
    Инструкция пользователя Scatter2Editor_v2.03.zip ( 1011.1 КБ )

    Требования

    • операционная система Windows 7 или выше;
    • установленный пакет .NET 4.0.

    Возможности

    • позволяет редактировать размер и флаг ЛЮБОГО раздела;
    • позволяет изменять параметры командной строки запуска;
    • мультиязычная версия;

    Свежая версия
    RK_ParamEd_v1.01.rar ( 20.43 КБ )

    Инструкция пользователя
    RK_ParamEd_1.01. Users manual.rar ( 990.79 КБ )

    • PartitionsA23 — разметка разделов на процессорах AllWinner — для чипов А23 и А33, A31s (возможно подойдёт и для других чипов)
    Читайте также:  Android recyclerview long click listener

    Приложение для обработки файлов разметки схем DOS (MBR+EBR, partition.bin и т.п.) и GUID (файл GPT, EFI и т.п.).
    Требования

    • операционная система Windows 7 или выше;
    • установленный пакет .NET 4.0.

    Свежая версия
    PartitionsEditor_1.02.rar ( 122.15 КБ )

    Инструкция пользователя
    Скоро будет.

    В теме нет куратора. По вопросам наполнения шапки обращайтесь к модераторам раздела через кнопку под сообщениями, на которые необходимо добавить ссылки.
    Если в теме есть пользователь, желающий стать Куратором и соответствующий Требованиям для кандидатов, он может подать заявку в теме Хочу стать Куратором (предварительно изучив шапку темы и все материалы для кураторов).

    Сообщение отредактировал derak1129 — 12.10.21, 06:08

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

    Сообщение отредактировал SevenMaxs — 15.09.14, 17:14

    ps: Могу помочь в создании топиков (в стиле Android update-script, лучшую инфу с форума собрал в одном месте).

    Prince_Saint
    Спасибо за информацию, но Вы не поняли замысел. Я не буду собирать в ОДНО место известные ссылки по тематике разметки, а ПРЕДЛАГАЮ готовые решения для работы. И все это буду подкреплять легкой теорией.
    Беда многих перечисленных Вами ссылок в том, что они описывают решение КОНКРЕТНОЙ задачи, не описывая основ. Это приводит к тому, что при бездумном повторении этих решений, большая часть пользователей получает «кирпич» из своего любимца.
    Чтобы не быть голословным начнем с описания файла MBR

    Что такое MBR-файл.

    Введение.
    Для работы операционной системы (ОС) необходимо создать таблицу размещения ее частей. Эта таблица находится в MBR (Master Boot Record — главная загрузочная запись), которая физически располагается в начале памяти.
    MBR содержит саму таблицу размещения разделов, сигнатуру файла (т.е. признак Boot Record) и исполнимый код, используемый некоторыми ОС для загрузки.

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

    MBR имеет размер 512 байт, т.е. один физический сектор и имеет следующую структуру:

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

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

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

    0х00600000
    + 0х00080000 (0х400*0х200=0х00080000)
    —————
    0х00680000

    Код типа раздела описывает его содержимое. Так, если раздел не содержит информации, т.е. пуст, то его код устанавливается в 0х00.
    Если разделов больше 4 и в одну таблицу MBR они не помещаются, то заводится дополнительная таблица — расширительная. Она называется EBR1 (Extended Boot Record). Код такого раздела 0х05. Коды часто используемых разделов приведены в таблице.
    Раздел, содержащий EBR1 имеет точно такую же структуру, только отсутствует исполнимый код. Если количество разделов не помещается и в дополнительную таблицу, то одна из записей будет содержать описание следующей таблицы, имеющей название EBR2. И так далее по мере надобности.

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

    В связи с большим объемом материала примеры я решил вынести в отдельный пост.

    Сообщение отредактировал vin2809 — 12.02.14, 20:39

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

    Строение scatter file.
    Существует две версии структуры scatter-файла. Рассмотрим первую версию, используемую в большинстве мобильных устройств на чипах MTхх.
    Полное описание раздела памяти представляет собой набор строк вида:

    [__NODL_]name offset [length]
    <
    >, где

    • __NODL_ — «No download» признак того, что раздел будет пропущен флешером, и для его работы не требуется файл для прошивки. Такой раздел можно вообще исключить из scatter file;
    • name — название раздела;
    • offset — смещение раздела от начала памяти в 16-ричном виде, байт;
    • length — длина раздела в 16-ричном виде, байт.

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

    • — 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.
    Любой флешер использует 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).
    Изменить его размер мы не можем, т.к. он расположен до конца существующей памяти. Он просто автоматически укоротится.
    Казалось бы и все, но укорачивать разделы можно до определенного предела (до «нуля»). Поэтому, если смещение последнего раздела переходит верхнюю границу памяти, то придется откатывать назад все изменения или уменьшать размер «прибавки» раздела.

    Пример scatter-файла
    Scatter_v2.rar ( 1 КБ )

    Сообщение отредактировал vin2809 — 27.02.14, 15:26

    Источник

    Читайте также:  Имитатор android для windows 10
    Оцените статью