中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)頁設(shè)計(jì)與網(wǎng)站建設(shè)教材微信營銷的模式有哪些

網(wǎng)頁設(shè)計(jì)與網(wǎng)站建設(shè)教材,微信營銷的模式有哪些,建設(shè)網(wǎng)站 報(bào)告,網(wǎng)絡(luò)營銷公司排行OpenRemoved_Tina_Linux_打包流程_說明指南_new 1 概述 1.1 編寫目的 介紹Allwinner 平臺上打包流程。 1.2 適用范圍 Allwinner 軟件平臺Tina v3.0 版本以上。 1.3 相關(guān)人員 適用Tina 平臺的廣大客戶,想了解Tina 打包流程的開發(fā)人員。 2 固件打包簡介 固件…

OpenRemoved_Tina_Linux_打包流程_說明指南_new

1 概述

1.1 編寫目的

介紹Allwinner 平臺上打包流程。

1.2 適用范圍

Allwinner 軟件平臺Tina v3.0 版本以上。

1.3 相關(guān)人員

適用Tina 平臺的廣大客戶,想了解Tina 打包流程的開發(fā)人員。

2 固件打包簡介

固件打包是指將我們編譯出來的bootloader、內(nèi)核和根文件系統(tǒng)一起寫到一個(gè)鏡像文件中,這個(gè)鏡像文件也叫固件。然后可以將這個(gè)鏡像寫到nand、nor flash 或是sd 卡上,從而啟動(dòng)系統(tǒng)。打包成固件時(shí)需要使用到一些打包工具,打包腳本以及打包配置文件。本文主要就是介紹打包時(shí)需要哪些工具,需要哪些配置文件,以及固件的生成流程。

3 打包工具介紹

本文只介紹Tina 打包時(shí)特有的工具,其他通用工具如unix2dos 等請自行百度。在tina SDK 中特有的打包工具保存在如下路徑:

tina/tools/pack-bintools/src

3.1 update_mbr

工具名稱update_mbr
功能說明根據(jù)分區(qū)配置文件,更新主引導(dǎo)目錄文件sunxi_mbr.fex ,sunxi_gpt.fex
及分區(qū)的下載文件列表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 會改名為output_name。
參數(shù)說明partition_file:分區(qū)配置文件,如sys_partition.bin
mbr_count:mbr 的備份數(shù)量,如果不指定,缺省mbr_count = 4;
output_name:修改sunxi_mbr.fex 的輸出名,沒有特殊需求不建議使用此用法。
應(yīng)用舉例update_mbr sys_partition.bin 4
update_mbr sys_partition.bin 1 sunxi_mbr_tmp.fex
(沒有特殊需求不建議使用此用法)

3.2 merge_full_img

工具名稱merge_full_img
功能說明指定起始邏輯地址,把boot0,boot1,mbr 及分區(qū)文件下載列表里的文件合
并成img 固件包,應(yīng)用于小容量的nor flash。此時(shí)沒有分區(qū)的概念。
使用方法merge_full_img –out
–boot0 <boot0.fex>
–boot1 <boot1.fex>
–mbr <mbr.fex>
–partition <partition.fex> \–logic_start <512|256>–help
參數(shù)說明–out :指定輸出目標(biāo)文件
–boot0 <boot0.fex>:指定輸入的boot0 文件–boot1 <boot1.fex>:指定輸入的boot1 文件
–mbr <mbr.fex>:指定輸入的mbr 文件–partition <partition.fex>:指定輸入的分區(qū)配置文件
–logic_start <512|256>:指定起始邏輯地址
–help:顯示使用方法
應(yīng)用舉例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) 它是全志實(shí)現(xiàn)的一個(gè)同名工具,工具功能說明如下:

工具名稱script
功能說明解析輸入文本文件的所有數(shù)據(jù)項(xiàng),生成新的二進(jìn)制bin 文件,以便程序解析。
生成的目標(biāo)文件與源文件名字(除后綴) 一樣,但后綴為.bin。
使用方法script <source_file>
參數(shù)說明source_file:輸入的文本文件,可多個(gè)
應(yīng)用舉例scriptsys_config.fex
scriptsys_partition.fex

3.4 dragonsecboot

