Мобильные устройства изнутри. Изменение разметки памяти планшета
Время прочтения
6 мин
Просмотры 10K
Изменение разметки памяти планшета
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?»
Инструкция по увеличению, уменьшению и восстановлению внутренней памяти и USERDATA — Пример Для Аппарата 1/4.
1.
Перезагружаемся в рековери.
Размонтируем все что есть: twrp > монтирование
> отключаем все.
Далее в Расширенные > Терминал
. На текущей директории Выбрать(Select)
. Попадаем в командную строку.
Смотрим информацию по разделам командой (0 — ноль):
parted /dev/block/mmcblk0 unit MB print
После команды, появится таблица и идем в самый низ, находим цифры 26 и 27 . 26 раздел с именем userdata
, если вы запароли только внутренню память, то за это отвечает 27 раздел, его может не быть вообще или быть, но без метки 'grow'
, если просто нет метки, то из-за этого внутренняя память может не монтироваться (для этого нужно ввести команду: parted /dev/block/mmcblk0 name 27 'grow'
и перезагрузиться рековери и выбрать внутреннюю память в разделе инсталл,после перезагрузки она определится).
2. Удаление разделов
Перед удалением разделов, посмотрите начальные значения в мегабайтах для 26 и 27 разделов . Они указаны как данные с которых берется начало ,например: 1347 3959 — первое значение, начало — в мегабайтах, а второе конец. Так как у меня аппарат 1/4, то поэтому у меня конец в 3959 — что равно 4гб общей памяти. У меня был только 26 раздел, из — за чего и пропала внутренняя память, а 27 не было, он пропал. Поэтому я решил делать переразметку.
Удаление разделов (это необратимые действия. После них разделы для системы будут потеряны):
Вводим команды:
parted /dev/block/mmcblk0 rm 26
parted /dev/block/mmcblk0 rm 27
Все разделов нет. Они удалены.
Делаем проверку таблицы снова и для этого вводим команду:
parted /dev/block/mmcblk0 unit MB print
В таблице должно бить 25 наименования после удаления, то есть последняя цифра в нумераци должна быть 25.
3. Создаем раздел userdata
(внутренняя память)
Вводим начальные и конечные данным в мегабайтах. Если хотите добавить больше места на внутренню память для программ и музыки, например, у меня раздел 26 начинался на 1347, а конечный я указал 2000(мегабайт). Таким образом, 27 раздел нужо будет записывать с конца 26. То есть 27 -тот где будут проги и музыка ,будет начинаться с 2000 и заканчиваться 3959. То есть для своих данных я освободил 1.8 гб.
Команда для создания 26 раздела — UserData:
parted /dev/block/mmcblk0 mkpartfs primary ext2 1347 2000
Цифры, вписываете свои-из своей таблицы,которые нужно было переписать на листик или в блокнот на комп.
Выдаем имя новому разделу
parted /dev/block/mmcblk0 name 26 'userdata'
Проверяем разделы после выполнения:
parted /dev/block/mmcblk0 unit MB print
Должен появиться 26 ой раздел в ext2 c конечным разделом — в моем примере конечный обьем 2000мб. Если появился то идем дальше.
4. Создаем раздел для данных (внешняя память)
Здесь мы создаем 27 раздел — для данных, музы и т д.
Команда создания почти такая же что и в предыдущем шаге. Вместо 100% можно указать конечный размер 3959 в мегабайтах.
parted /dev/block/mmcblk0 mkpartfs primary fat32 2000 100%
Далее присваиваем имя или имя для 27 раздела, чтобы оно отображался как внутрення память для программ и монтировался в компьютере.
parted /dev/block/mmcblk0 name 27 'grow'
Проверяем разделы после выполнения:
parted /dev/block/mmcblk0 unit MB print
Должен появиться раздел 27 с вашими введенными данными. М моем случае, он начинается на 2000мб и заканчивается на 3959мб.
5.
После этого или делаем перезагрузку в рековери снова,чтобы обновить данные и ставим прошивку или же ставим ее сразу. Если Интернал Сторедж-Врунтренняя память для программ и ваших данных не отображается, проверьте есть ли в 27 разделе метка grow
, у 26 раздела это метка userdata
. Если у 27 раздела нет метки, делаем ее так:
parted /dev/block/mmcblk0 name 27 'grow'
Потом перезагружаемся в рековери, выбираем внутреннюю память, если до этого грузились с юсб или сд карты.
6.
Если после всего все работает ,но внутренней памяти нет-для программ, игр и т д. Тогда проделайте еще раз:
parted /dev/block/mmcblk0 rm 27
parted /dev/block/mmcblk0 mkpartfs primary fat32 2000 100%
Внимание,начальные и конечные данные указывайте свои,вместо конечных данных, можно ставить просто 100%
Потом перезагружаемся снова в рековери,выбираем раздел интернал сторедж и вместо нуля при выборе, там поменяются данные на ваши, которые вы указали при переразметки.
Ссылка на оригинальный пост 4pda
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:
Рис.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-код файла далее:
Рис.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 и имеет следующий вид:
Рис.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)»:
Рис.4. Данные для расчета CRC32 таблицы разделов.
Полученный результат вставляем в поле заголовка по адресу 0х258 (Рисунок 2).
Переходим к расчету контрольной суммы всего заголовка.
Для расчета CRC32 заголовка берутся все 92 байта заголовка, только само поле CRC32 заголовка предварительно заполняется нулями:
Рис.5. Данные для расчета CRC32 заголовка GPT
А вот и результат, сравните со значением в заголовке:
Рис.6. Результат расчета.
Рис.7. Первоначальное значение из файла по адресу 0х210.
Вся разница только в обратном способе записи…
Итак, с контрольными суммами разобрались. Можно попытаться поменять параметры самих разделов, например, размер.
2.2.Изменение размеров разделов памяти.
При выполнении таких работ нужно учитывать несколько правил:
- Все разделы расположены непрерывно и строго друг за другом.
- Общий размер памяти равен сумме размеров всех разделов.
Т.к. при изменении длины одного раздела нарушается второе правило, то для восстановления равновесия нужно уменьшить (увеличить) размеры одного или нескольких последующих разделов. Здесь может быть несколько случаев:
- нужно уменьшить (увеличить) размер предыдущего раздела для смещения его конца и, следовательно, расширения (уменьшения) нашего раздела;
- уменьшить (увеличить) размер последующего раздела, т.е. сместить его начало, что опять же приведет к увеличению (уменьшению) длины нашего.
Рассмотрим первый случай. Допустим, что необходимо расширить раздел «system» на 100 Мб за счет предыдущего раздела «cache». Это приводит к перемещению нижней границы раздела «system» в сторону начала памяти. Т.е. необходимо выполнить следующие действия:
- рассчитать новое значение смещения, т.е. положение первого сектора раздела «system» (поле «первый LBA сектор размещения раздела»):
новое значение =старое значение – 100Мб.
- рассчитать новое значение поля «последний LBA сектор размещения раздела» для раздела«cache»:
новое значение=старое значение-100Мб;
- внести изменения в запись таблицы разделов.
Посмотрим, как это выглядит в hex-редакторе на реальном файле, учитывая, что
100 Мб=104857600 (0х6400000) байт или 0х32000 секторов:
Рис.8. Параметры разделов до изменений
Размер раздела «system»:
0х41FFFF-0x120000+1=0x300000 или 1610612736 байт
Нижние границы обоих разделов выделены зеленым цветом («старт» раздела, его начало), а верхние – красным («стоп» раздела, его последний сектор).
Проведем расчеты:
- для раздела «system» нижняя граница переместится на сектор
0х120000-0х032000=0х0EE000
- для раздела «cache»имеем
0х11FFFF-0х032000=0х0EDFFF
Записываем новые значения на свои места, не забывая про обратный порядок:
Рис.9. Результаты сдвига нижней границы раздела System.
Проверим результаты работы. Длина раздела «system» стала:
0х41FFFF-0x0EE000=0x331FFF
Рассмотрим второй случай – перемещение верхней границы раздела «system», но уже за счет другого соседа раздела «userdata».Необходимо выполнить следующее:
- сместить вверх по памяти верхнюю границу («последний LBA сектор размещения раздела») «system»
новое значение =старое значение + 100Мб;
- сместить вверх нижнюю границу («первый LBA сектор размещения раздела») «userdata»
новое значение =старое значение + 100Мб.
До изменений записи о разделах выглядели так:
Рис.10. Разделы system и userdata
Проведем расчеты:
- для раздела «system» верхняя граница переместится в сектор
0х41FFFF+0х032000=0х451FFF
- для раздела «userdata» нижняя граница переместится в сектор
0х420000+0х032000=0х452000
Записываем новые значения на свои места, не забывая про обратный порядок:
Рис.11. Разделы после перемещения границы вверх.
Проверим результаты работы:
0х451FFF-0x120000+1=0x332000 или 1715470336 байт
Разность составила 104875600байт или 100Мб. Расчеты выполнены правильно!
А теперь можно попробовать и совсем удалить раздел.
2.3.Удаление раздела.
«Разрушать» или удалять всегда легче. Считать ничего не требуется. Нужно только решить какому разделу будет отдано освободившееся место.
При удалении раздела верхняя граница предыдущего раздела просто перемещается на место верхней границы удаляемого. Или наоборот, нижняя граница последующего перемещается на место нижней границы удаляемого.
У меня нет под рукой хорошего примера прошивки, у которой можно удалить что-то «лишнее», поэтому используем предыдущий пример и, чисто теоретически конечно, представим, что нужно удалить раздел «system». Вот как выглядела таблица разделов до вмешательства:
Рис.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. Вот как выглядит таблица разделов после удаления 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. Вот как выглядит таблица разделов после удаления раздела System
Видно, что на этот раз изменилось только поле «первый LBA сектор размещения раздела» последующего раздела «userdata». Проверим параметры разделов:
- «cache»первый сектор – 0х0E0000, последний сектор – 0x11FFFF, длина – 0х040000 (134217728 байт);. Т.е. этот раздел ОСТАЛСЯ без изменений;
- «userdata»первый сектор – 0х120000, последний сектор – 0x71FFFF, длина – 0х600000 (3221225472 байт=3Гб). Этот раздел УВЕЛИЧИЛСЯ на размер удаленного раздела.
В этом руководстве мы покажем вам шаги по изменению размера системного раздела, чтобы вы могли установить GSI ROM. Одним из самых больших преимуществ экосистемы с открытым исходным кодом, такой как Android, является возможность прошивать индивидуальную прошивку. Перепрошивка ПЗУ изменяет внешний вид ОС, добавляет множество новых функций и дает вашему устройству право на получение последних обновлений ОС, даже если ваш OEM-производитель больше не поддерживает его. Тем не менее, есть еще несколько устройств, которые не имеют приличного набора пользовательских ПЗУ.
Для них универсальный образ системы является их спасителем. Эти GSI доступны для всех популярных пользовательских ПЗУ, и вам просто нужно прошить файл system.img. Тем не менее, оказывается, что для некоторых это легче сказать, чем сделать. Несколько пользователей выразили обеспокоенность тем, что размер ПЗУ GSI, который они планируют прошить, намного больше, чем может вместить их системный раздел. Например, в случае с Motorola Edge 20 Pro его системный раздел составляет всего около 1 ГБ, тогда как GSI намного больше.
С другой стороны, раздел продукта размером около 2,7 ГБ даже не требуется для GSI. Таким образом, мы удалили все содержимое раздела продукта и установили его размер равным 0. В результате системный раздел теперь может использовать эти свободные 2,7 ГБ пространства, когда выполняется перепрошивка GSI. И в этом руководстве мы покажем вам, как это сделать. Ниже приведены шаги по изменению размера системного раздела вашего устройства, чтобы вы могли установить предпочтительное ПЗУ GSI. Следуйте вместе.
Описанный ниже процесс чрезвычайно опасен и может привести к поломке вашего устройства, если он не будет выполнен правильно. Более того, на данный момент этот процесс опробован только на нескольких устройствах Motorola. Ваш пробег может отличаться в зависимости от других устройств. Droidwin и его участники не будут нести ответственность в случае термоядерной войны, если ваш будильник не разбудит вас, или если что-то случится с вашим устройством и данными, выполнив следующие шаги.
ШАГ 1. Установите Android SDK
Для начала установите Android SDK Platform Tools на свой компьютер. Это официальный бинарный файл ADB и Fastboot, предоставленный Google, и единственный рекомендуемый. Поэтому загрузите его, а затем распакуйте в любое удобное место на вашем ПК. Это даст вам папку platform-tools, которая будет использоваться в этом руководстве.
ШАГ 2: Исправьте Boot.img через Magisk
Вам также потребуется получить исправленный файл boot.img Magisk для вашего устройства. Если вы просто используете стандартный boot.img, ядро может не загрузиться в ОС из-за сбоя проверки подлинности. Так что в этом случае вам придется исправить и прошить vbmeta (или vbmeta_system), чтобы отключить проверки подлинности. С другой стороны, это не требуется, если вы просто прошиваете исправленный файл boot.img Magisk. Итак, давайте возьмем этот подход.
- Загрузите стоковую прошивку, извлеките ее и получите стоковый файл boot.img.
- После этого установите приложение Magisk на свое устройство.
- Затем нажмите кнопку «Установить», расположенную рядом с Magisk.
- В разделе «Метод» выберите «Выбрать и исправить файл».
- Найдите извлеченный файл boot.img и выберите его.
- Затем нажмите на опцию «Поехали», расположенную в правом верхнем углу.
- Теперь Magisk загрузит файл boot.img и соответствующим образом исправит его.
- Как только это будет сделано, вы получите сообщение «Загрузка завершена».
- Файл исправленного загрузочного образа будет сохранен во внутренней памяти > Загрузки. Переименуйте его в magisk_patched_boot.img.
ШАГ 3. Включите отладку по USB и разблокировку OEM
Затем вам нужно будет включить отладку по USB и разблокировку OEM на вашем устройстве. Первый сделает ваше устройство узнаваемым ПК в режиме ADB. Это позволит вам загрузить ваше устройство в режиме быстрой загрузки. С другой стороны, разблокировка OEM требуется для выполнения процесса разблокировки загрузчика.
Итак, перейдите в «Настройки»> «О телефоне»> «Информация о программном обеспечении»> 7 раз нажмите на номер сборки> вернитесь в «Настройки»> «Система»> «Параметры разработчика»> «Включить отладку по USB и разблокировку OEM».
ШАГ 4: Разблокируйте загрузчик
Далее вам также нужно будет разблокировать загрузчик устройства. Имейте в виду, что это приведет к удалению всех данных с вашего устройства, а также может привести к аннулированию гарантии. Так что, если все в порядке, обратитесь к нашему подробному руководству о том, как разблокировать загрузчик на любом устройстве Android.
ШАГ 5: Загрузитесь в режиме быстрой загрузки
- Подключите ваше устройство к ПК через USB-кабель. Убедитесь, что отладка по USB включена.
- Затем перейдите в папку инструментов платформы, введите CMD в адресной строке и нажмите Enter. Это запустит командную строку.
- После этого введите следующую команду в окне CMD, чтобы загрузить ваше устройство в режим Fastboot Modeadb reboot bootloader
- Чтобы проверить соединение Fastboot, введите приведенную ниже команду, и вы должны получить идентификатор устройства. устройства fastboot
ШАГ 6. Прошивка пропатченного файла Boot.img
- Для начала перенесите файл magisk_patched_boot.img в папку platform-tools на вашем ПК.
- Затем перейдите в адресную строку папки с инструментами платформы, введите CMD и нажмите Enter.
- Это запустит командную строку. Выполните приведенную ниже команду, чтобы прошить файл Magisk Patched Boot: fastboot flash boot magisk_patched_boot.img
ШАГ 7: Изменить размер системного раздела
- На данный момент ваше устройство загружено в режим быстрой загрузки. Поэтому выполните приведенную ниже команду, чтобы загрузить его в FastbootDfastboot reboot fastboot
- Затем выполните приведенную ниже команду, чтобы удалить данные в разделе продукта — fastboot erase product.
- После этого введите приведенную ниже команду, чтобы установить размер раздела продукта на 0fastboot resize-logical-partition product_a 0x0.
- Чтобы проверить, стал ли размер раздела равным 0, выполните следующую команду: fastboot getvar all
- Если одна из строк показывает приведенный ниже код, то процесс выполнен успешно. (загрузчик) partition-size:product_a:0x0
ШАГ 8: Запишите ПЗУ GSI
Теперь, когда мы закончили с изменением размера системного раздела, мы можем без проблем прошить ПЗУ GSI. Вот общие инструкции по установке GSI на Android:
- Для начала загрузите GSI ROM по вашему выбору и отправьте его в папку platform-tools.
- Затем откройте CMD в папке platform-tools и введите следующую команду: fastboot erase system
- Это удалит данные в системном разделе. После этого выполните приведенную ниже команду, чтобы прошить GSI ROMfastboot flash system gsi.img.
- После этого выполните две приведенные ниже команды, чтобы отформатировать устройство. [it will wipe all the data].fastboot стереть пользовательские данные fastboot стереть метаданные
- Наконец, введите приведенную ниже команду, чтобы загрузить ваше устройство до недавно установленной перезагрузки OSfastboot.
Вот и все. Это были шаги по изменению размера системного раздела, чтобы установить GSI ROM. Если у вас есть какие-либо вопросы относительно вышеупомянутых шагов, сообщите нам об этом в комментариях. Мы вернемся к вам с решением в ближайшее время.
Недавно я установил прошивку Light Biz OS на GeekBox и понял, что многие приложения, такие как GIMP Inkscape не могут быть установлены из-за небольшого «внутреннего хранилища», всего 1.94 Гб, я спросил как увеличить размер раздела на форуме в GeekBox и довольно таки быстро получил ответ от “dewet”.
Хорошей новостью является то, что он рабочий, поэтому я опишу шаги, которые проделал с помощью компьютера под управлением Ubuntu 14.04. Этот способ также может быть возможным для выполнения той же задачи на Windows компьютере с программой Rorkchip’s Factory tools.
- Сначала давайте скачаем утилиты с соответствующими скриптами и бинарные файлы:
git clone https://github.com/geekboxzone/utils
cd utils/rockdev
- Теперь скопируйте файл прошивки (update.img) вашего устройства или платформы в рабочую директорию и распакуйте его:
Результат должен выглядеть так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
start to unpack update.img...
********RKImageMaker ver 1.61********
Unpacking image, please wait...
Exporting boot.bin
Exporting firmware.img
Unpacking image success.
Android Firmware Package Tool v1.0
Check file... OK
——- UNPACK ——
package—file 0x00000800 0x000002A6
Loader.bin 0x00001000 0x0003594E
parameter 0x00037000 0x000003BF
Image/trust.img 0x00037800 0x00400000
Image/uboot.img 0x00437800 0x00400000
Image/resource.img 0x00837800 0x00606400
Image/misc.img 0x00E3E000 0x0000C000
Image/kernel.img 0x00E4A000 0x00D08C4C
Image/boot.img 0x01B53000 0x001354E8
Image/recovery.img 0x01C88800 0x00FB4000
Image/system.img 0x02C3C800 0x28D29000
update—script 0x2B965800 0x000003A5
recover—script 0x2B966000 0x0000010A
Unpack firmware OK!
—— OK ——
Unpacking update.img OK.
Press any key to quit:
Файлы будут находиться в каталоге “output”.
- Файл параметров для нашей цели, особенно важна последняя строка (CMDLINE) где мы регулируем размер раздела для данных пользователя:
FIRMWARE_VER: 5.1.0
MACHINE_MODEL: Geekbox
MACHINE_ID: 007
MANUFACTURER: RK3368
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3368
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x00280000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
#in section; per section 512(0x200) bytes
CMDLINE: console=ttyS2 androidboot.baseband=N/A androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyS2 init=/init mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00008000@0x00008000(resource),0x00008000@0x00010000(kernel),0x00010000@0x00018000(boot),0x00010000@0x00028000(recovery),0x00038000@0x00038000(backup),0x00040000@0x00070000(cache),0x00002000@0x000B0000(kpanic),0x00200000@0x000B2000(system),0x00008000@0x002B2000(metadata),0x00002000@0x002BA000(baseparamer),0x00400000@0x002BC000(userdata),0x00020000@0x006BC000(radical_update),—@0x006DC000(user)
- Разделы определяются начиная с size@start_address, так что нам нужно изменить размер параметра userdata, сместив таким образом start_address оставшихся разделов. Это можно сделать вручную в редакторе под Linux, но я решил не рисковать и вместо этого скачал и установил RK_ParamEd.exe для Windows, поменял значение userdata с 2048 Мб на 6144 Мб (6 Гб).
После сохранения мы можем наблюдать в CMDLINE (командная строка) как завершится процесс изменения:0x00C00000@0x002BC000(userdata),0x00020000@0x00EBC000(radical_update),—@0x00EDC000(user)
- Теперь мы можем перепаковать образ, после перемещения содержимого из каталога «output» в каталог «rockdev».
mv output/* .
./mkupdate.sh
Успешный переупаковка должна выглядеть следующим образом:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
start to make update.img...
Android Firmware Package Tool v1.0
—— PACKAGE ——
Add file: ./package—file
Add file: ./Loader.bin
Add file: ./parameter
Add file: ./Image/trust.img
Add file: ./Image/uboot.img
Add file: ./Image/resource.img
Add file: ./Image/misc.img
Add file: ./Image/kernel.img
Add file: ./Image/boot.img
Add file: ./Image/recovery.img
Add file: ./Image/system.img
Add file: ./update—script
Add file: ./recover—script
Add CRC...
Make firmware OK!
—— OK ——
********RKImageMaker ver 1.61********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making update.img OK.
- Теперь запишите файл прошивки update.img обратно на ваше Rockchip устройство в Linux или Windows.
- Готово! Теперь у меня 6Гб внутренней памяти в Android 5.1 на базе ОС Light Biz.
Выражаем свою благодарность источнику с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.