Изменение разметки памяти планшета
ОГЛАВЛЕНИЕ
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 и:
- Загружаем его в hex-редактор:
Рис.2. Файл GPT-раздела Intel-типа
- Находим запись о разделе android_system и копируем ее полностью в качестве шаблона нового раздела:
Рис.3. Запись о разделе system
- Переходим на начало записи о следующем разделе, т.е. android_data, и вставляем шаблон:
Рис.4. Добавление записи о новом разделе
- Новая запись должна содержать описание нового раздела, возьмем значения параметров описания из табл.1 и заполним поля Size (было 0x00000F00, станет 0x00000200), Label (было android_system, станет win_tools) нового раздела. Все внесенные изменения отмечены красным цветом на рисунке:
Рис.5. Заполнение полей записи о новом разделе
- Переходим на заголовок GPT-раздела и внесем изменения в поле Number (Число записей о разделах) (смещение 0х08 заголовка). В поле было число 0х000E (14 разделов), мы запишем туда число 0x000F (станет 15 разделов), на рисунке ниже оно выделено красным цветом:
Рис.6. Новое число записей в заголовке GPT-раздела
- Сохраняем обновленный файл 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?»