工具名稱dragonsecboot
功能說明1) 根據(jù)指定的keys 生成toc0 文件。
2) 根據(jù)指定的keys 和cnfbase 生成toc1 文件。
3) 根據(jù)配置文件生成keys。
4) 按配置文件的配置進(jìn)行打包生成目的文件。
使用方法dragonsecboot -toc0 <cfg_file> <version_file>
dragonsecboot -toc1 <cfg_file> <version_file>
dragonsecboot -key <cfg_file>
dragonsecboot -pack <cfg_file>
參數(shù)說明-toc0:表示要生成toc0 文件
-toc1:表示要生成toc1 文件
-key:表示要生成key
-pack:表示進(jìn)行打包
cfg_file:配置文件
keypath:key 的路徑
cnfbase:輸入的cnf_base.cnf 文件
version_file:固件防回滾配置文件
應(yīng)用舉例dragonsecboot -pack boot_package.cfg
dragonsecboot -key dragon_toc.cfg keys
dragonsecboot -toc0 dragon_toc.cfg keys version_base.mk
dragonsecboot -toc1 dragon_toc.cfg keys cnf_base.cnf version_base.mk

3.5 update_boot0

工具名稱update_boot0
功能說明根據(jù)配置腳本內(nèi)容,修正boot0 頭部的參數(shù)。修正參數(shù):debug_mode、
dram_para 參數(shù)、uart 參數(shù)、bootcpu、jtag 參數(shù)、NAND 參數(shù)等。
使用方法update_boot0 <sys_config_file> <storage_type>
參數(shù)說明boot0:boot0 文件
sys_config_file:系統(tǒng)配置文件storage_type:存儲介質(zhì)類型
應(yīng)用舉例update_boot0 boot0_nand.fex sys_config.bin NAND
update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD
update_boot0 boot0_spinor.fex sys_config.bin SDMMC_CARD

3.6 update_dtb

工具名稱update_dtb
功能說明把Linux 設(shè)備樹二進(jìn)制dtb 文件進(jìn)行512 字節(jié)對齊后再預(yù)留空間。
使用方法update_dtb <dtb_file> <reserve_size>
參數(shù)說明dtb_file:輸入的Linux 設(shè)備樹二進(jìn)制dtb 文件reserve_size:輸出目標(biāo)文件預(yù)留多少字節(jié)
應(yīng)用舉例update_dtb sunxi.fex 4096

3.7 update_fes1

工具名稱update_fes1
功能說明從系統(tǒng)配置文件中取出數(shù)據(jù)對fes1 頭部相關(guān)參數(shù)進(jìn)行修正。
修正參數(shù)包括:DRAM 參數(shù)、UART 參數(shù)、JTAG 參數(shù)等。
使用方法update_fes1 <fes1_file> <config_file>
參數(shù)說明fes1_file:更修正的FES1 文件
config_file:輸入的系統(tǒng)配置文件
應(yīng)用舉例update_fes1 fes1.fex sys_config.bin

3.8 signature

工具名稱signature
功能說明對MBR 指定要進(jìn)行簽名的分區(qū)文件進(jìn)行簽名。
使用方法signature <sunxi_mbr_file> <dlinfo_file>
參數(shù)說明sunxi_mbr_file:輸入的MBR 文件
dlinfo_file:輸入的分區(qū)下載列表文件
應(yīng)用舉例signature sunxi_mbr.fex dlinfo.fex

3.9 update_toc0

工具名稱update_toc0
功能說明從系統(tǒng)配置文件中取出相關(guān)參數(shù)對toc0 配置參數(shù)進(jìn)行修正,修正參數(shù)包括:
DRAM、UART、JTAG、NAND、卡0 、卡2 、secure 參數(shù)等。
使用方法update_toc0 <toc0_file> <config_file>
參數(shù)說明toc0_file:輸入的toc0 文件
config_file:輸入的系統(tǒng)配置文件
應(yīng)用舉例update_toc0 toc0.fex sys_config.bin

3.10 update_uboot

工具名稱update_uboot
功能說明從系統(tǒng)配置文件中取出相關(guān)參數(shù)對uboot 頭部參數(shù)進(jìn)行修正。
修正參數(shù)包括:UART 參數(shù)、TWI 參數(shù)、target 參數(shù)、SDCARD 參數(shù)等。
使用方法update_uboot <uboot_file> <config_file>
update_uboot -merge <uboot_file> <config_file>
update_uboot -no_merge <uboot_file> <config_file>
參數(shù)說明uboot_file:要更新的uboot 文件
config_file:系統(tǒng)配置文件
-merge:系統(tǒng)配置文件會拼接在uboot 文件尾部
-no_merge:系統(tǒng)配置文件不會拼接在uboot 文件尾部注意:沒有顯式指明-no_merge 參數(shù)默認(rèn)會把系統(tǒng)配置文件拼接在uboot 文件尾部
應(yīng)用舉例update_uboot u-boot.fex sys_config.bin
update_uboot -merge u-boot.fex sys_config.bin
update_uboot -no_merge u-boot.fex sys_config.bin

