Представляем процесс упаковки на платформе Allwinner.
Программная платформа Allwinner Tina v3.0 или выше.
Он подходит для клиентов, которым подходит платформа Tina, и разработчиков, которые хотят понять процесс упаковки Tina.
Упаковка прошивки означает запись скомпилированного нами загрузчика, ядра и корневой файловой системы в файл образа. Этот файл образа также называется прошивкой. Затем этот образ можно записать на NAND, флэш- или SD-карту для запуска системы. При упаковке в прошивку необходимо использовать некоторые инструменты упаковки, скрипты упаковки и файлы конфигурации упаковки. В этой статье в основном рассказывается, какие инструменты необходимы для упаковки, какие файлы конфигурации необходимы и процесс создания прошивки.
В этой статье представлены только инструменты, уникальные для упаковки Tina. Другие общие инструменты, такие как unix2dos, можно найти на сайте Baidu. Уникальные инструменты упаковки в tina SDK сохраняются по следующему пути:
tina/tools/pack-bintools/src
Название инструмента | update_mbr |
---|---|
Описание функции | В соответствии с файлом конфигурации раздела обновите файлы основного загрузочного каталога sunxi_mbr.fex, sunxi_gpt.fex и список файлов загрузки раздела dlinfo.fex. |
Как использовать | update_mbr <partition_file> (mbr_count)Если mbr_count не указан, mbr_count = 4;update_mbr <partition_file> <mbr_countnt> <output_name>Это использование должно быть указаноmbr_count,Первоначально вывод sunxi_mbr.fex Он будет переименован в выходное_имя. |
Описание параметра | файл_раздела: файл конфигурации раздела, например sys_partition.binmbr_count: количество резервных копий mbr. Если не указано, значение по умолчанию mbr_count = 4; имя_вывода: изменить выходное имя sunxi_mbr.fex. Такое использование не рекомендуется без особых требований. |
Примеры применения | update_mbr sys_partition.bin 4update_mbr sys_partition.bin 1 sunxi_mbr_tmp.fex (это использование не рекомендуется без особых требований) |
Название инструмента | merge_full_img |
---|---|
Описание функции | Укажите начальный логический адрес, объедините boot0, boot1, mbr и файлы из списка загрузки файлов раздела в пакет прошивки img, который применяется ни к малой емкости, ни к прошивке. В настоящее время понятия о разделении нет. |
Как использовать | merge_full_img –out –boot0 <boot0.fex> –boot1 <boot1.fex> –mbr <mbr.fex> –partition <partition.fex> \–logic_start <512|256>–help |
Описание параметра | –out : Укажите целевой файл вывода –boot0. <boot0.fex>:указанный вводboot0 Файл –boot1 <boot1.fex>:указанный вводboot1 файл-MBR <mbr.fex>:указанный вводmbr файловый раздел <partition.fex>:указанный ввод Раздел Конфигурациядокумент |
–logic_start <512|256>:Укажите начальный логический адрес | |
–help:показывать Как использовать | |
Примеры применения | merge_full_img –out full_img.fex <br/>–boot0 boot0_spinor.fex <br/>–boot1 ${BOOT1_FILE} <br/>–mbr sunxi_mbr.fex <br/>–logic_start ${LOGIC_START} <br/>–partition_file |
(1) Уведомление: Речь идет не о линуксе Универсальный скрипт Инструменты (Linux Скачать скрипт Инструмент для записи терминальных сессий) (2) Это одноименный инструмент, реализованный Quanzhi, инструмент Описание функцииследующее:
Название инструмента | script |
---|---|
Описание функции | Проанализируйте все элементы данных входного текстового файла и сгенерируйте новый двоичный файл для программного анализа. Сгенерированный целевой файл имеет то же имя, что и исходный файл (за исключением суффикса), но суффикс — .bin. |
Как использовать | script <source_file> |
Описание параметра | source_file: входной текстовый файл, их может быть несколько. |
Примеры применения | scriptsys_config.fexscriptsys_partition.fex |
Название инструмента | dragonsecboot |
---|---|
Описание функции | 1) Сгенерируйте файл toc0 на основе указанных ключей. 2) Сгенерируйте файл toc1 на основе указанных ключей и базы cnfbase. 3) Сгенерировать ключи согласно конфигурационному файлу. 4) Упакуйте и сгенерируйте целевой файл в соответствии с конфигурацией файла конфигурации. |
Как использовать | dragonsecboot -toc0 <cfg_file> <version_file>dragonsecboot -toc1 <cfg_file> <version_file>dragonsecboot -key <cfg_file> dragonsecboot -pack <cfg_file> |
Описание параметра | -toc0: означает создание файла toc0 -toc1: означает создание файла toc1 -key: означает создание пакета ключей: означает упаковывание cfg_file: файл конфигурации keypath: путь ключа cnfbase: входной файл cnf_base.cnf version_file: откат защиты встроенного ПО файл конфигурации |
Примеры применения | dragonsecboot -pack boot_package.cfgdragonsecboot -key dragon_toc.cfg keysdragonsecboot -toc0 dragon_toc.cfg keys version_base.mkdragonsecboot -toc1 dragon_toc.cfg keys cnf_base.cnf version_base.mk |
Название инструмента | update_boot0 |
---|---|
Описание функции | Исправьте параметры заголовка boot0 в соответствии с содержимым сценария конфигурации. Исправлены параметры: debug_mode, параметр dram_para, параметр uart, bootcpu, параметр jtag, параметр NAND и т.д. |
Как использовать | update_boot0 <sys_config_file> <storage_type> |
Описание параметра | boot0: файл boot0 sys_config_file: файл конфигурации системы Storage_type: тип носителя |
Примеры применения | update_boot0 boot0_nand.fex sys_config.bin NANDupdate_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARDupdate_boot0 boot0_spinor.fex sys_config.bin SDMMC_CARD |
Название инструмента | update_dtb |
---|---|
Описание функции | Выровняйте двоичный файл dtb дерева устройств Linux до 512 байт, а затем зарезервируйте место. |
Как использовать | update_dtb <dtb_file> <reserve_size> |
Описание параметра | dtb_file: входной двоичный файл дерева устройств Linux. dtb_size: сколько байт зарезервировано для выходного целевого файла. |
Примеры применения | update_dtb sunxi.fex 4096 |
Название инструмента | update_fes1 |
---|---|
Описание функции | Возьмите данные из файла конфигурации системы и исправьте параметры, относящиеся к заголовку fes1. К параметрам коррекции относятся: параметры DRAM, параметры UART, параметры JTAG и т. д. |
Как использовать | update_fes1 <fes1_file> <config_file> |
Описание параметра | fes1_file: исправленный файл FES1 config_file: входной файл конфигурации системы. |
Примеры применения | update_fes1 fes1.fex sys_config.bin |
Название инструмента | signature |
---|---|
Описание функции | Подпишите файл раздела, указанный в MBR для подписи. |
Как использовать | signature <sunxi_mbr_file> <dlinfo_file> |
Описание параметра | sunxi_mbr_file: Входной MBR-файл. dlinfo_file: Файл списка загрузки входного раздела. |
Примеры применения | signature sunxi_mbr.fex dlinfo.fex |
Название инструмента | update_toc0 |
---|---|
Описание функции | Извлеките соответствующие параметры из файла конфигурации системы и исправьте параметры конфигурации toc0. Исправленные параметры включают в себя: DRAM, UART, JTAG, NAND, карту 0, карту 2, безопасные параметры и т. д. |
Как использовать | update_toc0 <toc0_file> <config_file> |
Описание параметра | toc0_file: входной файл toc0 config_file: входной файл конфигурации системы |
Примеры применения | update_toc0 toc0.fex sys_config.bin |
Название инструмента | update_uboot |
---|---|
Описание функции | Извлеките соответствующие параметры из файла конфигурации системы и исправьте параметры заголовка uboot. К параметрам коррекции относятся: параметры UART, параметры TWI, целевые параметры, параметры SDCARD и т. д. |
Как использовать | update_uboot <uboot_file> <config_file>update_uboot -merge <uboot_file> <config_file>update_uboot -no_merge <uboot_file> <config_file> |
Описание параметра | uboot_file: файл uboot, который необходимо обновить config_file: файл конфигурации системы -merge: файл конфигурации системы будет склеен в конце файла uboot -no_merge: файл конфигурации системы не будет склеен в конце файла uboot файл uboot Примечание. Если параметр -no_merge не указан явно, система будет объединена по умолчанию. Файл конфигурации сращивается в конце файла uboot. |
Примеры применения | update_uboot u-boot.fex sys_config.binupdate_uboot -merge u-boot.fex sys_config.binupdate_uboot -no_merge u-boot.fex sys_config.bin |
Название инструмента | update_scp |
---|---|
Описание функции | Извлеките соответствующие параметры из файла конфигурации системы и исправьте параметры заголовка scp (код работы с малым процессором используется только чипами с решениями для небольших процессоров). К параметрам коррекции относятся: параметры UART, параметры драм_пара и т. д. |
Как использовать | update_scp <scp_file> <config_file> |
Описание параметра | uboot_file: файл scp для обновления config_file: файл конфигурации системы |
Примеры применения | update_scp scp.fex sunxi.fex |
Название инструмента | u_boot_env_gen |
---|---|
Описание функции | Проанализируйте файл env, чтобы создать файл двоичных данных env, который сможет распознать uboot. Его функция аналогична стандартному инструменту mkenvimage. |
Как использовать | u_boot_env_gen <env_file> <env_bin_file> |
Описание параметра | env_file: входной файл evn env_bin_file: выходной двоичный файл env |
Примеры применения | u_boot_env_gen env.cfg env.fex |
Название инструмента | fsbuild |
---|---|
Описание функции | Сгенерируйте файлы расширенного формата на основе boot-resource.ini. |
Как использовать | fsbuild <rootfs_config_file> <magic_file> |
Описание параметра | rootfs_config_file: файл конфигурации системы fat. Magic: используется для проверки файловой системы fat. |
Примеры применения | fsbuild boot-resource.ini split_xxxx.fex |
Название инструмента | update_toc1 |
---|---|
Описание функции | Удалите соответствующие параметры из файла конфигурации системы и исправьте параметры конфигурации toc1. Исправленные параметры включают в себя: параметр board_id_simple_gpio (необходимо настроить и включить, и в настоящее время нет решения для его использования). |
Как использовать | update_toc1 <toc1_file> <config_file> |
Описание параметра | toc1_file: входной файл toc1 config_file: входной файл конфигурации системы |
Примеры применения | update_toc1 toc1.fex sys_config.bin |
Название инструмента | programmer_img |
---|---|
Описание функции | Создайте прошивку для носителя mmc. |
Как использовать | programmer_img <boot0_file> <uboot_file> <out_img>programmer_img <mbr_file> <out_img> <in_img> |
Описание параметра | in_img: входной файл или образ boot0_file: файл boot0 uboot_file: файл uboot файл_раздела: файл конфигурации раздела mbr_file: файл sunxi_mbr выходной_img: выходной файл или образ |
Примеры применения | programmer_img boot0_sdcard.fex boot_package.fex ${out_img}programmer_img sys_partition.bin sunxi_mbr.fex ${out_img} ${in_img} |
Название инструмента | dragon |
---|---|
Описание функции | Создайте прошивку на основе файла конфигурации img и файла конфигурации раздела. |
Как использовать | dragon <img_config> <partition_file> |
Описание параметра | img_config: файл конфигурации, описывает формат файла img и содержит список других файлов part_file: файл конфигурации раздела. |
Примеры применения | dragon image.cfg sys_partition.fex |
Название инструмента | sigbootimg |
---|---|
Описание функции | Добавляет сертификат после входного файла и выводит файл с сертификатом. |
Как использовать | sigbootimg –image <input_img> –cert <cert_file> –output <output_img> |
Описание параметра | input_img: входной файл или изображение cert_file: сертификат, соответствующий файлу или изображению output_img: файл или изображение с сертификатом |
Примеры применения | sigbootimg –image boot.fex –cert boot.fex –output boot_sig.fex |
Выполните make -j16 в домашнем каталоге Tina. После завершения компиляции вы можете выполнить команду package для выполнения работы по упаковке. Весь процесс упаковки примерно такой, как показано на рисунке ниже:
В сочетании с приведенным выше анализом блок-схемы упаковки метод упаковки запускается в корневом каталоге Tina SDK:
pack
Окончательно упакованная прошивка помещается в каталог tina/out/platform-{board}/. Команда Pack — это, по сути, команда переменной среды, встроенная в tina SDK.
При использовании tina SDK вам необходимо выполнить команду source build/envsetup.sh. Эта команда экспортирует некоторые команды оболочки, реализованные tina SDK, в текущую оболочку. Откройте скрипт build/envsetup.sh и вы увидите, что в нем реализована функция оболочки:
function pack()
После выполнения команды Pack в корневом каталоге tina в скрипте build/envsetup.sh вызывается функция package(). После установки некоторых параметров функция package() наконец вызывает следующий оператор:
$T/scripts/pack_img.sh -c $chip -p $platform -b $board -d $debug -s $sigmode -m $mode -w
$programmer -v $securemode -i $tar_image -t $T
-c: тип входного чипа. Например: sun8iw18p1.
-p: Платформа ввода, например: tina
-b: решение на уровне входной платы. Например: r328s2-perf1.
-d: введите метод ввода журнала при отладке, например: uart0/card0.
-s: укажите, является ли Пакет безопасной прошивкой, например: none/secure.
-m: является ли ввод обычной прошивкой или дамп прошивки для отладки: нормальный/дамп
-w:
-v: использовать ли безопасную загрузку при входе в пакет. Для tinaSDK этот параметр заменен на -s. Этот параметр является устаревшим или не может быть использован для совместимости.
Обратите внимание на этот параметр
-i:Укажите, следует ли создавать сжатый пакет.none/tar_image,Используется во время отладки,Клиенты не могут Обратите внимание на этот параметр
-t: путь к корневому каталогу Тины
Как видно из вышеизложенного, функция package() наконец вызывает файл сценария tina/scripts/pack_img.sh, который реализует финальный процесс упаковки. В настоящее время сценарий упаковки в основном разделен на 5 этапов (остальные этапы представляют собой специальную обработку), а именно:
do_prepare
do_ini_to_dts
do_common
do_pack_tina
do_finish
На этом этапе действие копирования файла завершено. При упаковке необходимо скопировать несколько файлов в каталог tina/out/xxxplatform/image. Скрипт на данный момент их классифицирует, а именно:tools_file_list, configs_file_list, boot_resource_list и boot_file_list, boot_file_secure, a64_boot_file_secure. Если есть новые файлы, их можно классифицировать по. одну из категорий. Или создайте новые классы, и эти файлы будут использоваться в последующей упаковке.
function do_prepare()
{
......
#Копировать инструменты_file_list Файлы классов в tina/out/xxxplatform/image в каталоге
printf "copying tools file\n"
for file in ${tools_file_list[@]} ; do
cp -f $file ${ROOT_DIR}/image/ 2> /dev/null
done
......
#Копировать список_файлов_конфигураций Файлы классов в tina/out/xxxplatform/image в каталоге
printf "copying configs file\n"
for file in ${configs_file_list[@]} ; do
cp -f $file ${ROOT_DIR}/image/ 2> /dev/null
done
......
#Копировать boot_resource_list Файлы классов в tina/out/xxxplatform/image в каталоге
printf "copying boot resource\n"
#Копируем разные boot_file_secure в соответствии с разными архитектурами рук Файлы классов в tina/out/xxxplatform/image в каталоге
#32-битная система
printf "copying secure boot file\n"
for file in ${boot_file_secure[@]} ; do
cp -f `echo $file | awk -F: '{print $1}'` \
${ROOT_DIR}/`echo $file | awk -F: '{print $2}'`
done
# 64-битная система
printf "copying arm64 secure boot file\n"
for file in ${a64_boot_file_secure[@]} ; do
cp -f `echo $file | awk -F: '{print $1}'` \
${ROOT_DIR}/`echo $file | awk -F: '{print $2}'`
done
}
В linux-3.10 была представлена концепция дерева устройств Linux. На этом этапе в основном компилируется и генерируется файл sunxi.dtb, описывающий дерево устройств. Этот файл будет анализироваться во время процесса запуска ядра Linux, и модули драйверов устройств каждого периферийного устройства загружаются в соответствии со списком устройств в файле. Конкретный анализ реализации заключается в следующем:
function do_ini_to_dts()
{
if [ "x${PACK_KERN}" == "xlinux-3.4" ] ;
then return
fi
......
#Установите разные параметры в соответствии с разными ядрами и, наконец, вызовите следующую команду для компиляции и генерации .dbt документ
$DTC_COMPILER ${DTC_FLAGS} -O dtb -o ${ROOT_DIR}/image/sunxi{SUFFIX}.dtb \
-b 0\
-i $DTC_SRC_PATH\
-F $DTC_INI_FILE\
-d $DTC_DEP_FILE $DTC_SRC_FILE &int> /dev/null
if [ $? -ne 0 ]; then
pack_error "Conver script to dts failed" exit 1
fi
printf "Conver script to dts ok.\n"
......}
На этом этапе завершается общий для всех системных платформ парсинг файлов и упаковка разделов. Конкретный анализ реализации заключается в следующем. (Последовательность кода не соответствует сценарию, в основном для удобства объяснения. Этот этап связан с носителем информации, версией ядра и т. д.). Поэтому он более сложен, но в основном включает в себя следующие 5 этапов: (1) С помощью инструмента unix2dos убедитесь, что текстовый файл имеет формат DOS. (2) Используйте инструмент-скрипт для анализа текстового файла и создания соответствующего двоичного файла для облегчения последующего анализа инструмента. (3) Обновите параметры заголовков boot0, uboot и scp. (4) Создайте boot_package. (5) Создайте данные раздела env env.fex. Конкретный анализ реализации заключается в следующем:
function do_common()
{
busybox unix2dos sys_config.fex
busybox unix2dos sys_partition.fex
busybox unix2dos sys_partition_nor.fex
#использовать скрипт Программа анализирует текст документаsys_config.fex и sys_partition.fex/sys_partition_nor.fex
#Сгенерировать соответствующий двойной файлsys_config.bin и sys_partition.bin Облегчает последующий анализ инструментальной программы
script sys_config.fex > /dev/null
script sys_partition.fex > /dev/null
script sys_partition_nor.fex > /dev/null
#Согласно sys_config.bin Параметры, вынимаем DRAM, UART Подождите, пока параметры обновятся boot0 Параметры заголовка
update_boot0 boot0_nand.fex sys_config.bin NAND > /dev/null
update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD > /dev/null
#Согласно sys_config.bin Настройки параметров, обновление uboot Параметры заголовка
update_uboot u-boot.fex sys_config.bin > /dev/null
#Согласно sys_config.bin Настройка параметров, обновление fes1.fex параметр
update_fes1 fes1.fex sys_config.bin > /dev/null
#Создаем образ раздела ресурсов, связанных с процессом запуска
fsbuildboot-resource.inisplit_xxxx.fex > /dev/null
#Создаем uboot на основе конфигурации Базовая конфигурациядвоичный файлenv.fex
mkenvimage -r -p 0x00 -s ${env_size} -o env.fex env_burn.cfg
u_boot_env_gen env.cfg env.fex > /dev/null
#Сгенерировать boot_package на основе конфигурации boot_package.cfg
echo "pack boot package"
busybox unix2dos boot_package.cfg
dragonsecboot -pack boot_package.cfg
}
Этот этап завершает работу, специфичную для текущей системной платформы, и работу, связанную с безопасностью, в основном программные ссылки на файлы ядра, файловые системы и т. д., а также подпись защитного программного обеспечения и генерацию toc0. Конкретный анализ реализации заключается в следующем:
function do_pack_tina()
{
#Мягкая ссылка boot.fex, rootfs.fex
ln -s ${ROOT_DIR}/boot.img boot.fex
ln -s ${ROOT_DIR}/rootfs.img rootfs.fex
......
#Если вам нужно превратить его в безопасную прошивку, будет вызвана функция do_signature.
do_signature
{
#Создать toc0документ
dragonsecboot -toc0 dragon_toc.cfg ${ROOT_DIR}/keys ${ROOT_DIR}/image/version_base.
mk
#Согласно sys_config.bin параметр,Удалить DRAM,UART Подождите, пока параметр обновится toc0 Параметры заголовка
update_toc0 toc0.fex sys_config.bin
......
#Создать toc1документ
dragonsecboot -toc1 dragon_toc.cfg ${ROOT_DIR}/keys \
${CNF_BASE_FILE} \
${ROOT_DIR}/image/version_base.mk
#Подписываем ядро
sigbootimg --image boot.fex --cert toc1/cert/boot.der --output boot_sig.fex
#Согласно sys_config.bin параметр,Удалить DRAM,UART равный параметр updatetoc1 Параметры заголовка
update_toc1 toc1.fex sys_config.bin
}
}
На этом этапе завершается упаковка согласно указанным участникам прошивки. Конкретный анализ реализации заключается в следующем:
function do_finish()
{
......
#Сгенерировать структуру разделов documentsunxi_mbr.fex и список документов загрузки раздела documentdlinfo.fex
update_mbr sys_partition.bin 4 > /dev/null
#На основе указанного членского документа и информации о разделах,Комбинация завершена Пакет
изображение дракона.cfg sys_partition.fex
...
}
В предыдущей главе было описано несколько этапов упаковки скриптов. В этом разделе мы рассмотрим процесс упаковки с другой точки зрения. Процесс упаковки заключается в том, чтобы взять скомпилированный двоичный образ и различные файлы конфигурации и, наконец, с помощью некоторой обработки, преобразования и синтеза создать пакет прошивки. Как показано на рисунке ниже, здесь описано, где находятся различные файлы, которые необходимо упаковать, как они будут обработаны, какие файлы будут синтезированы и конечный продукт. Становится пакетом прошивки.
Синие — это исходные файлы или сгенерированные промежуточные файлы; Зеленые — инструменты, используемые для упаковки; Красный — это последняя сгенерированная прошивка. Пожалуйста, обратитесь к следующей главе, чтобы узнать, какие файлы включены в прошивку. Вот еще одно изображение, на котором вы можете увидеть роль упаковки и потока данных с общей точки зрения Tina SDK.
Сущность пакета прошивки состоит из серии файлов, аналогично сжатому пакету. В пакет прошивки сжимается несколько файлов. Здесь файлы, которые необходимо добавить в пакет встроенного ПО, перечислены в описательном файле конфигурации (image.cfg). Затем процесс упаковки считывает этот файл конфигурации и генерирует окончательный пакет встроенного ПО. Из функции do_finish мы можем узнать, что инструментом для создания прошивки является дракон. Для инструмента дракона требуются два файла конфигурации: image.cfg и sys_partition.fex. Эти два файла конфигурации будут проанализированы ниже.
Откройте файл tina/out/xxxplatform/image/image.cfg в текстовом режиме, и вы увидите следующее содержимое:
[FILELIST]
{filename = "sys_config.fex", maintype = ITEM_COMMON, subtype = "
SYS_CONFIG100000",},
{filename = "config.fex", maintype = ITEM_COMMON, subtype = "
SYS_CONFIG_BIN00",},
{filename = "board.fex", maintype = ITEM_COMMON, subtype = "
BOARD_CONFIG_BIN",},
{filename = "split_xxxx.fex", maintype = ITEM_COMMON, subtype = "
SPLIT_0000000000",},
{filename = "sys_partition.fex", maintype = ITEM_COMMON, subtype = "
SYS_CONFIG000000",},
{filename = "sunxi.fex", maintype = ITEM_COMMON, subtype = "
DTB_CONFIG000000",},
{filename = "boot0_nand.fex", maintype = ITEM_BOOT, subtype = "
BOOT0_0000000000",},
{filename = "boot0_sdcard.fex", maintype = "12345678", subtype = "1234567890
BOOT_0",},
{filename = "u-boot.fex", maintype = "12345678", subtype = "
UBOOT_0000000000",},
{filename = "toc1.fex", maintype = "12345678", subtype = "
TOC1_00000000000",},
{filename = "toc0.fex", maintype = "12345678", subtype = "
TOC0_00000000000",},
{filename = "fes1.fex", maintype = ITEM_FES, subtype = "FES_1
-0000000000",},
{filename = "boot_package.fex", maintype = "12345678", subtype = "BOOTPKG
-00000000",},
;----------------------------------USB-деталь массового производства----------- --- -----------------------;
;-->toolsдокумент
{filename = "usbtool.fex", maintype = "PXTOOLSB", subtype = "
xxxxxxxxxxxxxxxx",},
{filename = "aultools.fex", maintype = "UPFLYTLS", subtype = "
xxxxxxxxxxxxxxxx",},
{filename = "aultls32.fex", maintype = "UPFLTL32", subtype = "
xxxxxxxxxxxxxxxx",},
;-----------------------------------Часть массового производства карт ----------- --- --------------------------;
;-->зафиксированныйPCиспользовать
{filename = "cardtool.fex", maintype = "12345678", subtype = "1234567890
cardtl",},
{filename = "cardscript.fex", maintype = "12345678", subtype = "1234567890
script",},
;-->Нужно записать на картудокумент
{filename = "sunxi_mbr.fex", maintype = "12345678", subtype = "1234567890
___MBR",},
{filename = "dlinfo.fex", maintype = "12345678", subtype = "1234567890
DLINFO",},
{filename = "arisc.fex", maintype = "12345678", subtype = "1234567890
ARISC" ,},
;Информация о конфигурации зеркала
[IMAGE_CFG]
version = 0x100234 ;-->Imageверсия
pid = 0x00001234 ;-->продуктID
vid = 0x00008743 ;-->поставщикID
hardwareid = 0x100 ;-->аппаратное обеспечениеID bootrom
firmwareid = 0x100 ;-->прошивкаID bootrom
bootromconfig = "bootrom_071203_00001234.cfg"
rootfsconfig = "rootfs.cfg"
filelist = FILELIST
imagename = tina_XXXXXX.img
Формат этого элемента файла:
filename= name,maintype=ITEM_ROOTFSFAT16,subtype = user_define
Когда пользователям необходимо добавить файлы, они могут записать нужные им файлы в файл сценария в том же формате.
• имя файла: упакованный файл относится к полному пути к файлу. Можно использовать относительные пути, как и в приведенных выше файлах, используются относительные пути. • основной тип: формат упаковки Указывает тип формата файла, который имеет список определений для этого типа. • подтип: произвольное имя В определяемом пользователем имени используются цифры и английские символы (с учетом регистра), а максимальная длина должна составлять 16 байт. Если вы напишете его в соответствии с вышеуказанными правилами и поместите после [FILELIST] файла, файл будет автоматически добавлен в пакет прошивки при его упаковке. В следующей таблице описана роль каждого члена встроенного ПО в файле image.cfg.
Помимо файлов, перечисленных в файле image.cfg, прошивка также содержит файлы для разделов, перечисленных в sys_partition.fex. Откройте sys_partition.fex с помощью текстового файла, и вы увидите следующее содержимое (основных разделов 3, таблица разделов может быть разной в разных решениях, также пользователи могут добавлять свои собственные разделы):
[partition_start]
[partition]
name = env
size = 32768
downloadfile = "env.fex"
user_type = 0x8000
[partition]
name = boot
size = 131072
downloadfile = "boot.fex"
user_type = 0x8000
[partition]
name = rootfs
size = 1048576
downloadfile = "rootfs.fex"
user_type = 0x8000
Это файл для планирования разделов диска. К атрибутам раздела относятся следующие: • Имя раздела • Размер раздела • Загруженные файлы • Атрибуты пользователя для разделов.
Ниже приведены свойства раздела, описанные в файле: • имя: имя раздела Имя раздела определяется пользователем. Когда пользователи определяют раздел, они могут изменить его на нужную строку, но длина не может превышать 16 байт. • размер: размер раздела Определяет размер этого раздела в секторах. • downloadfile: загруженный файл Путь и имя загруженного файла могут быть относительными — относительно раздела, в котором находится файл image.cfg, или. Используйте абсолютные пути. • user_type: атрибут пользователя раздела.
В настоящее время этот флаг используется только файловой системой UBI спин-энда. Это историческая проблема. Клиенты могут игнорировать его и заполнять в соответствии с разделом в документе (например, 0x8000). В следующей таблице описаны файлы в разделе, указанном в файле sys_partition.fex.
члены прошивки | Роль участника |
---|---|
env.fex | Базовый файл конфигурации u-boot |
boot.fex | Мягкая ссылка boot.img, созданная tina SDK, в основном содержит ядро. |
rootfs.fex | Мягкая ссылка на образ rootfs, созданный tina SDK, корневая файловая система |
Из-за различий в решениях некоторые решения требуют получения файла образа каждого раздела, а не всего пакета записи прошивки Allwinner. Эти образы разделов можно в основном использовать для OTA-обновлений или для создания собственной прошивки для записи. По этой причине Tina SDK предоставляет метод организации и вывода файлов изображений разделов, и в то же время выходные данные можно снова упаковать без Tina SDK. Его можно легко пересадить в ваш SDK для вторичной модификации и переупаковки.
Вышеупомянутые функции должны включить функцию [pack out of tina]
make meunconfig
Target Image -->
[*] support pack out of tina
После включения функции [pack out of tina] просто упакуйте напрямую и вы увидите, что в приглашении на печать сгенерирована дополнительная папка:
схема out/xx/aw_pack_src
./aw_pack_src
|--aw_pack.sh #Выполните этот скрипт для создания прошивки в каталоге aw_pack_src/out/
|--config #Пакет Конфигурациядокумент
|--image #различныйзеркальныйдокумент,Сменный,Но вы не можете изменить название документа.
| |--boot0_nand.fex #nand media boot0 образ
| |--boot0_sdcard.fex #SDcardboot0image
| |--boot0_spinor.fex #normediaboot0image
| |--boot0_spinor.fex #normediaboot0image
| |--boot_package.fex Образ #nand и SD-карты uboot
| |--boot_package_nor.fex #normediaubootmirror
| |--env.fex #env зеркало переменной среды
| |--boot.fex #Образ ядра
| |--rootfs.fex #rootfsmirror
|--other Другой документ, требуемый #Пакет
|--out #Каталог создания прошивки
|--tmp Временный каталог, используемый #Пакет
|--rootfs #Сохраните tar.gzПакет rootfs для вторичной модификации.
|--tools #инструмент
|--lib_aw #Копируем библиотеку документа плана всей книги,Например, мультимедийные компоненты Eyeempp и т. д., скомпилированные и связанные для прикладных приложений (эти библиотеки не выбраны).,Тогда ты сможешь
Может быть пустым (документ)
|--README #Некоторая информация о решениях уровня платыиллюстрировать,Например, расположение разделов и т. д.(никтоиллюстрировать Нет такой вещидокументпапка)。
• Вопрос 1. Размер файла образа превышает запланированный размер раздела.
...
ERROR: dl file rootfs.fex size too large
ERROR: filename = rootfs.fex
ERROR: dl_file_size = 5888 sector
ERROR: part_size = 4864 sector
ERROR: update mbr file fail
ERROR: update_mbr failed
A: Это указывает на rootfs rootfs.fex, связанный с разделом Файл изображения (dl_file_size: 5888 x 512 byte) Размер больше, чем размер плана разделов (part_size = 4864 x 512 byte) Нужно sys_partition.fex (NOR Случай: sys_partition_nor.fex) Измените размер раздела внутри, чтобы можно было установить размер образа раздела. иллюстрировать
sys_partition.fex Разделы внутри необходимо выровнять в соответствии с размером блока стирания флэш-памяти. Например СПИНОР Flash, Должно быть основано на 64K
чтобы выровнять.
• Вопрос 2: указанный образ раздела не найден.
...
ERROR: unable to open file usr.fex
update_for_part_info -1
ERROR: update mbr file fail
ERROR: update_mbr failed
A: Эта ошибка иллюстрировать. Установленный вами раздел указывает зеркальный документ раздела.,Но в Пакеткогдане найдено。такusr.fex Необходимо включить [CONFIG_SUNXI_SMALL_STORAGE_OTA] Он будет сгенерирован автоматически. Для других самостоятельно созданных файлов изображений разделов измените суффикс на xx.fex. И поместите следующий каталог для автоматического поиска:
device/config/chips/${TARGET_PLATFORM}/configs/${TARGET_PLAN}/linux
Или в sys_partition.fex(NOR направление Случай: sys_partition_nor.fex) Напишите абсолютный путь внутри
...
downloadfile = "/home/aw1315/img/DIY.fex"
• Вопрос 3: параметр раздела схемы NOR слишком велик.
...
load file: env_nor.fex ok
load file: bootlogo.fex ok
error:offset(67252224) is too large MAX_IMAGE_SIZE:67108864!
merge_package fail
...
scripts/pack_img.sh: line 1441: 73617 Segmentation fault (core dumped) merge_full_img
--out full_img.fex --boot0 boot0_spinor.fex --boot1 ${BOOT1_FILE} --mbr ${mbr_file} --
logic_start ${LOGIC_START} --uboot_start ${UBOOT_START} --partition sys_partition_nor.
bin
ERROR: merge_full_img failed
О: В двух приведенных выше случаях разделы, установленные в sys_partition_nor.fex, слишком велики, и их размер должен быть соответствующим. Учитывая, что SPINOR Flash не будет превышать 64М, такое ограничение было введено. Это тоже недостаток приложения merge_full_img. Если вам действительно нужно запаковать такую большую прошивку Nor, возможно, вам придется закомментировать инструмент merge_full_img.
#create img for nor programmer
merge_full_img --out full_img.fex \
--boot0 boot0_spinor.fex \
--boot1 ${BOOT1_FILE} \
--mbr ${mbr_file} \
--logic_start ${LOGIC_START} \
--uboot_start ${UBOOT_START} \
--partition sys_partition_nor.bin
if [ $? -ne 0 ]; then
pack_error "merge_full_img failed"
exit 1
fi
будут скрипты/pack_img.sh Там, где есть два места с приведенными выше командами, используйте «#» Просто закомментируйте номер. иллюстрировать merge_full_img Он используется только для прошивки записывающего устройства и не влияет на генерацию прошивки Allwinner.
(1) Последним инструментом для упаковки и создания прошивки является дракон. (2)dragon Требуются инструменты 2 Файлы конфигурации image.cfg, sys_partition.fex. (3)dragon Инструмент основан на image.cfg. и sys_partition.fex Описывает упаковку файлов прошивки. (4) Весь процесс упаковки по сути представляет собой обработку image.cfg. и sys_partition.fex файл, описанный в. (5) Весь процесс упаковки можно просто понять следующим образом: 3 шаги: • Создайте или скопируйте image.cfg и sys_partition.fex файл описания. • Выполните некоторую промежуточную обработку описанного файла, например обновление некоторых конфигураций в файле и т. д. e_full_img --out full_img.fex –boot0 boot0_spinor.fex –boot1 {BOOT1_FILE} –mbr {mbr_file} –logic_start {LOGIC_START} –uboot_start {UBOOT_START} –partition sys_partition_nor.bin if [
будут скрипты/pack_img.sh Там, где есть два места с приведенными выше командами, используйте «#» Просто закомментируйте номер.
**иллюстрировать**
**merge_full_img Он используется только для прошивки записывающего устройства и не влияет на генерацию прошивки Allwinner.**
# 7 Краткое описание процесса упаковки
(1) Последним инструментом для упаковки и создания прошивки является дракон.
(2)dragon Требуются инструменты 2 Файлы конфигурации image.cfg, sys_partition.fex.
(3)dragon Инструмент основан на image.cfg. и sys_partition.fex Описывает упаковку файлов прошивки.
(4) Весь процесс упаковки по сути представляет собой обработку image.cfg. и sys_partition.fex файл, описанный в.
(5) Весь процесс упаковки можно просто понять следующим образом: 3 шаги:
• Создайте или скопируйте image.cfg и sys_partition.fex файл описания.
• Выполните некоторую промежуточную обработку описанного файла, например обновление некоторых конфигураций в файле и т. д.
• использовать дракона Инструмент генерирует финальную прошивку.