3. Структура загрузочной карты
Когда записанная загрузочная карта подключается к USB ПК с Windows, то в её проводнике (или в файловом менеджере)
может отобразиться огромное количество (на все буквы алфавита) дисков, якобы подключенных к USB.
Почему это происходит ?
Причина проста: на этой карте записана таблица разделов GPT, содержащая 25 строк,
описывающих 25 разделов (или партиций - partition).
Когда какое-то устройство хранения (HDD или SSD диск,
USB-флешка, SD-карта и пр.) разбивается на разделы, то это не означает, что вся память как-то делится или размечается
(существует даже термин - "разметка"). На самом деле с памятью ничего не происходит, а лишь в самое её начало
записывается крохотная таблица, содержащая описание этой самой "разметки", т.е. адреса начала и конца каждого раздела,
которые указываются в виде номеров логических блоков LBA по 512 байт. Заметим, что иногда употребляемое название
"сектор" неточно, оно из эпохи жестких дисков с их круглой формой и делением на геометрические сектора.
Если выполнить в любом терминале непосредственно на приставке (или на ПК c Linux) консольную команду:
sgdisk --print /dev/block/sda
(здесь sda - это загрузочная карта с Android12, подключенная к USB-порту устройства),
то её результат будет таким:
Number Start End Size Code Name
1 73728 139263 32.0 MiB 0700 bootloader_a
2 139264 204799 32.0 MiB 0700 bootloader_b
3 204800 205311 256.0 KiB 0700 env_a
4 205312 205823 256.0 KiB 0700 env_b
5 205824 336895 64.0 MiB 0700 boot_a
6 336896 467967 64.0 MiB 0700 boot_b
7 467968 533503 32.0 MiB 0700 vendor_boot_a
8 533504 599039 32.0 MiB 0700 vendor_boot_b
9 599040 6890495 3.0 GiB 0700 super
10 6890496 6923263 16.0 MiB 0700 misc
11 6923264 6923519 128.0 KiB 0700 vbmeta_a
12 6923520 6923775 128.0 KiB 0700 vbmeta_b
13 6923776 6923903 64.0 KiB 0700 vbmeta_system_a
14 6923904 6924031 64.0 KiB 0700 vbmeta_system_b
15 6924032 6924159 64.0 KiB 0700 vbmeta_vendor_a
16 6924160 6924287 64.0 KiB 0700 vbmeta_vendor_b
17 6924288 6925311 512.0 KiB 0700 frp
18 6925312 6956031 15.0 MiB 0700 empty
19 6956032 6988799 16.0 MiB 0700 metadata
20 6988800 7021567 16.0 MiB 0700 private
21 7021568 7025663 2.0 MiB 0700 dtbo_a
22 7025664 7029759 2.0 MiB 0700 dtbo_b
23 7029760 7062527 16.0 MiB 0700 media_data
24 7062528 7095295 16.0 MiB 0700 Reserve0
25 7095296 15675391 4.1 GiB 0700 UDISK
Файл IMAGEWTY-образа прошивки Android 12(13) - это архив специального формата, содержащий 45 файлов
с расширением .fex.
- arisc.fex
- aultls32.fex
- aultools.fex
- board.fex
- boot.fex
- boot_package.fex
- boot0_nand.fex
- boot0_sdcard.fex
- boot-resource.fex
- cardscript.fex
- cardtool.fex
- config.fex
- dlinfo.fex
- dtbo.fex
- env.fex
- fes1.fex
- misc.fex
- split_xxxx.fex
- sunxi.fex
- sunxi_gpt.fex
- sunxi_mbr.fex
- super.fex
- sys_config.fex
- sys_partition.fex
- toc0.fex
- toc1.fex
- u-boot.fex
- u-boot-crash.fex
- usbtool.fex
- usbtool_crash.fex
- vbmeta.fex
- vbmeta_system.fex
- vbmeta_vendor.fex
- Vboot.fex
- Vboot-resource.fex
- Vdtbo.fex
- vendor_boot.fex
- Venv.fex
- Vmisc.fex
- vmlinux.fex
- Vsuper.fex
- Vvbmeta.fex
- Vvbmeta_system.fex
- Vvbmeta_vendor.fex
- Vvendor_boot.fex
Примечание. Файлы, имена которых начинаются на V, и имеющие длину 4 байта (их 10 штук) -
это контрольные суммы соответствующих файлов с именем без первой V.
Однако в эти 25 разделов, имеющихся на карте,
непосредственно в разделы записываются только 10 файлов:
Раздел Файл
1) bootloader_a boot-resource.fex
2) env_a env.fex
3) boot_a boot.fex
4) vendor_boot_a vendor_boot.fex
5) super super.fex
6) misc misc.fex
7) vbmeta_a vbmeta.fex
8) vbmeta_system_a vbmeta_system.fex
9) vbmeta_vendor_a vbmeta_vendor.fex
10) dtbo_a dtbo.fex
Примечание. Кроме того, несколько файлов записываются в неразмеченную область памяти.
При этом только один раздел bootloader_a становится настоящим диском, отформатированным в FAT16.
Это диск с ресурсами (картинками и шрифтами) для загрузчика U-Boot.
При подключении карты к USB компьютера этот диск (получивший первую свободную букву, например, F),
становится доступным, что позволяет копировать его файлы непосредственно на ПК.
Команда dir (или проводник или файловый менеджер) показывают файловую структуру этого диска:
Нетрудно увидеть, что среди этих файлов папка BAT с никому и никогда не нужными картинками анимации заряда
батарейки (которую спокойно можно удалить), а также графический файл со стартовой заставкой bootlogo.bmp.
Кстати, этот файл можно отредактировать в любом графическом редакторе и скопировать обратно на диск F.
В результате получим новую картинку в момент загрузки Android.
Из приведенного выше списка записываемых файлов видно, что при записи прошивки на карту в раздел UDISK
ничего не записывается.
Этот раздел позже меняет имя на userdata и монтируется с именем DATA, хранит все настройки,
конфигурационные данные приложений и пользовательские данные.
Из этого факта вытекает приятная (а иногда и не очень) особенность: если загрузочная карта каое-то время
работала в приставке, и были сделаны настройки и установлены ползовательские приложения,
то при повторной записи какой-то другой версии прошивки на эту же карту все они сохранятся,
т.е. повторная настройка не потребуется.
Однако, в том случае, когда повторно записыватся совсем чужая прошивка,
то существует вероятность, что её система будет конфликтовать с уже имещимися в разделе DATA файлами
(например с бутанимацией) и процедура загрузки не закончится полностью, т.е. запуском лаунчера.
В такой ситуации могут помочь два (как минимум) способа:
1) загрузить приставку с этой картой в Recоvery и сделать сброс с очисткой данных
2) перед записью новой прошивки войти на работающей приставке в Настройки и дать команду сброса и очистки,
после чего выключить приставку и извлечь карту.
Заметим, что обычная процедура форматирования карты также не очистит раздел DATA, а только удалит
таблицу разделов. При этом сами данные останутся на своем месте и при повторной записи на эту карту
таблицы GPT, имеющей такие же начальные адреса разделов, раздел DATA может благополучно восстановиться
с прежними данными.
ВНИМАНИЕ ! Важно подчеркнуть, что описанная здесь структура прошивки на загрузочной карте полностью
совпадает со структурой прошивки во внутренней (eMMC) флеш-памяти приставки.