3.11 update_scp

工具名稱update_scp
功能說明從系統(tǒng)配置文件中取出相關(guān)參數(shù)對scp (小cpu 運(yùn)行代碼只有帶有小cpu 方案的芯片
會用到)頭部參數(shù)進(jìn)行修正。修正參數(shù)包括:UART 參數(shù)、dram_para 參數(shù)等。
使用方法update_scp <scp_file> <config_file>
參數(shù)說明uboot_file:要更新的scp 文件
config_file:系統(tǒng)配置文件
應(yīng)用舉例update_scp scp.fex sunxi.fex

3.12 u_boot_env_gen

工具名稱u_boot_env_gen
功能說明解析env 文件生成uboot 能識別的env 二進(jìn)制數(shù)據(jù)文件,功能與標(biāo)準(zhǔn)的mkenvimage
工具類似。
使用方法u_boot_env_gen <env_file> <env_bin_file>
參數(shù)說明env_file:輸入的evn 文件
env_bin_file:輸出的env 二進(jìn)制文件
應(yīng)用舉例u_boot_env_gen env.cfg env.fex

3.13 fsbuild

工具名稱fsbuild
功能說明根據(jù)boot-resource.ini 生成fat 格式文件。
使用方法fsbuild <rootfs_config_file> <magic_file>
參數(shù)說明rootfs_config_file:fat 系統(tǒng)配置文件
magic:用于fat 文件系統(tǒng)校驗(yàn)
應(yīng)用舉例fsbuild boot-resource.ini split_xxxx.fex

