From 75611fdc4b86f1356ce003ed25719e2178e961f8 Mon Sep 17 00:00:00 2001 From: andy <1414772332@qq.com> Date: Wed, 23 Oct 2024 15:39:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/build_flash_kl3.sh | 8 ++++- mfgtool/ah/add_header_v1.c | 3 ++ tools/gen_img/gen_img.sh | 65 +++++++++++++++++++++++++++++++------- 3 files changed, 63 insertions(+), 13 deletions(-) diff --git a/build/build_flash_kl3.sh b/build/build_flash_kl3.sh index 074b808..0e1dba1 100755 --- a/build/build_flash_kl3.sh +++ b/build/build_flash_kl3.sh @@ -33,6 +33,7 @@ GROUP_PROTO_TYPE=("p12087" "p1901") GROUP_BOARDS_TYPE=("fpga" "evb03" "htzd03" "qj03" "flx03" "spe03" "goldf03" "ledc03" "stamp03" "gx03" "evb5202" "htzdbr03" "dt03" "htzdpt03" "yp03") #Specific board definition. +# 定义board列表 打包的时候会根据这个列表生成所有的bin文件 BOARDS_FPGA03_CCO=("fpgacco03") BOARDS_FPGA03_STA=("fpgasta03") BOARDS_FPGA03_FTM=("fpgasta03") @@ -358,6 +359,7 @@ fi if [ "${DEF_IMAGE_TYPE}" == "ftm" ] || [ "${DEF_IMAGE_TYPE}" == "ckb" ] || [ "${IOT_BUILD}" == "1" ] \ || [ "x${DEF_BOARDS_TYPE}" == "xhtzdpt03" ]; then # not support upgrade fw. + # 这些类型的固件不支持 upgrade unset GROUP_RUN_TYPE[2] fi @@ -423,7 +425,8 @@ fi export flash_size=${FLASH_SIZE_nM} -#run in flash or psram +# run in flash or psram +# 根据psram的大小来判断生成的固件类型 if [ "${DEF_PSRAM}" == "0m" ]; then export psram_enable=0 export psram_size=0 @@ -975,6 +978,9 @@ for STR in ${GROUP_BOARDS_DEF[@]}; do fi fi + # GROUP_RUN_TYPE 是一个列表 flash psram upgrade + # 依次调用 gen_img.sh 来生成相应固件 + # flash 或 psram 在之前已经根据是否存在 psram 被移除 if [ "${DEF_IMAGE_TYPE}" == "ftm" ]; then cd ../tools/gen_img for RUN_TYPE in ${GROUP_RUN_TYPE[@]}; do diff --git a/mfgtool/ah/add_header_v1.c b/mfgtool/ah/add_header_v1.c index f0f8576..89d499a 100644 --- a/mfgtool/ah/add_header_v1.c +++ b/mfgtool/ah/add_header_v1.c @@ -875,6 +875,7 @@ int ah_funConstruct(char argc, char *argv[]) } /* make package name */ + // key_word 被gen_img.sh写入在tmp.cfg文件中 这里添加生成日期 sprintf(pkName, "./%s%04d%02d%02d.bin", cfg.key_word,\ timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday); @@ -1289,6 +1290,7 @@ int main(int argc, char *argv[]) if(0 == strcmp(FUNC_CONSTRUCT, argv[1])) { + // -c 生成最终文件 ret =ah_funConstruct(argc, argv); } else if(0 == strcmp(FUNC_SHOWHEADER, argv[1])) @@ -1297,6 +1299,7 @@ int main(int argc, char *argv[]) } else if(0 == strcmp(FUNC_ADDHEADER, argv[1])) { + // -a 把bin文件添加img_header 然后用原文件名保存 ret =ah_addHeader(argc, argv); } diff --git a/tools/gen_img/gen_img.sh b/tools/gen_img/gen_img.sh index 7f5fc5b..3215772 100755 --- a/tools/gen_img/gen_img.sh +++ b/tools/gen_img/gen_img.sh @@ -13,10 +13,12 @@ while getopts "d:c:i:r:m:s:a:b:v:h:p:t:f:" arg do case $arg in c) + # board类型 build_flash_kl3.sh 会根据它存储的board列表依次调用 gen_img.sh echo "c's arg: $OPTARG" BOARD_LOWER=$OPTARG ;; d) + # 芯片id HZ WQ echo "d's arg: $OPTARG" CHIP_ID=$OPTARG ;; @@ -120,7 +122,8 @@ else PSRAM_SIZE_PARAM="P0" fi -#distinguish iot or sg app. +# distinguish iot or sg app. +# 判断是iot还是sg if [ "$APP_LOWER" == "plc_uart" ] || [ "$APP_LOWER" == "demo" ] || [ "$APP_LOWER" == "ge" ] || [ "$APP_LOWER" == "ge_ckq" ] \ || [ "$APP_LOWER" == "ge_lwip" ] || [ "$APP_LOWER" == "ge_ext" ] || [ "$APP_LOWER" == "cus_at" ] \ || [ "$APP_LOWER" == "demo_lwip" ] || [ "$APP_LOWER" == "iot_sniffer" ] \ @@ -163,6 +166,7 @@ rm -f $CUR_DIR/ht_1p.bin rm -f $CUR_DIR/ht*.fw # rm -f $CUR_DIR/cfg_log.txt +# 如果是kunlun3 if [ "x${CHIP_VER_UPPER}" == "x3" ]; then # clear files and generate folders if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then @@ -172,6 +176,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi rm -f $CUR_DIR/ht_ori.bin + # 根据board类型来指定固件存放的位置 if [[ "${BOARD_LOWER}" == "fpga"* ]]; then BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/fpga/${IMG_LOWER}/bin/ OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/fpga/${IMG_LOWER}/out/ @@ -224,17 +229,20 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/${BOARD_LOWER}/${IMG_LOWER}/bin/ OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/${BOARD_LOWER}/${IMG_LOWER}/out/ fi - + # 创建固件文件存放路径 mkdir -p $BIN_PATH mkdir -p $OUT_PATH + # 根据内核类型选择配置文件目录 if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then CFG_DIR=${TOP_DIR}"/build/cfg3" else CFG_DIR=${TOP_DIR}"/build/cfg3_plc" fi + # 链接脚本目录 用来获取sbl的运行地址 LDS_DIR=${TOP_DIR}"/startup/ldscripts/riscv3" - + # SIZE_UPPER 指的是flash size + # 根据参数来指定配置文件的名称 if [ "${RUN_UPPER}" == "UPGRADE" ]; then if [ "${SIZE_UPPER}" != "" ]; then if [ "$PSRAM_ENABLE_GEN" == "1" ]; then @@ -272,10 +280,11 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi fi fi - + # 复制一份临时的配置文件 供修改 TMP_CFG_NAME=${CFG_DIR}"/"${BOARD_LOWER}_${IMG_LOWER}_tmp.cfg cp ${CFG_NAME} ${TMP_CFG_NAME} - + # 配置文件中会存储是否快速启动的配置 + # OPT_KEYWORD 是动态配置字段 可以在这个字段添加额外的说明 if [ "x${FAST_BOOT}" == "x1" ]; then OPT_KEYWORD="FB-" else @@ -290,13 +299,15 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then OPT_KEYWORD=RF-${OPT_KEYWORD} fi - #set option keyword to fw name for kl3. + # set option keyword to fw name for kl3. + # PROTO_TYPE 指的是支持的协议类型 OPT_KEYWORD=${PROTO_TYPE}-${OPT_KEYWORD} if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then OPT_KEYWORD="AMPPLC-${OPT_KEYWORD}" fi # prepare ht.bin + # 准备好ht.bin if [ "${IMG_UPPER}" == "CKB" ]; then HT_FILE="ht_sta.bin" else @@ -320,44 +331,54 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then if [ "${IMG_UPPER}" == "CCO" ]; then if [ ${IOT_SMART_BUILD} == 1 ]; then + # smart build 时要区分 1p 和3p if [ "${chip_ver}" == "3201" ]; then cp $CUR_DIR/iot_ht_3p.bin $CUR_DIR/ht.bin fi cp $CUR_DIR/iot_ht_1p.bin $CUR_DIR/ht_1p.bin else + # 其他情况只有3p 修改为ht + # iot_ht_3p.bin 由 build_flash_kl3.sh 从ht_cco.bin 复制过来 cp $CUR_DIR/iot_ht_3p.bin $CUR_DIR/ht.bin fi else cp ${TOP_DIR}/ap/.output/plc/lib/${HT_FILE} $CUR_DIR/ht.bin fi - + # 修改配置文件中的layout index配置 sed -i "/img_type=./a layout_index=${FLASH_LAYOUT_INDEX}" ${TMP_CFG_NAME} - #config run address and little header of img. + # config run address and little header of img. + # 从链接文件中读取 sbl的运行地址,写入到配置文件中 sbl_lds_file="${LDS_DIR}/link_sbl.lds" sbl_run_addr=`grep -ri "iram\ (rxai\!w)" ${sbl_lds_file}|awk '{print $6}'|awk -F, '{print $1}'` sed -i "/path=\.\/sbl.bin/a run_addr=${sbl_run_addr}" ${TMP_CFG_NAME} - + # 如果设置了快速启动 则写入配置信息到配置文件中 if [ "x${FAST_BOOT}" == "x1" ]; then sed -i "s/fastboot=./fastboot=1/g" ${TMP_CFG_NAME} fi + # 这个部分的代码用于 给各个img.bin生成img_header if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then # add run addr + # 这个链接文件由 ap文件夹中的Makefile复制过来 cus_lds_file=$CUR_DIR/tmp_cus.lds lds_file=$CUR_DIR/tmp_plc.lds - + # 把内存大小写入配置文件 sed -i "/flash_size=./a psram_size=${PSRAM_SIZE}" ${TMP_CFG_NAME} + # 从链接文件中读取运行地址并写入配置文件 plc_run_addr=`grep -ri "flash\ (rxai\!w)" ${lds_file}|awk '{print $6}'|awk -F, '{print $1}'` cus_run_addr=`grep -ri "flash\ (rxai\!w)" ${cus_lds_file} |awk '{print $6}'|awk -F, '{print $1}'` sed -i "/path=\.\/ht.bin/a run_addr=${plc_run_addr}" ${TMP_CFG_NAME} sed -i "/path=\.\/ht_cus.bin/a run_addr=${cus_run_addr}" ${TMP_CFG_NAME} # add iot version + # 从 iot_version.h 中读取版本信息 写入变量 IOT_VER get_iot_ver ${IOT_VER_FILE} + # 把版本信息写入配置文件 sed -i "s/version=.*/version=${IOT_VER}/g" ${TMP_CFG_NAME} if [ "${IMG_UPPER}" == "CCO" ] && [ ${IOT_SMART_BUILD} == 1 ]; then + # smart 模式 分别生成1p 和 3p sed -i "s/ht.bin/ht_1p.bin/g" ${TMP_CFG_NAME} # add header cat ${TMP_CFG_NAME} >> cfg_log.txt @@ -375,23 +396,29 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi else # add header + # 其他模式直接开始生成 cat ${TMP_CFG_NAME} >> cfg_log.txt echo -e "\n-----------\n" >> cfg_log.txt ./ah -a ${TMP_CFG_NAME} fi else # add run addr + # 非 AMPPLC的情况 + # 这个链接文件由 ap文件夹中的Makefile复制过来 lds_file=$CUR_DIR/tmp_plc.lds - + # 从链接脚本中读取运行地址然后写入配置文件 sed -i "/flash_size=./a psram_size=${PSRAM_SIZE}" ${TMP_CFG_NAME} plc_run_addr=`grep -ri "flash\ (rxai\!w)" ${lds_file}|awk '{print $6}'|awk -F, '{print $1}'` sed -i "/path=\.\/ht.bin/a run_addr=${plc_run_addr}" ${TMP_CFG_NAME} # add iot version + # 从 iot_version.h 中读取版本信息 然后写入变量 IOT_VER get_iot_ver ${IOT_VER_FILE} + # 把版本信息写入配置文件 sed -i "s/version=.*/version=${IOT_VER}/g" ${TMP_CFG_NAME} if [ "${IMG_UPPER}" == "CCO" ] && [ ${IOT_SMART_BUILD} == 1 ]; then + # smart_build 时分别生成1p和3p sed -i "s/ht.bin/ht_1p.bin/g" ${TMP_CFG_NAME} # add header cat ${TMP_CFG_NAME} >> cfg_log.txt @@ -406,6 +433,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi else # add header + # 其他情况直接生成 cat ${TMP_CFG_NAME} >> cfg_log.txt echo -e "\n-----------\n" >> cfg_log.txt ./ah -a ${TMP_CFG_NAME} @@ -413,6 +441,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi #config lzma. + # 如果配置了 lzma 则这里进行压缩,把压缩后的文件命名为 ht.bin if [ "${MODE_UPPER}" == "LZMA" ]; then if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ] && [ "x${FAST_BOOT}" != "x1" ]; then ./elzma e $CUR_DIR/ht_cus.bin $CUR_DIR/ht_cus.bin.lzma @@ -439,6 +468,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then cp $TOP_DIR/sbl/.output/plc/lib/kunlun_sbl.bin $CUR_DIR/sbl.bin # Kl3 compiles ram.bin separately to improve compilation speed, so do not need process ram.bin here. + # 这一部分代码根据不同的board类型来写入相应的加密扰码 if [ "${BOARD_UPPER}" == "QJ5580DCCO03" ] || [ "${BOARD_UPPER}" == "QJ5580DCKB03" ] || [ "${BOARD_UPPER}" == "QJ5582DSTA03" ] || [ "${BOARD_UPPER}" == "QJ5582DIIC03" ] || [ "${BOARD_UPPER}" == "QJ5582D3PS03" ] || [ "${BOARD_UPPER}" == "EVB5580DCCO03" ] || [ "${BOARD_UPPER}" == "EVB5582DSTA03" ] || [ "${BOARD_UPPER}" == "EVB5582D3PS03" ]; then sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME} @@ -482,6 +512,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi # prepare oem.bin + # 根据core类型指定oem文件 if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then if [ ${IOT_SMART_BUILD} == 1 ]; then OEM_CFG=${BOARD_UPPER}"_AMPIOT_OEM.ini" @@ -496,6 +527,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi cp $TOP_DIR/tools/oem/$OEM_CFG ./tmp_oem.ini #set mid for iot board(cco and sta use same oem.ini) + # smart模式需要根据img类型动态修改mid值 if [ ${IOT_SMART_BUILD} == 1 ]; then if [ "${IMG_UPPER}" == "CCO" ]; then sed -i "s/mid.*/mid 1/g" ./tmp_oem.ini @@ -504,12 +536,14 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi fi if [ "${RUN_UPPER}" != "UPGRADE" ]; then + # 打包非升级文件的时候生成 oem.bin ./oem_tool --input=./tmp_oem.ini --output=$TOP_DIR/tools/oem/$OEM_FILE fi rm ./tmp_oem.ini cp $TOP_DIR/tools/oem/$OEM_FILE $CUR_DIR/oem.bin # prepare pib file + # 根据board类型来选择pib文件 PIB_IMG=${BOARD_UPPER} #BRM BSRM BSRM_CUS BRMT. @@ -534,6 +568,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi if [[ "${BOARD_UPPER}" == "EVB32"* ]]; then + # ${BOARD_UPPER/EVB} 作用是去除BOARD_UPPER 中的 EVB字符串 BOARD_UPPER=${BOARD_UPPER/EVB/HZEVB} fi BOARD_UPPER=${BOARD_UPPER/3201/} @@ -649,6 +684,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then PIB_FILE=HTZDSTA01_PIB.bin LP_PIB_FILE=HTZDSTA01_LP_PIB.bin else + # 找到所有包含指定名称的pib文件 PIB_FILE=`ls ${PIB_SRC_PATH} | grep "${PIB_IMG}" | grep "PIB"` if [ "${IOT_SMART_BUILD}" == "0" ]; then LP_PIB_FILE=`ls ${PIB_SRC_PATH} | grep "${PIB_IMG}" | grep "LP_PIB"` @@ -662,6 +698,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then APP_UPPER="FTM" fi + # 这段代码由于初步指定最终打包的bin文件名称 if [ ${IOT_SMART_BUILD} == 1 ]; then if [ "${RUN_UPPER}" == "PSRAM" ]; then sed -i "s,key_word=IOT-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${RUN_UPPER}-${PSRAM_SIZE_STR}-${OPT_KEYWORD}${DB_RLS_FLAG}-,g" ${TMP_CFG_NAME} @@ -683,8 +720,10 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then fi if [ "${SIZE_UPPER}" == "4M" ]; then + # flash size 为 4m 的时候 添加一个 F 标识 sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-F-,g" ${TMP_CFG_NAME} else + # flash size 为 其他情况 的时候 添加一个 T 标识 sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-T-,g" ${TMP_CFG_NAME} fi @@ -722,6 +761,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then set -o errexit array=("${PIB_FILE// / }" "${LP_PIB_FILE// / }") + # 根据找到的PIB文件来依次生成 最终的bin文件 for var in ${array[@]} do echo "pib:${var}" @@ -759,6 +799,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${append},g" ./tmp.cfg ./ah -c ./tmp.cfg #extra lp only pib upgrade file. + # 生成只包含pib的升级文件 if [ "${BOARD_UPPER}X" == "HTZDSTA03X" ] || [ "${BOARD_UPPER}X" == "FPGASTA03X" ] || [ "${BOARD_UPPER}X" == "QJSTA03X" ] \ || [ "${BOARD_UPPER}X" == "FLXSTA03X" ] || [ "${BOARD_UPPER}X" == "SPESTA03X" ] || [ "${BOARD_UPPER}X" == "GXSTA03X" ] \ || [ "${BOARD_UPPER}X" == "DTSTA03X" ] || [ "${BOARD_UPPER}X" == "YPSTA03X" ]; then @@ -810,7 +851,7 @@ if [ "x${CHIP_VER_UPPER}" == "x3" ]; then mv ./${CHIP_ID}-${APP_UPPER}-* $BIN_PATH else - + # 这下面是kunlun1 if [ "$SIZE_LOWER" == "" ]; then BIN_PATH=${CUR_DIR}/customer/1M/${BOARD_LOWER}/${IMG_LOWER}/bin/ OUT_PATH=${CUR_DIR}/customer/1M/${BOARD_LOWER}/${IMG_LOWER}/out/