餐饮 公司 网站建设wordpress教育培训模板
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:08
当前位置: 首页 > news >正文
餐饮 公司 网站建设,wordpress教育培训模板,工业设计和产品设计有什么区别,广州seo优化公司OpenRemoved_Tina_Linux_打包流程_说明指南_new
1 概述
1.1 编写目的
介绍Allwinner 平台上打包流程。
1.2 适用范围
Allwinner 软件平台Tina v3.0 版本以上。
1.3 相关人员
适用Tina 平台的广大客户#xff0c;想了解Tina 打包流程的开发人员。
2 固件打包简介
固件…OpenRemoved_Tina_Linux_打包流程_说明指南_new
1 概述
1.1 编写目的
介绍Allwinner 平台上打包流程。
1.2 适用范围
Allwinner 软件平台Tina v3.0 版本以上。
1.3 相关人员
适用Tina 平台的广大客户想了解Tina 打包流程的开发人员。
2 固件打包简介
固件打包是指将我们编译出来的bootloader、内核和根文件系统一起写到一个镜像文件中这个镜像文件也叫固件。然后可以将这个镜像写到nand、nor flash 或是sd 卡上从而启动系统。打包成固件时需要使用到一些打包工具打包脚本以及打包配置文件。本文主要就是介绍打包时需要哪些工具需要哪些配置文件以及固件的生成流程。
3 打包工具介绍
本文只介绍Tina 打包时特有的工具其他通用工具如unix2dos 等请自行百度。在tina SDK 中特有的打包工具保存在如下路径
tina/tools/pack-bintools/src3.1 update_mbr
工具名称update_mbr功能说明根据分区配置文件更新主引导目录文件sunxi_mbr.fex sunxi_gpt.fex及分区的下载文件列表dlinfo.fex 。使用方法update_mbr partition_file (mbr_count)如果不指定mbr_countmbr_count 4;update_mbr partition_file mbr_countnt output_name使用此用法必须指定mbr_count本来输出的sunxi_mbr.fex 会改名为output_name。参数说明partition_file分区配置文件如sys_partition.binmbr_countmbr 的备份数量如果不指定缺省mbr_count 4;output_name修改sunxi_mbr.fex 的输出名没有特殊需求不建议使用此用法。应用举例update_mbr sys_partition.bin 4update_mbr sys_partition.bin 1 sunxi_mbr_tmp.fex没有特殊需求不建议使用此用法
3.2 merge_full_img
工具名称merge_full_img功能说明指定起始逻辑地址把boot0boot1mbr 及分区文件下载列表里的文件合并成img 固件包应用于小容量的nor flash。此时没有分区的概念。使用方法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 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
3.3 script
(1) 注意: 此处讲述的不是Linux 通用的script 工具Linux 下script 工具用于终端会话录制 (2) 它是全志实现的一个同名工具工具功能说明如下
工具名称script功能说明解析输入文本文件的所有数据项生成新的二进制bin 文件以便程序解析。生成的目标文件与源文件名字(除后缀) 一样但后缀为.bin。使用方法script source_file参数说明source_file输入的文本文件可多个应用举例scriptsys_config.fexscriptsys_partition.fex
3.4 dragonsecboot
工具名称dragonsecboot功能说明1) 根据指定的keys 生成toc0 文件。2) 根据指定的keys 和cnfbase 生成toc1 文件。3) 根据配置文件生成keys。4) 按配置文件的配置进行打包生成目的文件。使用方法dragonsecboot -toc0 cfg_file version_filedragonsecboot -toc1 cfg_file version_filedragonsecboot -key cfg_file dragonsecboot -pack cfg_file参数说明-toc0表示要生成toc0 文件-toc1表示要生成toc1 文件-key表示要生成key-pack表示进行打包cfg_file配置文件keypathkey 的路径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
3.5 update_boot0
工具名称update_boot0功能说明根据配置脚本内容修正boot0 头部的参数。修正参数debug_mode、dram_para 参数、uart 参数、bootcpu、jtag 参数、NAND 参数等。使用方法update_boot0 sys_config_file storage_type参数说明boot0boot0 文件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
3.6 update_dtb
工具名称update_dtb功能说明把Linux 设备树二进制dtb 文件进行512 字节对齐后再预留空间。使用方法update_dtb dtb_file reserve_size参数说明dtb_file输入的Linux 设备树二进制dtb 文件reserve_size输出目标文件预留多少字节应用举例update_dtb sunxi.fex 4096
3.7 update_fes1
工具名称update_fes1功能说明从系统配置文件中取出数据对fes1 头部相关参数进行修正。修正参数包括DRAM 参数、UART 参数、JTAG 参数等。使用方法update_fes1 fes1_file config_file参数说明fes1_file更修正的FES1 文件config_file输入的系统配置文件应用举例update_fes1 fes1.fex sys_config.bin
3.8 signature
工具名称signature功能说明对MBR 指定要进行签名的分区文件进行签名。使用方法signature sunxi_mbr_file dlinfo_file参数说明sunxi_mbr_file输入的MBR 文件dlinfo_file输入的分区下载列表文件应用举例signature sunxi_mbr.fex dlinfo.fex
3.9 update_toc0
工具名称update_toc0功能说明从系统配置文件中取出相关参数对toc0 配置参数进行修正修正参数包括DRAM、UART、JTAG、NAND、卡0 、卡2 、secure 参数等。使用方法update_toc0 toc0_file config_file参数说明toc0_file输入的toc0 文件config_file输入的系统配置文件应用举例update_toc0 toc0.fex sys_config.bin
3.10 update_uboot
工具名称update_uboot功能说明从系统配置文件中取出相关参数对uboot 头部参数进行修正。修正参数包括UART 参数、TWI 参数、target 参数、SDCARD 参数等。使用方法update_uboot uboot_file config_fileupdate_uboot -merge uboot_file config_fileupdate_uboot -no_merge uboot_file config_file参数说明uboot_file要更新的uboot 文件config_file系统配置文件-merge系统配置文件会拼接在uboot 文件尾部-no_merge系统配置文件不会拼接在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
3.11 update_scp
工具名称update_scp功能说明从系统配置文件中取出相关参数对scp 小cpu 运行代码只有带有小cpu 方案的芯片会用到头部参数进行修正。修正参数包括UART 参数、dram_para 参数等。使用方法update_scp scp_file config_file参数说明uboot_file要更新的scp 文件config_file系统配置文件应用举例update_scp scp.fex sunxi.fex
3.12 u_boot_env_gen
工具名称u_boot_env_gen功能说明解析env 文件生成uboot 能识别的env 二进制数据文件功能与标准的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
3.13 fsbuild
工具名称fsbuild功能说明根据boot-resource.ini 生成fat 格式文件。使用方法fsbuild rootfs_config_file magic_file参数说明rootfs_config_filefat 系统配置文件magic用于fat 文件系统校验应用举例fsbuild boot-resource.ini split_xxxx.fex
3.14 update_toc1旧版本工具后面会弃用可以不理会
工具名称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
3.15 programmer_img
工具名称programmer_img功能说明生成mmc 介质的烧录固件。使用方法programmer_img boot0_file uboot_file out_imgprogrammer_img mbr_file out_img in_img参数说明in_img输入的文件或镜像boot0_fileboot0 文件uboot_fileuboot 文件partition_file分区配置文件mbr_filesunxi_mbr 文件output_img输出的文件或镜像应用举例programmer_img boot0_sdcard.fex boot_package.fex \({out_img}programmer_img sys_partition.bin sunxi_mbr.fex \){out_img} \({in_img}
3.16 dragon
工具名称dragon功能说明根据img 配置文件和分区配置文件生成固件。使用方法dragon img_config partition_file参数说明img_config配置文件描述img 文件格式和包含其他文件列表partition_file分区配置文件应用举例dragon image.cfg sys_partition.fex
3.17 sigbootimg
工具名称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
4 打包脚本分析
4.1 脚本的调用流程
在Tina 主目录下执行make -j16 编译完成后便可以执行pack 进行打包工作整个打包过程大概如下图所示 结合上面的打包流程图分析打包方法在Tina SDK 根目录下运行
pack最终打包出来的固件放在目录tina/out/platform−{board}/下。pack 命令实质上是tina SDK 内置的一个环境变量命令。
在使用tina SDK 时需要执行source build/envsetup.sh 这个命令。这个命令是把tina SDK 实现的一些shell 命令export 到当前shell 中。 打开build/envsetup.sh 脚本可以发现里面实现了一个shell 函数
function pack()在tina 根目录下执行pack 命令后调用到的就是build/envsetup.sh 脚本中的function pack()函数function pack() 函数进行一些参数设置后最终调用到以下语句
\)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输入调试时log输入方式例如uart0/card0
-s输入是否打包成安全固件例如none/secure
-m输入是正常固件还是调试用的dump固件normal/dump
-w
-v输入打包时是否使用安全boot对于tinaSDK来说该参数功能已由-s替代参数只是历史遗留或做兼容用客户可以不
用理会该参数
-i输入是否制作压缩包none/tar_image调试时用客户可以不用理会该参数
-tTina根目录的路径从上面可以看出function pack() 函数最终调用到tina/scripts/pack_img.sh 这个脚本文件这个脚本文件实现了打包的最终流程。 目前打包脚本主要分为5 个阶段其他阶段都是一些特殊化处理分别是
do_prepare
do_ini_to_dts
do_common
do_pack_tina
do_finish4.2 打包的各阶段分析
4.2.1 do_prepare 阶段
此阶段完成文件拷贝动作。打包时需要拷贝若干文件到tina/out/xxxplatform/image 目录下目前脚本对其进行了分类分别是tools_file_listconfigs_file_listboot_resource_list 和boot_file_listboot_file_securea64_boot_file_secure 如有新增文件可以归入其中一类或者创建新类后续打包会使用到这些文件。
function do_prepare()
{
……
#拷贝tools_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
......
#拷贝configs_file_list 类文件到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
#根据不同的arm架构拷贝不同的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
}4.2.2 do_ini_to_dts 阶段
在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
......}4.2.3 do_common 阶段
此阶段完成所有系统平台通用的文件解析分区打包。具体实现分析如下。(代码顺序与脚本的不一致主要是为了方便说明)该阶段与存储介质、内核版本等有耦合。因此比较复杂但主要包括下面的5 个阶段 (1) 使用unix2dos 工具确保文本文件为dos 格式。 (2) 使用script 工具解析文本文件生成对应的二进制文件便于后续工具解析。 (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
#使用script 程序解析文本文件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.cfg配置生成boot_package
echo pack boot package
busybox unix2dos boot_package.cfg
dragonsecboot -pack boot_package.cfg
}4.2.4 do_pack_tina 阶段
此阶段完成当前系统平台特有的工作以及安全相关的工作主要对内核文件文件系统等进行软链接以及安全件的签名和toc0 的生成。 具体实现分析如下
function do_pack_tina()
{
#软链接boot.fexrootfs.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 参数取出DRAMUART 等参数更新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 参数取出DRAMUART 等参数更新toc1 头部参数
update_toc1 toc1.fex sys_config.bin
}
}4.2.5 do_finish 阶段
此阶段根据指定的固件成员完成打包。具体实现分析如下
function do_finish()
{
......
#生成分区结构文件sunxi_mbr.fex 及分区下载文件列表文件dlinfo.fex
update_mbr sys_partition.bin 4 /dev/null
#根据所列的成员文件及分区信息,组合完成打包
dragon image.cfg sys_partition.fex
......
}4.3 打包过程数据流分析
上一章节讲述了打包脚本的几个阶段本节我们换个视角看打包过程。打包过程是将编译好后的二进制镜像和各种配置文件通过一些加工、转换和合成最终生成固件包。如下图所示讲述了需要打包的各种文件在哪个位置会经过如何处理合成什么文件最终生 成了固件包。 其中蓝色的是源文件或者生成的中间文件 绿色的是打包用到的工具 红色的是最终生成的固件。 固件里面包含哪些文件可以参考下一章节。 这里展示另一张图可以从Tina SDK 全局看打包的作用位置以及数据的流动。 4.4 固件组成成员分析
固件包本质是由一系列的文件组成类似于一个压缩包把多个文件压缩成了一个固件包。这里通过一个描述性的配置文件(image.cfg)把需要添加到固件包的文件枚举出来。然后打包过程就读取这个配置文件生成了最终的固件包。由do_finish 函数可以知道生成固件的工具是dragondragon 工具需要2 个配置文件image.cfg 和sys_partition.fex下面将会分析这2个配置文件。
4.4.1 image.cfg 配置文件分析
用文本方式打开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,maintypeITEM_ROOTFSFAT16,subtype user_define当用户需要添加文件的时候按照同样的格式把自己需要的文件写到脚本文件中即可。
• filename打包文件 是指文件的全路径。可以使用相对路径如上述文件中就使用了相对路径。 • maintype打包格式 表明文件的格式类型该文件有此类型定义的列表。 • subtype自定义名称 用户自己定义的名称使用数字和英文字符(区分大小写)最大长度必须为16 字节。只要按照上述规则书写并放到文件的[FILELIST] 之后等到打包的时候就会自动把文件添加到固件包中。 下表描述image.cfg 文件中的各固件成员的作用。 4.4.2 sys_partition.fex 配置文件分析
除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这是一个规划磁盘分区的文件一个分区的属性有如下几项 • 分区名称 • 分区的大小 • 下载的文件 • 分区的用户属性
以下是文件中所描述的一个分区的属性 • name分区名称 分区名称由用户自定义。当用户在定义一个分区的时候可以把这里改成自己希望的字符串但是长度不能超过16 个字节。 • size: 分区的大小 定义该分区的大小以扇区的单位。 • downloadfile: 下载的文件 下载文件的路径和名称可以使用相对路径相对是指相对于image.cfg 文件所在分区也可以 使用绝对路径。 • user_type: 分区的用户属性
目前该标志位只有spi nand 的ubi 文件系统还在使用是历史遗留问题客户可以不理会仿照文档中的分区填写即可例如0x8000。 下表描述了sys_partition.fex 文件指定的分区里的文件。
固件成员成员作用env.fexu-boot 的基本配置文件boot.fextina SDK 生成的boot.img 的软链接主要包含kernelrootfs.fextina SDK 生成的rootfs 镜像的软链接根文件系统
5 获得打包后的分区镜像文件
由于方案的差异化不同一些方案需要获取到每个分区的镜像文件而非全志的整个固件烧录包。这些分区镜像可能主要用来做OTA 升级或者创建自己的烧录固件。 出于这方面考虑Tina SDK 提供一种可以将分区镜像文件整理输出同时输出后的可以脱离Tina SDK 再次进行打包的方法。方便可移植到贵方SDK 中进行二次修改和再次打包。
5.1 开启[pack out of tina] 功能
上述功能需要开启[pack out of tina] 功能
make meunconfig
Target Image --
[*] support pack out of tina开启[pack out of tina] 功能后直接pack 即可看到打印提示多生成了一个文件夹
out/xx方案/aw_pack_src5.2 aw_pack_src 目录介绍
./aw_pack_src
|--aw_pack.sh #执行此脚本即可在aw_pack_src/out/目录生成固件
|--config #打包配置文件
|--image #各种镜像文件可替换但不能改文件名
| |--boot0_nand.fex #nand介质boot0镜像
| |--boot0_sdcard.fex #SD卡boot0镜像
| |--boot0_spinor.fex #nor介质boot0镜像
| |--boot0_spinor.fex #nor介质boot0镜像
| |--boot_package.fex #nand和SD卡uboot镜像
| |--boot_package_nor.fex #nor介质uboot镜像
| |--env.fex #env环境变量镜像
| |--boot.fex #内核镜像
| |--rootfs.fex #rootfs镜像
|--other #打包所需的其他文件
|--out #固件生成目录
|--tmp #打包使用的临时目录
|--rootfs #存放rootfs的tar.gz打包,给二次修改使用
|--tools #工具
|--lib_aw #拷贝全志方案的库文件如多媒体组件eyesempp等,给应用app编译链接使用(没有选择这些库则可
能是空文件)
|--README #关于板级方案的一些说明例如分区布局等等(无说明则没有这个文件夹)。aw_pack_src 目录以及里面的文件您可以移植到贵方SDK 上。当您重新执行aw_pack.sh的时候即会根据这个目录里面的分区文件和分区信息重新打包成生成全志的固件包。基于此您可以手动二次修改分区镜像文件后再重新打包。您也可以将分区文件单独拿出来去做自己的OTA 升级包或者做自己的flash 固件。 说明 Tina SDK 原本设定好的分区大小和分区名字在aw_pack_src 是无法改变的。
6 打包常见问题FAQ
• Q1: 镜像文件的大小超过规划的分区大小
...
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 failedA这里表明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的擦除块大小来对齐。例如SPINOR Flash, 应该按照64K
来对齐。• Q2: 找不到指定的分区镜像
...
ERROR: unable to open file usr.fex
update_for_part_info -1
ERROR: update mbr file fail
ERROR: update_mbr failedA: 这个错误是说明你设定的分区指定了分区镜像文件但在打包的时候没有找到。像这个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• Q3: 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 failedA以上两种情况都是属于在sys_partition_nor.fex 里面设置太大的分区了需要到合适大小。考虑到SPINOR Flash 不会超过64M, 所以做了这个限制。这个也是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将scripts/pack_img.sh 里面两处有上述命令的地方使用“#” 号注释掉即可。 说明 merge_full_img 只是用来做烧录器固件不影响全志固件的生成。
7 打包流程总结
(1) 最终打包生成固件的工具是dragon。 (2)dragon 工具需要2 个配置文件image.cfgsys_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 [ $? -ne 0 ]; then pack_error “merge_full_img failed” exit 1 fi 将scripts/pack_img.sh 里面两处有上述命令的地方使用“#” 号注释掉即可。
说明
merge_full_img 只是用来做烧录器固件不影响全志固件的生成。# 7 打包流程总结(1) 最终打包生成固件的工具是dragon。
(2)dragon 工具需要2 个配置文件image.cfgsys_partition.fex。
(3)dragon 工具就是根据image.cfg 和sys_partition.fex 描述进行固件文件的打包。
(4) 整个打包流程实质上就是在处理image.cfg 和sys_partition.fex 里描述的文件。
(5) 整个打包流程可以简单理解为下面3 个步骤
• 生成或拷贝image.cfg 和sys_partition.fex 描述的文件。
• 对描述的文件进行一些中间处理例如更新一些配置到文件里面等。
• 用dragon 工具生成最终固件。
相关文章
-
餐厅网站设计怎么看wordpress用了哪个主题
餐厅网站设计怎么看wordpress用了哪个主题
- 技术栈
- 2026年03月21日
-
餐厅网站设计wordpress 联动筛选
餐厅网站设计wordpress 联动筛选
- 技术栈
- 2026年03月21日
-
餐馆网站怎么做番禺人才网
餐馆网站怎么做番禺人才网
- 技术栈
- 2026年03月21日
-
餐饮 网站 模板河南那家公司做家具行业网站好
餐饮 网站 模板河南那家公司做家具行业网站好
- 技术栈
- 2026年03月21日
-
餐饮 网站建设社交网站开发客户
餐饮 网站建设社交网站开发客户
- 技术栈
- 2026年03月21日
-
餐饮公司网站建设的特点wordpress禁用react
餐饮公司网站建设的特点wordpress禁用react
- 技术栈
- 2026年03月21日