3.14 update_toc1(舊版本工具,后面會棄用,可以不理會

工具名稱update_toc1
功能說明從系統(tǒng)配置文件中取出相關(guān)參數(shù)對toc1 配置參數(shù)進(jìn)行修正,修正參數(shù)包括:
board_id_simple_gpio 參數(shù)(需配置啟用,目前已沒有方案使用)。
使用方法update_toc1 <toc1_file> <config_file>
參數(shù)說明toc1_file:輸入的toc1 文件
config_file:輸入的系統(tǒng)配置文件
應(yīng)用舉例update_toc1 toc1.fex sys_config.bin

3.15 programmer_img

工具名稱programmer_img
功能說明生成mmc 介質(zhì)的燒錄固件。
使用方法programmer_img <boot0_file> <uboot_file> <out_img>
programmer_img <mbr_file> <out_img> <in_img>
參數(shù)說明in_img:輸入的文件或鏡像
boot0_file:boot0 文件
uboot_file:uboot 文件
partition_file:分區(qū)配置文件
mbr_file:sunxi_mbr 文件output_img:輸出的文件或鏡像
應(yīng)用舉例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
功能說明根據(jù)img 配置文件和分區(qū)配置文件生成固件。
使用方法dragon <img_config> <partition_file>
參數(shù)說明img_config:配置文件,描述img 文件格式和包含其他文件列表
partition_file:分區(qū)配置文件
應(yīng)用舉例dragon image.cfg sys_partition.fex

3.17 sigbootimg

工具名稱sigbootimg
功能說明在輸入文件的后面添加一個(gè)證書,并輸出一個(gè)帶證書的文件。
使用方法sigbootimg –image <input_img> –cert <cert_file> –output <output_img>
參數(shù)說明input_img:輸入的文件或鏡像
cert_file:文件或鏡像對應(yīng)的證書
output_img:帶證書的文件或鏡像
應(yīng)用舉例sigbootimg –image boot.fex –cert boot.fex –output boot_sig.fex

4 打包腳本分析

4.1 腳本的調(diào)用流程

在Tina 主目錄下執(zhí)行make -j16 編譯完成后便可以執(zhí)行pack 進(jìn)行打包工作,整個(gè)打包過程大概如下圖所示:

image-20230104103604851

結(jié)合上面的打包流程圖分析,打包方法在Tina SDK 根目錄下運(yùn)行:

pack

最終打包出來的固件放在目錄tina/out/platform?{board}/下。pack 命令實(shí)質(zhì)上是tina SDK 內(nèi)置的一個(gè)環(huán)境變量命令。

在使用tina SDK 時(shí)需要執(zhí)行source build/envsetup.sh 這個(gè)命令。這個(gè)命令是把tina SDK 實(shí)現(xiàn)的一些shell 命令export 到當(dāng)前shell 中。
打開build/envsetup.sh 腳本,可以發(fā)現(xiàn)里面實(shí)現(xiàn)了一個(gè)shell 函數(shù):

function pack()

在tina 根目錄下執(zhí)行pack 命令后調(diào)用到的就是build/envsetup.sh 腳本中的function pack()函數(shù),function pack() 函數(shù)進(jìn)行一些參數(shù)設(shè)置后最終調(diào)用到以下語句:

$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:輸入調(diào)試時(shí)log輸入方式例如:uart0/card0
-s:輸入是否打包成安全固件例如:none/secure
-m:輸入是正常固件還是調(diào)試用的dump固件:normal/dump
-w:
-v:輸入打包時(shí)是否使用安全boot,對于tinaSDK來說該參數(shù)功能已由-s替代,參數(shù)只是歷史遺留或做兼容用,客戶可以不
用理會該參數(shù)
-i:輸入是否制作壓縮包none/tar_image,調(diào)試時(shí)用,客戶可以不用理會該參數(shù)
-t:Tina根目錄的路徑

從上面可以看出function pack() 函數(shù)最終調(diào)用到tina/scripts/pack_img.sh 這個(gè)腳本文件,這個(gè)腳本文件實(shí)現(xiàn)了打包的最終流程。
目前打包腳本主要分為5 個(gè)階段(其他階段都是一些特殊化處理),分別是:

do_prepare
do_ini_to_dts
do_common
do_pack_tina
do_finish

4.2 打包的各階段分析

4.2.1 do_prepare 階段

此階段完成文件拷貝動(dòng)作。打包時(shí)需要拷貝若干文件到tina/out/xxxplatform/image 目錄下,目前腳本對其進(jìn)行了分類,分別是tools_file_list,configs_file_list,boot_resource_list 和boot_file_list,boot_file_secure,a64_boot_file_secure 如有新增文件,可以歸入其中一類或者創(chuàng)建新類,后續(xù)打包會使用到這些文件。

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"
#根據(jù)不同的arm架構(gòu)拷貝不同的boot_file_secure 類文件到tina/out/xxxplatform/image 目錄下
#32位系統(tǒng)
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位系統(tǒng)
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 設(shè)備樹的概念。此階段主要是編譯生成描述設(shè)備樹的sunxi.dtb 文件。該文件在linux 內(nèi)核啟動(dòng)過程中會被解析,根據(jù)該文件中設(shè)備列表進(jìn)行加載各個(gè)外設(shè)的設(shè)備驅(qū)動(dòng)模塊。具體實(shí)現(xiàn)分析如下:

function do_ini_to_dts()
{
if [ "x${PACK_KERN}" == "xlinux-3.4" ] ;
then return
fi
......
#根據(jù)不同的內(nèi)核設(shè)置不同的參數(shù),最后調(diào)用下的命令編譯生成.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 階段

此階段完成所有系統(tǒng)平臺通用的文件解析,分區(qū)打包。具體實(shí)現(xiàn)分析如下。(代碼順序與腳本的不一致,主要是為了方便說明),該階段與存儲介質(zhì)、內(nèi)核版本等有耦合。因此比較復(fù)雜,但主要包括下面的5 個(gè)階段:
(1) 使用unix2dos 工具確保文本文件為dos 格式。
(2) 使用script 工具解析文本文件,生成對應(yīng)的二進(jìn)制文件,便于后續(xù)工具解析。
(3) 更新boot0,uboot,scp 的頭部參數(shù)。
(4) 生成boot_package。
(5) 生成env 分區(qū)數(shù)據(jù)env.fex。
具體實(shí)現(xiàn)分析如下:

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
#生成相應(yīng)的二進(jìn)制文件sys_config.bin 和sys_partition.bin 便于后續(xù)工具程序解析
script sys_config.fex > /dev/null
script sys_partition.fex > /dev/null
script sys_partition_nor.fex > /dev/null
#根據(jù)sys_config.bin 參數(shù),取出DRAM,UART 等參數(shù)更新boot0 頭部參數(shù)
update_boot0 boot0_nand.fex sys_config.bin NAND > /dev/null
update_boot0 boot0_sdcard.fex sys_config.bin SDMMC_CARD > /dev/null
#根據(jù)sys_config.bin 參數(shù)設(shè)置,更新uboot 頭部參數(shù)
update_uboot u-boot.fex sys_config.bin > /dev/null
#根據(jù)sys_config.bin 參數(shù)設(shè)置,更新fes1.fex 參數(shù)
update_fes1 fes1.fex sys_config.bin > /dev/null#制作啟動(dòng)過程相關(guān)資源的分區(qū)鏡像
fsbuildboot-resource.inisplit_xxxx.fex > /dev/null
#根據(jù)配置生成uboot 基本配置二進(jìn)制文件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
#根據(jù)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 階段

此階段完成當(dāng)前系統(tǒng)平臺特有的工作以及安全相關(guān)的工作,主要對內(nèi)核文件,文件系統(tǒng)等進(jìn)行軟鏈接,以及安全件的簽名和toc0 的生成。
具體實(shí)現(xiàn)分析如下:

function do_pack_tina()
{
#軟鏈接boot.fex,rootfs.fex
ln -s ${ROOT_DIR}/boot.img boot.fex
ln -s ${ROOT_DIR}/rootfs.img rootfs.fex
......
#如果需要打包成安全固件就會調(diào)用do_signature函數(shù)
do_signature
{
#生成toc0文件
dragonsecboot -toc0 dragon_toc.cfg ${ROOT_DIR}/keys ${ROOT_DIR}/image/version_base.
mk
#根據(jù)sys_config.bin 參數(shù),取出DRAM,UART 等參數(shù)更新toc0 頭部參數(shù)
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
#對內(nèi)核進(jìn)行簽名
sigbootimg --image boot.fex --cert toc1/cert/boot.der --output boot_sig.fex
#根據(jù)sys_config.bin 參數(shù),取出DRAM,UART 等參數(shù)更新toc1 頭部參數(shù)
update_toc1 toc1.fex sys_config.bin
}
}

4.2.5 do_finish 階段

此階段根據(jù)指定的固件成員完成打包。具體實(shí)現(xiàn)分析如下:

function do_finish()
{
......
#生成分區(qū)結(jié)構(gòu)文件sunxi_mbr.fex 及分區(qū)下載文件列表文件dlinfo.fex
update_mbr sys_partition.bin 4 > /dev/null
#根據(jù)所列的成員文件及分區(qū)信息,組合完成打包
dragon image.cfg sys_partition.fex
......
}

4.3 打包過程數(shù)據(jù)流分析

上一章節(jié)講述了打包腳本的幾個(gè)階段,本節(jié)我們換個(gè)視角看打包過程。打包過程是將編譯好后的二進(jìn)制鏡像和各種配置文件,通過一些加工、轉(zhuǎn)換和合成最終生成固件包。如下圖所示,講述了需要打包的各種文件在哪個(gè)位置,會經(jīng)過如何處理,合成什么文件,最終生
成了固件包。

image-20230104104015158

其中藍(lán)色的是源文件或者生成的中間文件;
綠色的是打包用到的工具;
紅色的是最終生成的固件。
固件里面包含哪些文件,可以參考下一章節(jié)。
這里展示另一張圖,可以從Tina SDK 全局看打包的作用位置,以及數(shù)據(jù)的流動(dòng)。

image-20230104104033322

4.4 固件組成成員分析

固件包本質(zhì)是由一系列的文件組成,類似于一個(gè)壓縮包,把多個(gè)文件壓縮成了一個(gè)固件包。這里通過一個(gè)描述性的配置文件(image.cfg),把需要添加到固件包的文件枚舉出來。然后打包過程就讀取這個(gè)配置文件,生成了最終的固件包。由do_finish 函數(shù)可以知道,生成固件的工具是dragon,dragon 工具需要2 個(gè)配置文件image.cfg 和sys_partition.fex,下面將會分析這2個(gè)配置文件。

4.4.1 image.cfg 配置文件分析

用文本方式,打開tina/out/xxxplatform/image/image.cfg 文件,可以看到大致如下的內(nèi)容:

[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量產(chǎn)部分-------------------------------------;
;-->tools文件
{filename = "usbtool.fex", maintype = "PXTOOLSB", subtype = "
xxxxxxxxxxxxxxxx",},
{filename = "aultools.fex", maintype = "UPFLYTLS", subtype = "
xxxxxxxxxxxxxxxx",},
{filename = "aultls32.fex", maintype = "UPFLTL32", subtype = "
xxxxxxxxxxxxxxxx",},
;-------------------------------卡量產(chǎn)部分----------------------------------------;
;-->固定不變的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 ;-->產(chǎn)品ID
vid = 0x00008743 ;-->供應(yīng)商ID
hardwareid = 0x100 ;-->硬件ID bootrom
firmwareid = 0x100 ;-->固件ID bootrom
bootromconfig = "bootrom_071203_00001234.cfg"
rootfsconfig = "rootfs.cfg"
filelist = FILELIST
imagename = tina_XXXXXX.img

該文件項(xiàng)的格式:

filename= name,maintype=ITEM_ROOTFSFAT16,subtype = user_define

當(dāng)用戶需要添加文件的時(shí)候,按照同樣的格式,把自己需要的文件寫到腳本文件中即可。

? filename:打包文件
是指文件的全路徑??梢允褂孟鄬β窂?#xff0c;如上述文件中,就使用了相對路徑。
? maintype:打包格式
表明文件的格式類型,該文件有此類型定義的列表。
? subtype:自定義名稱
用戶自己定義的名稱,使用數(shù)字和英文字符(區(qū)分大小寫),最大長度必須為16 字節(jié)。只要按照上述規(guī)則書寫,并放到文件的[FILELIST] 之后,等到打包的時(shí)候就會自動(dòng)把文件添加到固件包中。
下表描述image.cfg 文件中的各固件成員的作用。

image-20230104104210037

4.4.2 sys_partition.fex 配置文件分析

除image.cfg 文件所列的文件,固件還包含了sys_partition.fex 所列的分區(qū)的文件。用文本文件打開sys_partition.fex,可以看到大致如下的內(nèi)容(主要分區(qū)有3 個(gè),不同方案分區(qū)表可能不一樣,用戶也可以添加自己的分區(qū)):

[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

這是一個(gè)規(guī)劃磁盤分區(qū)的文件,一個(gè)分區(qū)的屬性,有如下幾項(xiàng):
? 分區(qū)名稱
? 分區(qū)的大小
? 下載的文件
? 分區(qū)的用戶屬性

以下是文件中所描述的一個(gè)分區(qū)的屬性:
? name:分區(qū)名稱
分區(qū)名稱由用戶自定義。當(dāng)用戶在定義一個(gè)分區(qū)的時(shí)候,可以把這里改成自己希望的字符串,但是長度不能超過16 個(gè)字節(jié)。
? size: 分區(qū)的大小
定義該分區(qū)的大小,以扇區(qū)的單位。
? downloadfile: 下載的文件
下載文件的路徑和名稱,可以使用相對路徑,相對是指相對于image.cfg 文件所在分區(qū),也可以
使用絕對路徑。
? user_type: 分區(qū)的用戶屬性

目前該標(biāo)志位只有spi nand 的ubi 文件系統(tǒng)還在使用,是歷史遺留問題,客戶可以不理會,仿照文檔中的分區(qū)填寫即可(例如0x8000)。
下表描述了sys_partition.fex 文件指定的分區(qū)里的文件。

固件成員成員作用
env.fexu-boot 的基本配置文件
boot.fextina SDK 生成的boot.img 的軟鏈接,主要包含kernel
rootfs.fextina SDK 生成的rootfs 鏡像的軟鏈接,根文件系統(tǒng)

5 獲得打包后的分區(qū)鏡像文件

由于方案的差異化不同,一些方案需要獲取到每個(gè)分區(qū)的鏡像文件而非全志的整個(gè)固件燒錄包。這些分區(qū)鏡像可能主要用來做OTA 升級,或者創(chuàng)建自己的燒錄固件。
出于這方面考慮,Tina SDK 提供一種可以將分區(qū)鏡像文件整理輸出,同時(shí)輸出后的可以脫離Tina SDK 再次進(jìn)行打包的方法。方便可移植到貴方SDK 中進(jìn)行二次修改和再次打包。

5.1 開啟[pack out of tina] 功能

上述功能需要開啟[pack out of tina] 功能

make meunconfig
Target Image -->
[*] support pack out of tina

開啟[pack out of tina] 功能后,直接pack 即可看到打印提示多生成了一個(gè)文件夾:

out/xx方案/aw_pack_src

5.2 aw_pack_src 目錄介紹

./aw_pack_src
|--aw_pack.sh #執(zhí)行此腳本即可在aw_pack_src/out/目錄生成固件
|--config #打包配置文件
|--image #各種鏡像文件,可替換,但不能改文件名
| |--boot0_nand.fex #nand介質(zhì)boot0鏡像
| |--boot0_sdcard.fex #SD卡boot0鏡像
| |--boot0_spinor.fex #nor介質(zhì)boot0鏡像
| |--boot0_spinor.fex #nor介質(zhì)boot0鏡像
| |--boot_package.fex #nand和SD卡uboot鏡像
| |--boot_package_nor.fex #nor介質(zhì)uboot鏡像
| |--env.fex #env環(huán)境變量鏡像
| |--boot.fex #內(nèi)核鏡像
| |--rootfs.fex #rootfs鏡像
|--other #打包所需的其他文件
|--out #固件生成目錄
|--tmp #打包使用的臨時(shí)目錄
|--rootfs #存放rootfs的tar.gz打包,給二次修改使用
|--tools #工具
|--lib_aw #拷貝全志方案的庫文件,如多媒體組件eyesempp等,給應(yīng)用app編譯鏈接使用(沒有選擇這些庫,則可
能是空文件)
|--README #關(guān)于板級方案的一些說明,例如分區(qū)布局等等(無說明則沒有這個(gè)文件夾)。
  1. aw_pack_src 目錄以及里面的文件,您可以移植到貴方SDK 上。當(dāng)您重新執(zhí)行aw_pack.sh的時(shí)候,即會根據(jù)這個(gè)目錄里面的分區(qū)文件和分區(qū)信息重新打包成生成全志的固件包?;诖?#xff0c;您可以手動(dòng)二次修改分區(qū)鏡像文件后再重新打包。
  2. 您也可以將分區(qū)文件單獨(dú)拿出來,去做自己的OTA 升級包,或者做自己的flash 固件。
    說明
    Tina SDK 原本設(shè)定好的分區(qū)大小和分區(qū)名字在aw_pack_src 是無法改變的。

6 打包常見問題FAQ

? Q1: 鏡像文件的大小超過規(guī)劃的分區(qū)大小

...
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 分區(qū)所關(guān)聯(lián)的rootfs.fex 鏡像文件(dl_file_size: 5888 x 512 byte) 大于分區(qū)規(guī)劃的大小(part_size = 4864 x 512 byte)
需要將sys_partition.fex (NOR 案:sys_partition_nor.fex) 里面的分區(qū)大小改大,以便可以裝下分區(qū)鏡像的大小。
說明

sys_partition.fex 里面的分區(qū)都需要按照flash的擦除塊大小來對齊。例如SPINOR Flash, 應(yīng)該按照64K
來對齊。

? Q2: 找不到指定的分區(qū)鏡像

...
ERROR: unable to open file usr.fex
update_for_part_info -1
ERROR: update mbr file fail
ERROR: update_mbr failed

A: 這個(gè)錯(cuò)誤是說明你設(shè)定的分區(qū)指定了分區(qū)鏡像文件,但在打包的時(shí)候沒有找到。像這個(gè)usr.fex 是需要開啟[CONFIG_SUNXI_SMALL_STORAGE_OTA] 才會主動(dòng)生成的。其他自建的分區(qū)鏡像文件,改后綴名xx.fex 并放以下目錄即可自動(dòng)找到:

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 方案分區(qū)設(shè)置太大

...
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

A:以上兩種情況都是屬于在sys_partition_nor.fex 里面設(shè)置太大的分區(qū)了,需要到合適大小??紤]到SPINOR Flash 不會超過64M, 所以做了這個(gè)限制。這個(gè)也是merge_full_img 這個(gè)應(yīng)用的缺陷,如果確實(shí)需要打包這么大的Nor 固件,可能需要把merge_full_img 這個(gè)工具注釋掉。

#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 打包流程總結(jié)

(1) 最終打包生成固件的工具是dragon。
(2)dragon 工具需要2 個(gè)配置文件image.cfg,sys_partition.fex。
(3)dragon 工具就是根據(jù)image.cfg 和sys_partition.fex 描述進(jìn)行固件文件的打包。
(4) 整個(gè)打包流程實(shí)質(zhì)上就是在處理image.cfg 和sys_partition.fex 里描述的文件。
(5) 整個(gè)打包流程可以簡單理解為下面3 個(gè)步驟:
? 生成或拷貝image.cfg 和sys_partition.fex 描述的文件。
? 對描述的文件進(jìn)行一些中間處理,例如更新一些配置到文件里面等。
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 打包流程總結(jié)(1) 最終打包生成固件的工具是dragon。
(2)dragon 工具需要2 個(gè)配置文件image.cfg,sys_partition.fex。
(3)dragon 工具就是根據(jù)image.cfg 和sys_partition.fex 描述進(jìn)行固件文件的打包。
(4) 整個(gè)打包流程實(shí)質(zhì)上就是在處理image.cfg 和sys_partition.fex 里描述的文件。
(5) 整個(gè)打包流程可以簡單理解為下面3 個(gè)步驟:
? 生成或拷貝image.cfg 和sys_partition.fex 描述的文件。
? 對描述的文件進(jìn)行一些中間處理,例如更新一些配置到文件里面等。
? 用dragon 工具生成最終固件。
http://www.risenshineclean.com/news/22208.html

相關(guān)文章:

  • 企業(yè)自建站案例搜索關(guān)鍵詞推薦
  • 營業(yè)執(zhí)照辦好了就可以做網(wǎng)站了嗎廣東云浮疫情最新情況
  • 花生殼域名可以做網(wǎng)站域名嗎3322免費(fèi)域名注冊
  • 平面設(shè)計(jì)素材網(wǎng)站排名武漢搜索排名提升
  • 購物網(wǎng)站開發(fā)實(shí)例網(wǎng)絡(luò)服務(wù)提供商
  • wordpress多國語言設(shè)置淘寶seo是什么意思
  • 網(wǎng)站制作 臺州淘寶代運(yùn)營1個(gè)月多少錢
  • 一個(gè)做搞笑類視頻的網(wǎng)站取名seo學(xué)習(xí)網(wǎng)站
  • 北京it行業(yè)公司排名關(guān)于華大18年專注seo服務(wù)網(wǎng)站制作應(yīng)用開發(fā)
  • 怎么用一個(gè)主機(jī)做多個(gè)網(wǎng)站軟文之家
  • 網(wǎng)站建設(shè)合同英文版seo 優(yōu)化技術(shù)難度大嗎
  • 眉山網(wǎng)站制作最吸引人的引流話術(shù)
  • 推廣公司如何賺錢網(wǎng)站優(yōu)化策劃書
  • 做界面的網(wǎng)站12月30日疫情最新消息
  • 南平公司做網(wǎng)站pc網(wǎng)站建設(shè)和推廣
  • 文案交流網(wǎng)站免費(fèi)網(wǎng)站大全下載
  • 2015做哪些網(wǎng)站致富什么是互聯(lián)網(wǎng)營銷
  • 有阿里空間怎么做網(wǎng)站百度推廣后臺登錄頁面
  • 網(wǎng)站廣告位價(jià)格一般多少定制化網(wǎng)站建設(shè)
  • 自己做的網(wǎng)站可以掛在哪里自己怎么做網(wǎng)頁推廣
  • 網(wǎng)站關(guān)鍵詞詞庫app拉新推廣
  • 怎么做網(wǎng)站首頁psd整站優(yōu)化服務(wù)
  • 全球最受歡迎的網(wǎng)站排名今日熱點(diǎn)新聞
  • 哪個(gè)網(wǎng)站可以做思維導(dǎo)圖鳳山網(wǎng)站seo
  • 做美圖 網(wǎng)站有哪些東西沈陽優(yōu)化網(wǎng)站公司
  • 蒙城做網(wǎng)站的公司百度手機(jī)助手下載正版
  • 響應(yīng)式網(wǎng)站建設(shè)資訊培訓(xùn)行業(yè)seo整站優(yōu)化
  • 能打開各種網(wǎng)站的瀏覽器推薦企業(yè)培訓(xùn)計(jì)劃
  • 天津做網(wǎng)站要多少錢廣州網(wǎng)站優(yōu)化關(guān)鍵詞排名
  • 做特價(jià)的網(wǎng)站網(wǎng)絡(luò)推廣運(yùn)營優(yōu)化