Образ Android


  Образ       Файлы       GPT     Разделы     RAW  

  super.fex     boot-resource.fex     boot_package.fex     boot0_sdcard.fex     cardscript.fex     cardtool.fex     split_xxxx.fex     fes1.fex  

2. Назначение файлов в образе прошивки

На приведенном ниже списке использован принцип "цветовой дифференциации штанов" (цветом выделены разные категории файлов).


№ Имя файла - размер

  • 1) sys_config.fex - 22543

  • 2) board.fex - 1024

  • 3) config.fex - 30720

  • 4) split_xxxx.fex - 512

  • 5) sys_partition.fex - 5238

  • 6) sunxi.fex - 129536

  • 7) boot0_nand.fex - 49152

  • 8) boot0_sdcard.fex - 49152

  • 9) u-boot.fex - 1015808

  • 10) u-boot-crash.fex - 37

  • 11) toc1.fex - 8

  • 12) toc0.fex - 8

  • 13) fes1.fex - 30592

  • 14) boot_package.fex - 1261568

  • 15) usbtool.fex - 148480

  • 16) usbtool_crash.fex - 390656

  • 17) aultools.fex - 166071

  • 18) aultls32.fex - 151839

  • 19) cardtool.fex - 73728

  • 20) cardscript.fex - 1899

  • 21) sunxi_gpt.fex - 8192

  • 22) sunxi_mbr.fex - 65536

  • 23) dlinfo.fex - 16384

  • 24) arisc.fex - 6

  • 25) boot-resource.fex - 5876736

  • 26) Vboot-resource.fex - 4

  • 27) env.fex - 131072

  • 28) Venv.fex - 4

  • 29) boot.fex - 33554432

  • 30) Vboot.fex - 4

  • 31) super.fex - 852623532

  • 32) Vsuper.fex - 4

  • 33) recovery.fex - 33554432

  • 34) Vrecovery.fex - 4

  • 35) vbmeta.fex - 4096

  • 36) Vvbmeta.fex - 4

  • 37) vbmeta_system.fex - 4096

  • 38) Vvbmeta_system.fex - 4

  • 39) vbmeta_vendor.fex - 4096

  • 40) Vvbmeta_vendor.fex - 4


    Как используются файлы imagewty-образа прошивки Android

    Все файлы, содержащиеся в архиве прошивки Андроид, можно условно разделить на несколько категорий:


    1. Файлы , которые представляют образы разделов (или частей разделов) карты памяти (или другого загрузочного носителя). Эти файлы при программировании ("прошивании") карты памяти записываются в соответствующие (иногда одноименные) разделы. К таким файлам относятся:

  • env.fex - переменные окружения (среды), записывается в раздел env карты памяти
  • boot.fex - образ ядра, записывается в раздел boot карты памяти
  • recovery.fex - рекавери ("восстановление"), это сервисная ОС, которая записывается в раздел recovery карты памяти
  • super.fex - sparse-файл, содержащий логические системные разделы (system, vendor, product), файл записывается в раздел super (распакованный в raw-образ раздела)
  • boot-resource.fex - записывается в начало раздела bootloader (или со смещением 73728 блоков от начала карты). Этот файл содержит статические данные для вторичного загрузчика U-Boot (шрифты, графические файлы .BMP заставок, а также magic.bin)
  • vbmeta.fex, vbmeta_system.fex, vbmeta_vendor.fex - это файлы, которые содержат метаданные, управляющие подтвержденной загрузкой AVB (Android Verified Boot). Примечание. Практика показывает, что для обычной загрузки запись этих файлов в соответствующие разделы не обязательна.

    Примечание. Размеры файлов boot.fex и recovery.fex совпадают с размерами одноименных разделов (по 32 Мбайт), поэтому эти файлы являются raw-копиями разделов. Размеры остальных файлов меньше размеров разделов, в которые они записываются.


    2. Файлы , содержимое которых записывается в неразмеченную область карты по заданному смещению. К ним относятся:

  • sunxi_gpt.fex - таблица разделов GPT, записывается в модифицированном виде в самое начало карты, при этом все адреса разделов увеличиваются на 40960 блоков (см. Примечание ниже).
  • boot0_sdcard.fex - загрузчик для загрузки с SD-карты, записывается в неразмеченную область карты (не имеет раздела в GPT), начиная с 16 блока от начала карты (16 * 512 = 8192 байта = 0x2000).

    В устройствах со встроенной eMMC-памятью (ТВ-боксах) boot0_sdcard.fex используется аналогичным образом.

  • boot_package.fex - пакет бинарных файлов для загрузчика, записывается в неразмеченную область карты со смещением 32800 блоков от начала карты ( 32800 * 512 = 16793600 байт = 0x1004000 )

    Примечание 1. Файл boot0_nand.fex - загрузчик для загрузки из nand-памяти в имеющих её устройствах. В OpiZero2 и ТВ-боксах на H616 boot0_nand.fex вообще не используется .

    Примечание 2. Реальная таблица разделов, создаваемая на карте, отличается от файла sunxi_gpt.fex из образа. Фактически, она создается при программировании прошивальщиком PhoenixCard на основе файлов sunxi_mbr.fex и dlinfo.fex. Однако, как показала практика, наличие файла sunxi_gpt.fex в imagewty-образе всё же необходимо для нормальной работы PhoenixCard. Возможно, его присутствие свидетельствует о использовании GPT-таблицы, а не MBR, ну или это какой-то атавизм.

    Заметим, что содержащуюся в этих файлах информацию не удастся изменить непосредственно на устройстве с помощью инструментов, работающих с разделами (поскольку раздел отсутствует). Например, в режиме fastboot (командой fastboot flash PARTITION [FILENAME]), или с помощью PhoenixSuit в режиме выбора конкретного раздела. Это означает, в частности, что такими способами невозможно изменить дерево устройств DTB непосредственно на устройстве, т.к. оно хранится в пакете boot_package.fex. Возможно, это сделано для защиты от окирпичивания устройств с nand-памятью, не позволяя испортить оба вторичных загрузчика (eGON и U-Boot) некорректным использованием стандартных инструментов или в процессе OTA-обновления (актуально для ТВ-боксов)


    3. Файлы , содержимое которых на карту не записывается, однако требуется для функционирования утилит PhoenixCard и PhoenixSuite:

  • sunxi_mbr.fex - бинарный файл для прошивальщика, содержит информацию о разделах
  • dlinfo.fex - бинарный файл для прошивальщика, содержит информацию о файлах и разделах, в которые они должны быть записаны.
  • usbtool.fex - используется утилитами программирования, работающими через USB (например, PhoenixSuite)
  • aultools.fex - скомпилированный LUA-скрипт для работы через USB
  • aultls32.fex - скомпилированный LUA-скрипт для работы через USB
  • cardscript.fex - копируется в текущую папку PhoenixCard с именем script.cfg как временый файл
  • cardtool.fex - копируется в текущую папку PhoenixCard с именем card.scj как временый файл
  • fes1.fex - вспомогательный загрузчик для режима FES (подробности - ниже)


    4. Файлы , содержимое которых на карту не записывается и не требуется для функционирования утилиты PhoenixCard, однако могут использоваться другими служебными программами или как справочные (помещены в файл образа по принципу "всё свое ношу с собой") :

  • sunxi.fex - бинарный файл дерева устройств dtb, входящего в состав пакета boot_package.fex, как самостоятельный файл при программировании карты не используется
  • u-boot.fex - загрузчик U-Boot, входит в состав пакета boot_package.fex, как самостоятельный файл при программировании карты не используется
  • u-boot-crash.fex - строка текста, не используется (возможно, атавизм)
  • sys_partition.fex - текстовый файл, прошивальщиком не используется, но из него можно получить бинарные файлы sunxi_mbr.fex, dlinfo.fex и sunxi_gpt.fex (используя специальный конвертер)
  • sys_config.fex - текстовый файл конфигурации, на основе которого создано дерево устройств DTB, прошивальщиком не используется, конвертируется в бинарную форму (файл config.fex), полезен для понимания смысла тех или иных параметров
  • config.fex - бинарный файл, конвертируется из текста sys_config.fex с помощью утилиты fex2bin
  • split_xxxx.fex - текстовый файл размером в один блок (512 байт), этот файл является копией файла сигнатуры magic.bin, содержащегося в файле boot-resource.fex, который записывается в раздел bootloader.

    5. Файлы контрольных сумм

    Файлы с префиксом V размером 4 байта (т.е. кроме трех файлов Vbmeta) содержат контрольные суммы (32-разрядные числа) и генерируются утилитой FileAddSum.exe из одноименных файлов.

    Эти файлы могут быть использованы распаковщиком архива или утилитами-прошивальщиками для контроля целостности файлов, входящих в состав образа прошивки (например, при их пересылке по USB). Непосредственно в загрузочный носитель (на SD-карту) файлы контрольных сумм не записываются.

    Список файлов контрольных сумм:

  • Vboot-resource.fex
  • Venv.fex
  • Vboot.fex
  • Vsuper.fex
  • Vrecovery.fex
  • Vvbmeta.fex
  • Vvbmeta_system.fex
  • Vvbmeta_vendor.fex

    ВНИМАНИЕ ! При упаковке утилитой imgrepacker.exe файлов из папки IMG.DUMP в архив imagewty-образа контрольные суммы вычисляются заново, поэтому эти файлы обновляются в самой папке и такими попадают в архив образа. При этом время создания файла устанавливается равным моменту запуска упаковщика, а содержимое (4 байта КС) изменяется для модифицированных файлов.


    6. Пустые файлы

  • toc1.fex
  • toc0.fex
  • arisc.fex
  • usbtool_crash.fex
  • board.fex

    Можно предположить, что присутствие в imagewty-образе файлов с такими именами проверяется (или проверялось в предыдущих моделях и версиях) какими-то из служебных программ, которые не могут нормально работать при отсутствии этих файлов. Хотя в данном конкретном случае (OpiZero2) содержимое этих файлов, которое просто повторяет имя файла, не имет никакого значения.

    toc0.fex и toc1.fex - здесь это файлы-заглушки. Toc0 - это формат вторичного загрузчика как альтернатива формату eGON загрузчика Boot0. Этот формат используется в режиме безопасной загрузки в тех устройствах, у которых установлен бит безопасности, т.е. прошит однократно в eFUSE.

    Цитата из https://linux-sunxi.org/TOC0:


    Задача преобразования eGON.BT0 в TOC0 может быть делегирована интеллектуальному инструменту для прошивания. Например, sunxi-fel может проверить, установлен ли безопасный загрузочный бит в LCJS, и автоматически выполнить преобразование в формат TOC0 при прошивке SPI NOR . В качестве дополнительной меры безопасности также лучше, если инструмент может проверить, что устройство не заблокировано, чтобы принимать только определенный ключ. Сборка U-Boot может создавать образы в обоих форматах, но интеллектуальный инструмент для прошивания может взаимозаменяемо использовать любой из них, если преобразование является простым (таким образом устраняется возможная ошибка пользователя).

    Отметим, что в образе Android для устройстве OpiZero2, а также в прошивках большинства ТВ-боксов на H616 эти файлы toc0.fex и toc1.fex пустые, однако имеются ТВ-боксы (например, T95 и STUOTOP ST1 ), в проошивках которых оба эти файла используются по назначению:

  • TOC0.fex - в качестве первой части вторичного загрузчика,
  • TOC1.fex - в качестве пакета sunxi-secure для вторичного загрузчика.

    Кстати, это обстоятельство является причиной многих проблем для пользователей таких ТВ-боксах, возникающих при обновлении или замене прошивок.


    Временные файлы утилиты PhoenixCard

    Для понимания смысла и предназначения файлов imagewty-образа посмотрим внимательно на работу PhoenixCard. Оказывается, что при запуске этой программы в момент выбора в её пользовательском интерфейсе конкретного файла образа прошивки происходят интересные вещи. А именно, в рабочей папке PhoenixCard создаются временные файлы, которые как-то используются самой программой в процессе записи карты, а по завершении работы удаляются.

    Вот список и происхождение этих временных файлов.

  • 1. config.cfg - это конфигурация прошивальщика, файл создается при старте программы

  • 2. thisdata.fexF - это пустой файл размером 4096 байт, т.е. 8 блоков

  • 3. card.scj - это точная копия файла cardtool.fex из образа прошивки

  • 4. dlinfo.fex - это точная копия файла dlinfo.fex из образа прошивки

  • 5. gpt.fex - это слегка измененный файл sunxi_gpt.fex из образа прошивки

  • 6. mbr.fex - это слегка измененный файл sunxi_mbr.fex из образа прошивки

  • 7. script.cfg - это файл cardscript.fex из образа прошивки (с убранными пробелами)

  • 8. script.cfgF - это файл script.cfg из образа прошивки (с заменой mode=product на mode=bromrun)

    Содержимое файла конфигурации config.cfg:

    [system]
    ver  = 0x100
    
    [usb]
    pid  = 0x1234
    vid  = 0x1234
    
    [card]
    main  = 12345678
    sub   = 1234567890cardtl
    
    [script]
    main  = 12345678
    sub   = 1234567890script
    
    [mbr]
    main  = 12345678
    sub   = 1234567890___mbr
    
    [gpt]
    main  = 12345678
    sub   = 1234567890___gpt
    
    [dlinfo]
    main  = 12345678
    sub   = 1234567890dlinfo
    
    [Img File]
    path=E:/Android_v11.img
    
    

    В процессе изучения структуры образа прошивки была собрана некая информация по отдельным файлам, входящим в состав imagewty-образа, которая приведена по ссылкам ниже ( тут только некоторые, но далеко не все файлы образа).

    На самом деле, описание части из этих файлов может не иметь особого практического смысла (для целей создания raw-образа), какая-то информация опубликована здесь исключительно в познавательных целях. А также по принципу "не пропадать же добру", возможно, однажды где-то пригодится...

    Не исключено, что приведенная информация будет дополняться или корректироваться при дальнейшей работе над образом прошивки.