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



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:

major minor  #blocks  name

 179        0   30535680 mmcblk0
 179        1     102400 mmcblk0p1
 179        2     102400 mmcblk0p2
 179        3      30720 mmcblk0p3
 179        4      30720 mmcblk0p4
 179        5       1024 mmcblk0p5
 179        6      16384 mmcblk0p6
 179        7       1024 mmcblk0p7
 179        8       1024 mmcblk0p8
 179        9       8192 mmcblk0p9
 179       10      10240 mmcblk0p10
 179       11    1048576 mmcblk0p11
 179       12     262144 mmcblk0p12
 179       13    3932160 mmcblk0p13
 179       14   24986624 mmcblk0p14
 179       48       4096 mmcblk0rpmb
 179       32       4096 mmcblk0boot1
 179       16       4096 mmcblk0boot0
 179       64    1927168 mmcblk1
 179       65    1927160 mmcblk1p1

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

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

Табл.1.Параметры нового раздела
 ====================================================
|  №  | Смещение |      Имя      | Значение поля     |
| п/п |   поля   |      поля     |                   |
|====================================================|
|  1  |   0x00   | Size          | 0x200             |
|  2  |   0x04   | Label         | win_tools         |
|  3  |   0x4C   | GuidType      | Оставим прежний   |
|  4  |   0x5C   | GuidPartition | Оставим прежний   |
 ====================================================

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


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

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


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

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

    Рис.2. Файл GPT-раздела Intel-типа

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

    Рис.3. Запись о разделе system

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

    Рис.4. Добавление записи о новом разделе

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

    Рис.5. Заполнение полей записи о новом разделе

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

    Рис.6. Новое число записей в заголовке GPT-раздела

  6. Сохраняем обновленный файл GPT-раздела Intel-типа.

Все, раздел разметки изменили, теперь нужно его поместить в планшет.

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


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

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

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

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

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


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

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

major minor  #blocks  name

   7        0      65536 loop0
 179        0   30535680 mmcblk0
 179        1     102400 mmcblk0p1
 179        2     102400 mmcblk0p2
 179        3      30720 mmcblk0p3
 179        4      30720 mmcblk0p4
 179        5       1024 mmcblk0p5
 179        6      16384 mmcblk0p6
 179        7       1024 mmcblk0p7
 179        8       1024 mmcblk0p8
 179        9       8192 mmcblk0p9
 179       10      10240 mmcblk0p10
 179       11    1048576 mmcblk0p11
 179       12     262144 mmcblk0p12
 179       13    3932160 mmcblk0p13
 179       14     524288 mmcblk0p14
 179       15   24462336 mmcblk0p15
 179       48       4096 mmcblk0rpmb
 179       32       4096 mmcblk0boot1
 179       16       4096 mmcblk0boot0
 179       64    1927168 mmcblk1
 179       65    1927160 mmcblk1p1

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

 ===========================================================================
|                Было                 |                Стало                |
|=====================================|=====================================|
|major  minor   #blocks   name        |major  minor   #blocks   name        |
|=====================================|=====================================|
| 179    13     3932160   mmcblk0p13  | 179    13     3932160   mmcblk0p13  |
| 179    14    24986624   mmcblk0p14  | 179    14      524288   mmcblk0p14  |
| 179    48        4096   mmcblk0rpmb | 179    15    24462336   mmcblk0p15  |
|                                     | 179    48        4096   mmcblk0rpmb |
 ===========================================================================

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

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

Рис.7а. Заголовок стокового образа GPT-раздела


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

Рис.7б. Записи о разделах стокового образа GPT-раздела


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

Рис.8а. Заголовок нового GPT-раздела


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

Рис.8б. Записи о разделах нового образа GPT-раздела


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


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

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


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

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

6.Источники информации.


1.Мобильные устройства изнутри. Что такое GPT?
2.Стоковая прошивка YB1-X90L.
3.Строение GPT-раздела.
4.«Что такое GPT?»

Комментарии (0)