super.fex boot-resource.fex boot_package.fex boot0_sdcard.fex cardscript.fex cardtool.fex split_xxxx.fex fes1.fex Файл boot_package.fex
Файл boot_package.fex представляет собой архив специального формата,состоящий из заголовка архива и содержимого упакованных файлов (item). Заголовок начинается с сигнатуры sunxi-package и имеет длину 2048 байт. Структура заголовка пакета boot_package.fex, имеющего размер 64 байта: #define TOC_MAIN_INFO_MAGIC 0x89119800 typedef struct head_info // заголовок с общей информацией о пакете { char name[16] ; // пользователь может изменить u32 magic ; // должен быть равен TOC_MAIN_INFO_MAGIC u32 add_sum ; // контрольная сумма u32 serial_num ; // пользователь может изменить u32 status ; // пользователь может изменить u32 items_nr ; // общее количество записей (файлов) = 4 u32 valid_len ; // размер файла boot_package.fex u32 version_main; // только один байт u32 version_sub ; // два байта u32 reserved[3] ; // зарезервировано u32 end; } Дальше лежат четыре заголовка для каждого item (т.е. содержимого упакованных файлов). Размер каждого заголовка 368 байт. Структура заголовка каждого item: typedef struct item_info // { char name[64]; // имя файла, например monitor u32 data_offset; // смещение u32 data_len; // размер u32 encrypt; // шифрование 0: нет AES, 1: AES u32 type; // 0: обычный файл, все равно // 1: ключ сертификата // 2: подпись сертификата // 3: бинарный файл u32 run_addr; // если это bin-файл, то запускать по этому адресу; // если нет, то должно быть 0 u32 index; // если это bin-файл, то значение показывает индекс для запуска // если это файл сертификата, он должен быть равен индексу файла bin, // это означает, что они в одной группе // должно быть = 0 для любого другого типа данных u32 reserved[69];// зарезервировано на будущее; u32 end; } Таким образом, общий размер заголовка пакета: В пакете boot_package.fex лежат 4 бинарных файла (точнее, их содержимое):
u-boot, monitor, dtbo, dtb. Для распаковки-упаковки пакета boot_package.fex была использована специально написанная
платформо-независимая утилита с веб-интерфейсом: Как распаковать файл boot_package Примечание. Имеется также консольная утилита под линуксом dragonsecboot, которая умеет упаковывать файлы в пакет boot_package. Кратко о назначении этих файлов (их содержимого): В процессе загрузки системы загрузчик Bооt0 находит массив boot_package в неразмеченной области карты по заданному смещению и извлекает из него содержимое файлов. В логе загрузки это отображается строками: Далее в логе загрузки следуют строки, также имеющие отношение к Secure Monitor: Необходимо отметить, что пакет boot_package.fex является наиболее важным компонентом образа, определяющим особенности "железа" конкретного устройства, т.е. набора компонентов, портов, схемотехники и т.д. Даже для одинаковых моделей могут существовать платы разных ревизий, и в этом случае необходимые изменения вносятся именно в файлы, входящие в состав этого пакета. Поэтому в тех ситуациях, когда по каким-то причинам обнаруживается неработоспособность отдельных функциональных элементов устройства или даже полная несовместимость модифицированного образа с конкретным устройством - "собака зарыта" где-то в этом пакете. |