1. Структура образа прошивки Андроид Все устройства Sunxi (на основе SoC Allwinner) используют LiveSuit или PhoenixSuit в качестве средства программирования и обновления прошивки по умолчанию для розничных клиентов, а также Card или PhoenixUSB для прошивки при производстве устройств. Протокол и данные LiveSuit/Phoenix являются стандартом с закрытым исходным кодом, используемым многими компаниями и устройствами. Для работы с такими образами используются инструменты, описанные на странице LiveSuit images. Для создания загрузочной карты с ОС Андроид для одноплатного компьютера OragePi Zero2 (который будет ниже обозначаться как устройство) используется утилита PhoenixCard. С помощью этой утилиты на SD-карту записывается прошивка, содержащаяся в файле "образа прошивки", например, OrangePi Zer02 Android10 V1_1.img. Такой файл можно загрузить с сайта производителя или разобрать, как-то модифицировать и снова собрать самостоятельно. Аналогичный подход используется на многих других устройствах, основанных на SoC Alwinner, в частности, в ТВ-боксах (они же тв-приставки, они же медиа-плееры). С помощью разборки-сборки таких файлов создаются так называемые кастомные прошивки, пользующиеся большой популярность у владельцев подобных гаджетов. На ТВ-боксах, содержащих nand-память, используется также второй вариант установки ОС - через подключение устройства по кабелю к USB-порту ПК. При этом используется тот же самый файл прошивки, поэтому его структура и содержимое должны удовлетворять особенностям обоих (точнее, даже трех) способов установки ОС. Третий способ - это запись карты в режиме "product", с которой система не стартует, но переписывается во внутреннюю nand-память устройства. Для устройства OragePi Zero2 имеется несколько готовых образов ОС Linux в виде img-файлов, являющихся raw (т.е. необработанными) копиями загрузочного носителя. Такой img-образ переносится на загрузочный носитель простым копированием, например, с помощью утилиты diskimager.exe (под Windows) или аналогичными утилитами под Linux (а также консольной командой Linux dd). Однако с прошивкой Android дело обстоит иначе. Здесь вместо raw-образов для программирования прошивки используются img-образы, известные также как imagewty-образы (по начальной magic-сигнатуре файла IMAGEWTY). Несмотря на расширение .img файл imagewty-образа для прошивки Android не является именно образом (image), а представляет собой архив специального формата (типа "сборная солянка"), содержащий набор файлов. Особенность такого образа заключается в том, что в комплекте с солянкой идут также и ложка с вилкой: кроме файлов, необходимых для работы системы, в таком образе присутствуют и инструменты, т.е. служебный софт, необходимый для нормального функционирования утилит программирования (записи прошивки). Структура этого архива (файла imagewty-образа) выглядит так:
Нужно учитывать, что этот формат образа был создан достаточно давно (для более ранних моделей и версий) и должен был учитывать различные способы и инструменты программирования прошивки Allwinner (Live Suite, Phoenix Suite, Phoenix USB Pro, Phoenix Card), в том числе в условиях массового производства, поэтому в нем могут содержаться устаревшие и не используемые в конкретном случае параметры. То же самое относится и к сохраненным в архиве файлам: не все из них нужны для программирования, а некоторые из них вообще не попадают на карту (загрузочный носитель) или никак не используются. Заголовок образа (архива) содержит: Примечание. Назначение и смысл параметров parX1, parX2, parX3 пока не выяснены. Заголовок каждого файла содержит (на примере sys_partition.fex): Основываясь на приведенной выше структуре образа, можно извлечь из этого архива любой содержащийся в нем файл и сохранить в виде самостоятельного файла. Для этого мы используем специально написанную платформонезависимую программу, которая может запускаться в любом браузере и показывает содержимое архива. А также позволяет в интерактивном режиме сохранить любой выбранный файл по его имени (или все файлы архива). В принципе, эта программа может быть размещена на веб-сервере для её удаленного использования по сети, но из-за довольно большого (гигабайт) размера файла архива прошивки загрузка его достаточно долгая, поэтому более разумно иcпользовать её на локальном сервере, например, на LAMP (который может быть развернут в серверной версии Linux прямо на Opi Zero2) или на ПК под Windows. Кроме того, существует известная консольная утилита-распаковщик imgrepacker.exe, которая умеет делать
распаковку архива в папку (с последующей упаковкой из этой папки), а также распаковку второго уровня
(или слоя) для файлов boot.fex, recovery.fex и super.fex.
Однако для целей детального анализа архива образа прошивки она оказалась менее удобной.
Кроме того, она создает в папке ешё и свои служебные файлы, которые на самом деле
в исходном архиве отсутствуют, что не дает полной картины о структуре образа. Также при распаковке утилитой imgrepacker создается служебный файл image.cfg, который представляет собой список распакованных файлов. В исходном архиве файл image.cfg отсутствует, однако он требуется утилите imgrepacker для обратной запаковки папки с файлами в архив IMAGEWTY-образа (файл .img). Нужно учитывать, что в случае исключения каких-то файлов из полного набора перед их упаковкой с помощью утилиты imgrepacker эти пропущенные файлы также должны быть удалены из списка в файле image.cfg, в противном случае при упаковке возникнет ошибка. Содержимое файла image.cfg: Файл конфигурации imgrepacker Итак, в архиве IMAGEWTY-образа прошивки OrangePi_Zer02_Android10_V1_1.img упаковано 40 файлов. Ниже приведен их полный список с указанием имени, размера и положения в архиве. Смещение показано в hex-виде. Чтобы проверить правильность распаковки достаточно просмотреть архив (без его распаковки) с помощью hex-редактора, найдя содержимое любого файла внутри образа по указанному смещению. Файлы лежат в архиве прошивки именно в таком порядке, как указаны в списке. № Имя файла ( размер - смещение ) Эти файлы имеют разные формат и назначение. Часть из них при программировании попадает в соответствующие разделы загрузочного носителя (внешней SD-карты или встроенной nand-памяти), другие файлы являются служебными и используются прошивальщиками PhoenixCard и PhoenixSuite (или аналогичными). Кроме того, есть вспомогательные файлы, которые помешщены в архив прошивки, но при программировании вообще не используются, а нужны лишь для служебных утилит. Более подробно о каждом файле рассказано в следующей главе 2: Файлы В связи с тем, что устройство OragePi Zero2 не имеет внутренней постоянной nand-памяти, а использует внешнюю SD-карту, для него актуален лишь вариант записи образа на карту с помощью PhoenixCard в режиме "startup". Поэтому способы программирования через USB c помощью утилиты Phoenix Suite и аналогичных здесь рассматривать не будем. Нужно также подчеркнуть, что в данной статье не ставится целью понять и описать в деталях и подробностях стандартный способ программирования утилитой PhoenixCard, а также выяснить смысл или назначение используемых этой утилитой файлов, имеющихся в архиве прошивки. Хотя о некоторых выясненных подробностях расскажем. Главная задача: понять и определить, какие из этих сорока файлов обязательно нужны, а их содержимое должно попасть на загрузочный носитель (карту), если будет использоваться какой-то другой способ записи (без PhoenixCard). Конечная цель: создать из этих файлов загрузочный raw-образ прошивки Android, аналогичный образу Linux,
который можно будет записать на карту простым копированием с помощью умеющих это делать инструментов.
Дополнение. Эта поставленная цель достигнута. Поэтому, если нет желания или интереса читать всё остальное, то можно сразу загрузить и попробовать прошить RAW-образ Android для OpiZero2, собранный (или конвертированный) на основе стоковой версии Ver.1.1 с сайта производителя. Как загрузить готовые образы ZIP-архив с файлом RAW-образа v11zero2-32.zip имеет размер 424 837 223 байт и содержит файл v11raw32gb.img, предназначенный для записи только на SD-карту емкостью 32 Gb. Размер файла: 1740800 Kb. ВНИМАНИЕ ! Перед записью рекомендуется очистить карту в режиме overwrite утилитой SDcardFormatter (если карта не новая и уже использовалась для записи образа). Скачать этот zip-архив можно по ссылкам (на разных облаках): Если возникнут проблемы с этой прошивкой, то можно задать вопросы или сообщить о проблеме в теме на Форум 4PDA |