Files
kunlun/tools/gen_img/gen_img.sh
2025-05-08 18:49:39 +08:00

1170 lines
48 KiB
Bash
Executable File

#!/bin/bash
CUR_DIR=$(cd `dirname $0`; pwd)
TOP_DIR=$CUR_DIR/../..
PSRAM_ENABLE_GEN=$(echo $psram_enable)
FLASH_LAYOUT_INDEX=$(echo $layout_index)
PROTO_TYPE=$(echo ${PROTO_TYPE} | tr '[a-z]' '[A-Z]')
RF_ENABLE=$(echo ${rf_enable})
DUAL_ENABLE=$(echo ${dual_enable})
NEW_TYPE_CCO=$(echo ${new_type_cco})
SEC_CPU_ENABLE=$(echo ${sec_cpu_enable})
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
;;
i)
echo "i's arg: $OPTARG"
IMG_LOWER=$OPTARG
;;
r)
echo "r's arg: $OPTARG"
RUN_LOWER=$OPTARG
;;
m)
echo "m's arg: $OPTARG"
MODE_LOWER=$OPTARG
;;
s)
echo "s's arg: $OPTARG"
SIZE_LOWER=$OPTARG
;;
a)
echo "a's arg: $OPTARG"
APP_LOWER=$OPTARG
;;
b)
echo "b's arg: $OPTARG"
CHIP_VER_LOWER=$OPTARG
;;
v)
echo "v's arg: $OPTARG"
DB_LOWER=$OPTARG
;;
p)
echo "p's arg: $OPTARG"
PSRAM_SIZE=$OPTARG
;;
t)
echo "t's arg: $OPTARG"
CORE_TYPE_LOWER=$OPTARG
;;
f)
echo "f's arg: $OPTARG"
FAST_BOOT=$OPTARG
;;
h)
echo "[Usage]"
echo "$0 -d (hw chip id) -c (custom name) -i (image type) -r (run environment) -m (mode type) -s (flash size) -a (app_name)"
exit 1
;;
?)
echo "unsupport argument"
echo "[Usage]"
echo "$0 -d (hw chip id) -c (custom name) -i (image type) -r (run environment) -s (flash size) -a (app_name)"
exit 1
;;
esac
done
if [ "$BOARD_LOWER" == "" ] || [ "$CHIP_ID" == "" ] || [ "$IMG_LOWER" == "" ] || [ "$RUN_LOWER" == "" ]; then
echo "input argument error"
echo "[Usage]"
echo "$0 -d (hw chip id) -c (custom name) -i (image type) -r (run environment)"
exit 1
fi
#get iot_ver from iot_version.h.
IOT_VER_FILE="${TOP_DIR}/inc/iot_version.h"
get_iot_ver() {
ver_file=$1
major_ver=`cat ${ver_file} |grep " AP_FIRMWARE_VERSION_MAJOR"|awk '{print $3}'`
mionor_ver=`cat ${ver_file} |grep " AP_FIRMWARE_VERSION_MINOR"|awk '{print $3}'`
micro_ver=`cat ${ver_file} |grep " AP_FIRMWARE_VERSION_MICRO"|awk '{print $3}'`
build_ver=`cat ${ver_file} |grep " AP_FIRMWARE_VERSION_BUILD"|awk '{print $3}'`
major_ver=${major_ver//(/}
major_ver=${major_ver//)/}
mionor_ver=${mionor_ver//(/}
mionor_ver=${mionor_ver//)/}
micro_ver=${micro_ver//(/}
micro_ver=${micro_ver//)/}
build_ver=${build_ver//(/}
build_ver=${build_ver//)/}
IOT_VER="${major_ver}.${mionor_ver}.${micro_ver}.${build_ver}"
return
}
if [ "$PSRAM_ENABLE_GEN" == "1" ]; then
if [ "$PSRAM_SIZE" == "" ] || [ "$PSRAM_SIZE" == "4" ]; then
# the default psram size is 4m
PSRAM_SIZE_STR="F"
PSRAM_SIZE_PARAM="P4"
elif [ "$PSRAM_SIZE" == "8" ]; then
PSRAM_SIZE_STR="E"
PSRAM_SIZE_PARAM="P8"
else
PSRAM_SIZE_STR="T"
PSRAM_SIZE_PARAM="P2"
fi
else
PSRAM_SIZE="0"
PSRAM_SIZE_PARAM="P0"
fi
# 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" ] \
|| [ "$APP_LOWER" == "ge_micro" ] || [ "$APP_LOWER" == "sila" ] || [ "$APP_LOWER" == "at_micro" ] || [ "$APP_LOWER" == "iot_dl645" ]; then
IOT_SMART_BUILD=1
APP_UPPER=$(echo $APP_LOWER | tr '[a-z]' '[A-Z]')
else
IOT_SMART_BUILD=0
if [ "$APP_LOWER" == "brm" ] || [ "$APP_LOWER" == "brk" ] || [ "$APP_LOWER" == "tfm" ] || [ "$APP_LOWER" == "bsrm" ] \
|| [ "$APP_LOWER" == "bsrm_cus" ] || [ "$APP_LOWER" == "solr" ] || [ "$APP_LOWER" == "sg_ext" ] \
|| [ "$APP_LOWER" == "sg_meter" ] || [ "$APP_LOWER" == "sniffer" ]; then
APP_UPPER=$(echo $APP_LOWER | tr '[a-z]' '[A-Z]')
else
APP_UPPER="SG"
fi
fi
if [ "$DB_LOWER" == "release" ]; then
DB_RLS_FLAG="R"
else
DB_LOWER="debug"
DB_RLS_FLAG="D"
fi
BOARD_UPPER=$(echo $BOARD_LOWER | tr '[a-z]' '[A-Z]')
IMG_UPPER=$(echo $IMG_LOWER | tr '[a-z]' '[A-Z]')
RUN_UPPER=$(echo $RUN_LOWER | tr '[a-z]' '[A-Z]')
MODE_UPPER=$(echo $MODE_LOWER | tr '[a-z]' '[A-Z]')
SIZE_UPPER=$(echo $SIZE_LOWER | tr '[a-z]' '[A-Z]')
CHIP_VER_UPPER=$(echo $CHIP_VER_LOWER | tr '[a-z]' '[A-Z]')
CORE_TYPE_UPPER=$(echo $CORE_TYPE_LOWER | tr '[a-z]' '[A-Z]')
# cleanup old file.
rm -f $CUR_DIR/sbl.bin
rm -f $CUR_DIR/pib.bin
rm -f $CUR_DIR/sp.bin
rm -f $CUR_DIR/oem*.bin
rm -f $CUR_DIR/ht.bin
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
rm -f $CUR_DIR/ht_cus.bin
rm -f $CUR_DIR/ht_cus.bin.fw
rm -f $CUR_DIR/ht_cus_ori.bin
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/
elif [[ "${BOARD_LOWER}" == "evb32"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/hz_evb/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/hz_evb/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "evb558"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/qj_evb/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/qj_evb/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "evb671"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/flx_evb/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/flx_evb/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "htzd3211pt03" ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/pt/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/pt/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "htzd"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/htzd/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/htzd/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "qj"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/qj/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/qj/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "flx"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/flx/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/flx/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "spe"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/spe/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/spe/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "gx"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/gx/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/gx/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "dt"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/dt/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/dt/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "evb5202"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/evb5202/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/evb5202/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "goldfinger_17p"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/goldfinger_17p/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/goldfinger_17p/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "stamp"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/stamp/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/stamp/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "ledc"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/ledc/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/ledc/${IMG_LOWER}/out/
elif [[ "${BOARD_LOWER}" == "yp"* ]]; then
BIN_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/yp/${IMG_LOWER}/bin/
OUT_PATH=${CUR_DIR}/customer/${SIZE_UPPER}/yp/${IMG_LOWER}/out/
else
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
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}"_upgrade_psram.cfg"
else
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}"_upgrade.cfg"
fi
else
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}"_upgrade.cfg"
fi
else
if [ ${IOT_SMART_BUILD} == 1 ]; then
if [ "${SIZE_UPPER}" == "2M" ] || [ "${SIZE_UPPER}" == "4M" ]; then
if [ "${RUN_UPPER}" == "PSRAM" ]; then
CFG_NAME=${CFG_DIR}"/smart_"${SIZE_LOWER}"_"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/smart_"${SIZE_LOWER}"_"${IMG_LOWER}.cfg
fi
else
CFG_NAME=${CFG_DIR}"/smart_"${IMG_LOWER}.cfg
fi
else
if [ "${SIZE_UPPER}" != "" ]; then
if [ "${RUN_UPPER}" == "PSRAM" ]; then
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}.cfg
fi
else
if [ "${RUN_UPPER}" == "PSRAM" ]; then
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}.cfg
fi
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
OPT_KEYWORD=""
fi
if [ "x${DUAL_ENABLE}" == "x1" ]; then
OPT_KEYWORD=DUAL-${OPT_KEYWORD}
fi
if [ "x${RF_ENABLE}" == "x1" ]; then
OPT_KEYWORD=RF-${OPT_KEYWORD}
fi
# 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
HT_FILE="ht_"${IMG_LOWER}".bin"
fi
if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then
cp ${TOP_DIR}/ap/.output/cus/lib/${HT_FILE} $CUR_DIR/ht_cus.bin
fi
if [[ "${BOARD_LOWER}" == "*3201*" ]]; then
chip_ver=3201
fi
if [[ "${BOARD_LOWER}" == "*3211*" ]]; then
chip_ver=3211
fi
if [[ "${BOARD_LOWER}" == "*3031*" ]]; then
chip_ver=3031
fi
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
# 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"
OEM_FILE=${BOARD_UPPER}"_AMPIOT_OEM.bin"
else
OEM_CFG=${BOARD_UPPER}"_AMPSG_OEM.ini"
OEM_FILE=${BOARD_UPPER}"_AMPSG_OEM.bin"
fi
else
OEM_CFG=${BOARD_UPPER}"_OEM.ini"
OEM_FILE=${BOARD_UPPER}"_OEM.bin"
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
elif [ "${IMG_UPPER}" == "STA" ]; then
sed -i "s/mid.*/mid 0/g" ./tmp_oem.ini
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
# 修改配置文件中的layout index配置
sed -i "/img_type=./a layout_index=${FLASH_LAYOUT_INDEX}" ${TMP_CFG_NAME}
# 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
# 虽然配置文件中给每个部分得img都添加了配置 但ah中只会对fw部分的img添加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
echo -e "\n-----a------\n" >> cfg_log.txt
./ah -a ${TMP_CFG_NAME}
sed -i "s/ht_1p.bin/ht.bin/g" ${TMP_CFG_NAME}
if [ "${chip_ver}" == "3201" ]; then
#avoid ht_cus.bin add head twice
sed -i "s/ht_cus.bin/ht_cus_tmp.bin/g" ${TMP_CFG_NAME}
# add header
cat ${TMP_CFG_NAME} >> cfg_log.txt
echo -e "\n-----a------\n" >> cfg_log.txt
./ah -a ${TMP_CFG_NAME}
sed -i "s/ht_cus_tmp.bin/ht_cus.bin/g" ${TMP_CFG_NAME}
fi
else
# add header
# 其他模式直接开始生成
cat ${TMP_CFG_NAME} >> cfg_log.txt
echo -e "\n-----a------\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
echo -e "\n-----a------\n" >> cfg_log.txt
./ah -a ${TMP_CFG_NAME}
sed -i "s/ht_1p.bin/ht.bin/g" ${TMP_CFG_NAME}
if [ "${chip_ver}" == "3201" ]; then
# add header
cat ${TMP_CFG_NAME} >> cfg_log.txt
echo -e "\n-----a------\n" >> cfg_log.txt
./ah -a ${TMP_CFG_NAME}
fi
else
# add header
# 其他情况直接生成
cat ${TMP_CFG_NAME} >> cfg_log.txt
echo -e "\n------a-----\n" >> cfg_log.txt
./ah -a ${TMP_CFG_NAME}
fi
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
cp $CUR_DIR/ht_cus.bin $CUR_DIR/ht_cus.bin.fw
mv $CUR_DIR/ht_cus.bin.lzma $CUR_DIR/ht_cus.bin
fi
if [ "${IMG_UPPER}" == "CCO" ] && [ ${IOT_SMART_BUILD} == 1 ]; then
./elzma e $CUR_DIR/ht_1p.bin $CUR_DIR/ht_1p.bin.lzma
cp $CUR_DIR/ht_1p.bin $CUR_DIR/ht_1p.bin.fw
mv $CUR_DIR/ht_1p.bin.lzma $CUR_DIR/ht_1p.bin
if [ "${chip_ver}" == "3201" ]; then
./elzma e $CUR_DIR/ht.bin $CUR_DIR/ht.bin.lzma
cp $CUR_DIR/ht.bin $CUR_DIR/ht.bin.fw
mv $CUR_DIR/ht.bin.lzma $CUR_DIR/ht.bin
fi
else
./elzma e $CUR_DIR/ht.bin $CUR_DIR/ht.bin.lzma
cp $CUR_DIR/ht.bin $CUR_DIR/ht.bin.fw
mv $CUR_DIR/ht.bin.lzma $CUR_DIR/ht.bin
fi
fi
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}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0x66,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=20810,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "FLX6710CCO03" ] || [ "${BOARD_UPPER}" == "FLX6710CKB03" ] || [ "${BOARD_UPPER}" == "FLX6711STA03" ] || [ "${BOARD_UPPER}" == "FLX6711IIC03" ] ||
[ "${BOARD_UPPER}" == "FLX67113PS03" ] || [ "${BOARD_UPPER}" == "EVB6710CCO03" ] || [ "${BOARD_UPPER}" == "EVB6711STA03" ] || [ "${BOARD_UPPER}" == "EVB67113PS03" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0x99,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=20552,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "SPE7303CCO03" ] || [ "${BOARD_UPPER}" == "SPE7303CKB03" ] || [ "${BOARD_UPPER}" == "SPE7301STA03" ] || [ "${BOARD_UPPER}" == "SPE7301IIC03" ] ||
[ "${BOARD_UPPER}" == "SPE73013PS03" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0xcc,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=20549,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "GX2001CCO03" ] || [ "${BOARD_UPPER}" == "GX2001CKB03" ] || [ "${BOARD_UPPER}" == "GX2011STA03" ] || [ "${BOARD_UPPER}" == "GX2011IIC03" ] ||
[ "${BOARD_UPPER}" == "GX20113PS03" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0x33,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=18264,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "DT0530CCO03" ] || [ "${BOARD_UPPER}" == "DT0531STA03" ] || [ "${BOARD_UPPER}" == "DT0531IIC03" ] || [ "${BOARD_UPPER}" == "DT05313PS03" ] ||
[ "${BOARD_UPPER}" == "DT0530CKB03" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0xdd,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=17492,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "YP8801CCO03" ] || [ "${BOARD_UPPER}" == "YP8811STA03" ] || [ "${BOARD_UPPER}" == "YP88113PS03" ] || [ "${BOARD_UPPER}" == "YP8801CKB03" ] ||
[ "${BOARD_UPPER}" == "YP8811IIC03" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0xa9,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=22864,g" ${TMP_CFG_NAME}
fi
# prepare pib file
# 根据board类型来选择pib文件
PIB_IMG=${BOARD_UPPER}
#BRM BSRM BSRM_CUS BRMT.
if [ "${BOARD_UPPER}" == "HTZD3201BSRM03" ] || [ "${BOARD_UPPER}" == "HTZD3201BRMT03" ]; then
PIB_IMG="EVB5202STA03"
fi
# HTZD + EVB.
if [ "${BOARD_UPPER}" == "HTZD3201CCO03" ] || [ "${BOARD_UPPER}" == "EVB3201CCO03" ] || [ "${BOARD_UPPER}" == "EVB3201CCO03_RFIN" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "HTZD3211IIC03" ] || [ "${BOARD_UPPER}" == "EVB3211IIC03" ]; then
PIB_IMG=HTZDIIC
elif [ "${BOARD_UPPER}" == "HTZD32113PS03" ] || [ "${BOARD_UPPER}" == "EVB32113PS03" ] ||
[ "${BOARD_UPPER}" == "HTZD3211STA03" ] || [ "${BOARD_UPPER}" == "EVB3211STA03" ] ||
[ "${BOARD_UPPER}" == "EVB3211STA03_RFIN" ] || [ "${BOARD_UPPER}" == "HTZD3211PT03" ]; then
PIB_IMG=HTZDSTA
fi
if [[ "${BOARD_UPPER}" == *"CKB03" ]]; then
# CKB.
PIB_IMG=HTZDSTA01_PIB
fi
if [[ "${BOARD_UPPER}" == "EVB32"* ]]; then
# ${BOARD_UPPER/EVB} 作用是去除BOARD_UPPER 中的 EVB字符串
BOARD_UPPER=${BOARD_UPPER/EVB/HZEVB}
fi
BOARD_UPPER=${BOARD_UPPER/3201/}
BOARD_UPPER=${BOARD_UPPER/3211/}
BOARD_UPPER=${BOARD_UPPER/3031/}
# QJ + EVB.
if [ "${BOARD_UPPER}" == "QJ5580DCCO03" ] || [ "${BOARD_UPPER}" == "EVB5580DCCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "QJ5582D3PS03" ] || [ "${BOARD_UPPER}" == "EVB5582D3PS03" ] || \
[ "${BOARD_UPPER}" == "QJ5582DSTA03" ] || [ "${BOARD_UPPER}" == "EVB5582DSTA03" ] || \
[ "${BOARD_UPPER}" == "QJ5582DIIC03" ]; then
PIB_IMG=HTZDSTA
fi
if [[ "${BOARD_UPPER}" == "EVB558"* ]]; then
BOARD_UPPER=${BOARD_UPPER/EVB/QJEVB}
fi
BOARD_UPPER=${BOARD_UPPER/5580D/}
BOARD_UPPER=${BOARD_UPPER/5582D/}
# FLX + EVB.
if [ "${BOARD_UPPER}" == "FLX6710CCO03" ] || [ "${BOARD_UPPER}" == "EVB6710CCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "FLX67113PS03" ] || [ "${BOARD_UPPER}" == "EVB67113PS03" ] || \
[ "${BOARD_UPPER}" == "FLX6711IIC03" ] || \
[ "${BOARD_UPPER}" == "FLX6711STA03" ] || [ "${BOARD_UPPER}" == "EVB6711STA03" ]; then
PIB_IMG=HTZDSTA
fi
if [[ "${BOARD_UPPER}" == "EVB671"* ]]; then
BOARD_UPPER=${BOARD_UPPER/EVB/FLXEVB}
fi
BOARD_UPPER=${BOARD_UPPER/6710/}
BOARD_UPPER=${BOARD_UPPER/6711/}
# SPE.
if [ "${BOARD_UPPER}" == "SPE7303CCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "SPE73013PS03" ] || [ "${BOARD_UPPER}" == "SPE7301IIC03" ] || \
[ "${BOARD_UPPER}" == "SPE7301STA03" ] ; then
PIB_IMG=HTZDSTA
fi
BOARD_UPPER=${BOARD_UPPER/7303/}
BOARD_UPPER=${BOARD_UPPER/7301/}
# GX.
if [ "${BOARD_UPPER}" == "GX2001CCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "GX20113PS03" ] || [ "${BOARD_UPPER}" == "GX2011IIC03" ] || \
[ "${BOARD_UPPER}" == "GX2011STA03" ] ; then
PIB_IMG=HTZDSTA
fi
BOARD_UPPER=${BOARD_UPPER/2001/}
BOARD_UPPER=${BOARD_UPPER/2011/}
# DT.
if [ "${BOARD_UPPER}" == "DT0530CCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "DT05313PS03" ] || [ "${BOARD_UPPER}" == "DT0531STA03" ] || \
[ "${BOARD_UPPER}" == "DT0531IIC03" ] ; then
PIB_IMG=HTZDSTA
fi
BOARD_UPPER=${BOARD_UPPER/0530/}
BOARD_UPPER=${BOARD_UPPER/0531/}
# YP.
if [ "${BOARD_UPPER}" == "YP8801CCO03" ]; then
PIB_IMG=HTZDCCO
elif [ "${BOARD_UPPER}" == "YP88113PS03" ] || [ "${BOARD_UPPER}" == "YP8811STA03" ] || \
[ "${BOARD_UPPER}" == "YP8811IIC03" ] ; then
PIB_IMG=HTZDSTA
fi
BOARD_UPPER=${BOARD_UPPER/8801/}
BOARD_UPPER=${BOARD_UPPER/8811/}
# GOLDFINGER.
if [ "${BOARD_UPPER}" == "GOLDFINGER_17P03" ]; then
if [ "${IMG_UPPER}" == "CCO" ]; then
PIB_IMG=${BOARD_UPPER/GOLDFINGER_17P/HTZD3201CCO}
BOARD_UPPER=${BOARD_UPPER/GOLDFINGER_17P/GOLDFINGER_17PCCO}
else
PIB_IMG=${BOARD_UPPER/GOLDFINGER_17P/HTZD3211STA}
BOARD_UPPER=${BOARD_UPPER/GOLDFINGER_17P/GOLDFINGER_17PSTA}
fi
fi
# STAMP.
if [ "${BOARD_UPPER}" == "STAMP03" ]; then
if [ "${IMG_UPPER}" == "CCO" ]; then
PIB_IMG=${BOARD_UPPER/STAMP/HTZD3201CCO}
BOARD_UPPER=${BOARD_UPPER/STAMP/STAMPCCO}
else
PIB_IMG=${BOARD_UPPER/STAMP/HTZD3211STA}
BOARD_UPPER=${BOARD_UPPER/STAMP/STAMPSTA}
fi
fi
# LEDC.
if [ "${BOARD_UPPER}" == "LEDC03" ]; then
if [ "${IMG_UPPER}" == "CCO" ]; then
PIB_IMG=${BOARD_UPPER/LEDC/HTZD3201CCO}
BOARD_UPPER=${BOARD_UPPER/LEDC/LEDCCCO}
else
PIB_IMG=${BOARD_UPPER/LEDC/HTZD3211STA}
BOARD_UPPER=${BOARD_UPPER/LEDC/LEDCSTA}
fi
fi
PIB_SRC_PATH=${TOP_DIR}/tools/pib/
cd ${PIB_SRC_PATH}
#kl3 pt board only need two general pib files
if [ "${BOARD_UPPER}" == "HTZDPT03" ]; then
PIB_FILE=HTZDSTA01_PIB.bin
LP_PIB_FILE=HTZDSTA01_LP_PIB.bin
else
# 找到所有包含指定名称的pib文件
# 这里找到的pib文件不区分是01还是03
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"`
fi
fi
cd -
#kl3 need to modify the FTM firmware name.
if [ "${IMG_UPPER}" == "FTM" ]; 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}
else
sed -i "s,key_word=IOT-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${OPT_KEYWORD}${DB_RLS_FLAG}-,g" ${TMP_CFG_NAME}
fi
else
if [ "${RUN_UPPER}" == "PSRAM" ]; then
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${RUN_UPPER}-${PSRAM_SIZE_STR}-${OPT_KEYWORD},g" ${TMP_CFG_NAME}
elif [ "${RUN_UPPER}" == "UPGRADE" ]; then
if [ "$PSRAM_ENABLE_GEN" == "1" ]; then
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${RUN_UPPER}-PSRAM-${PSRAM_SIZE_STR}-${OPT_KEYWORD},g" ${TMP_CFG_NAME}
else
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${RUN_UPPER}-${OPT_KEYWORD},g" ${TMP_CFG_NAME}
fi
else
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${OPT_KEYWORD},g" ${TMP_CFG_NAME}
fi
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
#define img_type
if [ "x${DUAL_ENABLE}" == "x1" ]; then
if [ "${APP_UPPER}" == "BRM" ]; then
sed -i "s/img_type=./img_type=7/" ${TMP_CFG_NAME}
elif [ "${APP_UPPER}" == "BSRM_CUS" ]; then
sed -i "s/img_type=./img_type=8/" ${TMP_CFG_NAME}
else
sed -i "s/img_type=./img_type=2/" ${TMP_CFG_NAME}
fi
if [ "${IMG_UPPER}" == "CKB" ]; then
sed -i "s/img_type=./img_type=6/" ${TMP_CFG_NAME}
fi
if [ "x${NEW_TYPE_CCO}" == "x1" ]; then
sed -i "s/img_type=./img_type=10/" ${TMP_CFG_NAME}
fi
else
if [ "${APP_UPPER}" == "BRM" ]; then
sed -i "s/img_type=./img_type=12/" ${TMP_CFG_NAME}
elif [ "${APP_UPPER}" == "BSRM_CUS" ]; then
sed -i "s/img_type=./img_type=13/" ${TMP_CFG_NAME}
else
sed -i "s/img_type=./img_type=11/" ${TMP_CFG_NAME}
fi
if [ "${IMG_UPPER}" == "CKB" ] || [ "x${NEW_TYPE_CCO}" == "x1" ]; then
echo "Something wrong!!!, stop generate firmware."
exit 1
fi
fi
set -o errexit
array=("${PIB_FILE// / }" "${LP_PIB_FILE// / }")
# 根据找到的PIB文件来依次生成 最终的bin文件
for var in ${array[@]}
do
echo "pib:${var}"
cp ${TOP_DIR}/tools/pib/$var $CUR_DIR/pib.bin
cp ${TOP_DIR}/tools/pib/$var ${OUT_PATH}
left=${var#*_}
append=""
while [ "$left"x != "PIB.bin"x ]; do
val=`echo $left | awk -F '_' '{print $1}'`
left=${left#*_}
append=$append$val"-"
done
cp ${TMP_CFG_NAME} ./tmp.cfg
if [ "${IMG_UPPER}" == "CCO" ]; then
if [ ${IOT_SMART_BUILD} == 1 ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-1P-${append},g" ./tmp.cfg
sed -i "s/ht.bin/ht_1p.bin/g" ./tmp.cfg
cat ./tmp.cfg >> cfg_log.txt
echo -e "\n------c-----\n" >> cfg_log.txt
./ah -c ./tmp.cfg
#board-3201 need extra 3p-cco.
if [ "${chip_ver}" == "3201" ]; then
sed -i "s/ht_1p.bin/ht.bin/g" ./tmp.cfg
sed -i "s/-${BOARD_UPPER}-1P-/-${BOARD_UPPER}-3P-/" ./tmp.cfg
cat ./tmp.cfg >> cfg_log.txt
echo -e "\n------c-----\n" >> cfg_log.txt
./ah -c ./tmp.cfg
fi
else
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${append},g" ./tmp.cfg
if [ "x${NEW_TYPE_CCO}" == "x1" ]; then
sed -i "/key_word/s/CCO/NEW_TYPE_CCO/g" ./tmp.cfg
fi
cat ./tmp.cfg >> cfg_log.txt
echo -e "\n------c-----\n" >> cfg_log.txt
./ah -c ./tmp.cfg
fi
else
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}-${append},g" ./tmp.cfg
cat ./tmp.cfg >> cfg_log.txt
echo -e "\n------c-----\n" >> cfg_log.txt
./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
left=${var#*_}
if [ "$left"x == "LP_PIB.bin"x ] && [ "${RUN_UPPER}X" == "UPGRADEX" ]; then
sed -i "s/image_num=.*/image_num=0x1/g" ./tmp.cfg
sed -i "s/${BOARD_UPPER}/${BOARD_UPPER}-ONLYPIB/g" ./tmp.cfg
cat ./tmp.cfg >> cfg_log.txt
echo -e "\n------c-----\n" >> cfg_log.txt
./ah -c ./tmp.cfg
fi
fi
fi
rm ./tmp.cfg
done
rm ${TMP_CFG_NAME}
#prepare .out file.
if [ "x${CORE_TYPE_UPPER}" == "xAMPPLC" ]; then
if [ ! -d ${OUT_PATH}/amp_plc ]; then
mkdir -p ${OUT_PATH}/amp_plc
fi
cp ${TOP_DIR}/ap/.output/plc/lib/* ${OUT_PATH}/amp_plc
cp ${TOP_DIR}/sbl/.output/plc/lib/* ${OUT_PATH}/amp_plc
if [ "x${DUAL_ENABLE}" == "x1" ]; then
cp -f ${TOP_DIR}/bb_cpu/.output/plc/lib/* ${OUT_PATH}/amp_plc
fi
if [ -d "${TOP_DIR}/ap/.output/cus/lib" ]; then
if [ ! -d ${OUT_PATH}/amp_cus ]; then
mkdir -p ${OUT_PATH}/amp_cus
fi
cp ${TOP_DIR}/ap/.output/cus/lib/* ${OUT_PATH}/amp_cus
fi
else
if [ ! -d ${OUT_PATH}/plc_only ]; then
mkdir -p ${OUT_PATH}/plc_only
fi
cp ${TOP_DIR}/ap/.output/plc/lib/* ${OUT_PATH}/plc_only
cp ${TOP_DIR}/sbl/.output/plc/lib/* ${OUT_PATH}/plc_only
if [ "x${DUAL_ENABLE}" == "x1" ]; then
cp -f ${TOP_DIR}/bb_cpu/.output/plc/lib/* ${OUT_PATH}/plc_only
fi
if [ "x${SEC_CPU_ENABLE}" == "x1" ]; then
cp -f ${TOP_DIR}/sec_cpu/.output/plc/lib/* ${OUT_PATH}/plc_only
fi
fi
cp ${TOP_DIR}/tools/oem/${OEM_FILE} ${OUT_PATH}
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/
else
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 [ "${IMG_UPPER}" == "3PS" ] || [ "${IMG_UPPER}" == "CKB" ]; then
IMG_LOWER="sta"
fi
if [ "${product_line}" == "PLC" ] && [ "${target}" == "kunlun2" ]; then
CFG_DIR=${TOP_DIR}"/build/cfg2_plc"
else
CFG_DIR=${TOP_DIR}"/build/cfg"
fi
if [ "${RUN_UPPER}" == "UPGRADE" ]; then
if [ "${SIZE_UPPER}" != "" ]; then
if [ "$PSRAM_ENABLE_GEN" == "1" ] && [[ "${IMG_LOWER}" == "sta" || "${IMG_LOWER}" == "iic" ]]; then
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}"_upgrade_psram.cfg"
else
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}"_upgrade.cfg"
fi
else
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}"_upgrade.cfg"
fi
else
if [ ${IOT_SMART_BUILD} == 1 ]; then
if [ "${SIZE_UPPER}" == "2M" ] || [ "${SIZE_UPPER}" == "4M" ]; then
if [ "${RUN_UPPER}" == "PSRAM" ]; then
CFG_NAME=${CFG_DIR}"/smart_"${SIZE_LOWER}"_"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/smart_"${SIZE_LOWER}"_"${IMG_LOWER}.cfg
fi
else
CFG_NAME=${CFG_DIR}"/smart_"${IMG_LOWER}.cfg
fi
else
if [ "${SIZE_UPPER}" != "" ]; then
if [ "${RUN_UPPER}" == "PSRAM" ] && [[ "${IMG_LOWER}" == "sta" || "${IMG_LOWER}" == "iic" || "${IMG_LOWER}" == "ftm" ]]; then
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/"${SIZE_LOWER}"_"${IMG_LOWER}.cfg
fi
else
if [ "${RUN_UPPER}" == "PSRAM" ] && [ "${IMG_LOWER}" == "sta" ]; then
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}_psram.cfg
else
CFG_NAME=${CFG_DIR}"/"${IMG_LOWER}.cfg
fi
fi
fi
fi
if [ "${CHIP_VER_UPPER}" == "" ]; then
CHIP_VER_UPPER="1"
fi
TMP_CFG_NAME=${CFG_DIR}"/"${BOARD_LOWER}_${IMG_LOWER}_tmp.cfg
cp ${CFG_NAME} ${TMP_CFG_NAME}
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}${IMG_UPPER}0${CHIP_VER_UPPER}-${RUN_UPPER}-${PSRAM_SIZE_STR}-${DB_RLS_FLAG}-,g" ${TMP_CFG_NAME}
else
sed -i "s,key_word=IOT-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${DB_RLS_FLAG}-,g" ${TMP_CFG_NAME}
fi
else
if [ "${RUN_UPPER}" == "PSRAM" ]; then
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${RUN_UPPER}-${PSRAM_SIZE_STR}-,g" ${TMP_CFG_NAME}
elif [ "${RUN_UPPER}" == "UPGRADE" ]; then
if [ "$PSRAM_ENABLE_GEN" == "1" ]; then
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${RUN_UPPER}-PSRAM-${PSRAM_SIZE_STR}-,g" ${TMP_CFG_NAME}
else
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${RUN_UPPER}-,g" ${TMP_CFG_NAME}
fi
else
if [ "$IMG_UPPER" == "CCO" ]; then
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-PSRAM-${PSRAM_SIZE_STR}-,g" ${TMP_CFG_NAME}
else
sed -i "s,key_word=SG-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,g" ${TMP_CFG_NAME}
fi
fi
fi
#config scramble.
if [ "${BOARD_UPPER}" == "JSMT" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0xaa,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=19796,g" ${TMP_CFG_NAME}
fi
if [ "${BOARD_UPPER}" == "FLX" ]; then
sed -i "s,encrypt_mode=0x0,encrypt_mode=0x3,g" ${TMP_CFG_NAME}
sed -i "s,encrypt_pattern=0x55,encrypt_pattern=0x99,g" ${TMP_CFG_NAME}
sed -i "s,vendor_id=18516,vendor_id=20552,g" ${TMP_CFG_NAME}
fi
# prepare ht.bin
if [ "${IMG_UPPER}" == "IIC" ] || [ "${IMG_UPPER}" == "3PS" ] || [ "${IMG_UPPER}" == "I3C" ]; then
HT_FILE="ht_sta.bin"
else
HT_FILE="ht_"${IMG_LOWER}".bin"
fi
if [ ${IOT_SMART_BUILD} == 1 ] && [ "${IMG_UPPER}" == "CCO" ]; then
cp $CUR_DIR/iot_ht_3p.bin $CUR_DIR/ht.bin
cp $CUR_DIR/iot_ht_1p.bin $CUR_DIR/ht_1p.bin
fi
if [ ! -f $CUR_DIR/ht.bin ]; then
cp ${TOP_DIR}/ap/.output/lib/${HT_FILE} $CUR_DIR/ht.bin
fi
sed -i "/img_type=./a layout_index=${FLASH_LAYOUT_INDEX}" ${TMP_CFG_NAME}
if [ "x${NEW_TYPE_CCO}" == "x1" ]; then
sed -i "s/img_type=./img_type=9/" ${TMP_CFG_NAME}
fi
#config lzma.
if [ "${MODE_UPPER}" == "LZMA" ]; then
./elzma e $CUR_DIR/ht.bin $CUR_DIR/ht.bin.lzma
cp $CUR_DIR/ht.bin $CUR_DIR/ht.bin.fw
mv $CUR_DIR/ht.bin.lzma $CUR_DIR/ht.bin
if [ -f $CUR_DIR/ht_1p.bin ]; then
./elzma e $CUR_DIR/ht_1p.bin $CUR_DIR/ht_1p.bin.lzma
cp $CUR_DIR/ht_1p.bin $CUR_DIR/ht_1p.bin.fw
mv $CUR_DIR/ht_1p.bin.lzma $CUR_DIR/ht_1p.bin
fi
fi
# prepare oem.bin
cp $TOP_DIR/sbl/.output/lib/kunlun_sbl.bin $CUR_DIR/sbl.bin
cp $TOP_DIR/mfgtool/ram/.output/lib/kl${CHIP_VER_UPPER}_ram.bin $CUR_DIR/ram.bin
cp $TOP_DIR/mfgtool/ram/.output/lib/kl${CHIP_VER_UPPER}_ram*.bin $CUR_DIR
cp $TOP_DIR/sp/boot/.output/lib/sp_fw.bin $CUR_DIR/sp.bin
if [ "${IMG_UPPER}" == "FTM" ] || [ "${IMG_UPPER}" == "CKB" ]; then
OEM_CFG=${BOARD_UPPER}"STA01_OEM.ini"
OEM_FILE=${BOARD_UPPER}"STA01_OEM.bin"
elif [ "${BOARD_UPPER}" == "STAMP_22P" ] || [ "${BOARD_UPPER}" == "SI301X_30P" ] \
|| [ "${BOARD_UPPER}" == "GOLDFINGER_17P" ] \
|| [ "${BOARD_UPPER}" == "MPPT" ] || [ "${BOARD_UPPER}" == "HTR" ]; then
#cco and sta share one oem for STAMP_22P SI301X_30P GOLDFINGER_17P MPPT HTR.
OEM_CFG=${BOARD_UPPER}"_OEM.ini"
OEM_FILE=${BOARD_UPPER}"_OEM.bin"
else
OEM_CFG=${BOARD_UPPER}${IMG_UPPER}"0"${CHIP_VER_UPPER}"_OEM.ini"
OEM_FILE=${BOARD_UPPER}${IMG_UPPER}"0"${CHIP_VER_UPPER}"_OEM.bin"
fi
cp $TOP_DIR/tools/oem/$OEM_CFG ./tmp_oem.ini
#set mid for iot board(cco and sta use same oem.ini)
if [ ${IOT_SMART_BUILD} == 1 ]; then
if [ "${IMG_UPPER}" == "CCO" ]; then
sed -i "s/mid.*/mid 1/g" ./tmp_oem.ini
elif [ "${IMG_UPPER}" == "STA" ]; then
sed -i "s/mid.*/mid 0/g" ./tmp_oem.ini
fi
fi
if [ "${RUN_UPPER}" != "UPGRADE" ]; then
./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
PIB_SRC_PATH=${TOP_DIR}/tools/pib/
if [ "${BOARD_UPPER}" == "FLX" ] || [ "${BOARD_UPPER}" == "STAMP_22P" ] \
|| [ "${BOARD_UPPER}" == "SI301X_30P" ] || [ "${BOARD_UPPER}" == "LEDC_3P0" ] \
|| [ "${BOARD_UPPER}" == "GOLDFINGER_17P" ] || [ "${BOARD_UPPER}" == "D2D" ] \
|| [ "${BOARD_UPPER}" == "CCTT" ] || [ "${BOARD_UPPER}" == "MPPT" ] \
|| [ "${BOARD_UPPER}" == "HTR" ]; then
BOARD_UPPER_PIB="HTZD"
else
BOARD_UPPER_PIB=${BOARD_UPPER}
fi
if [ "${IMG_UPPER}" == "FTM" ] || [ "${IMG_UPPER}" == "CKB" ]; then
PIB_IMG="STA"
else
PIB_IMG=${IMG_UPPER}
PIB_FILE=${BOARD_UPPER_PIB}${IMG_UPPER}"01_PIB.bin"
fi
if [ "${IMG_UPPER}" == "3PS" ]; then
PIB_IMG="STA"
PIB_FILE=${BOARD_UPPER_PIB}"STA01_PIB.bin"
fi
cd ${PIB_SRC_PATH}
if [ ${IOT_SMART_BUILD} == 1 ]; then
PIB_FILE=`ls ${PIB_SRC_PATH} | grep "${BOARD_UPPER_PIB}" | grep "${PIB_IMG}0${CHIP_VER_UPPER}_PIB"`
LP_PIB_FILE=`ls ${PIB_SRC_PATH} | grep "${BOARD_UPPER_PIB}" | grep "${PIB_IMG}0${CHIP_VER_UPPER}_LP_PIB"`
else
PIB_FILE=`ls ${PIB_SRC_PATH} | grep "${BOARD_UPPER_PIB}" | grep "${PIB_IMG}" | grep "PIB"`
fi
cd -
set -o errexit
array=("${PIB_FILE// / }" "${LP_PIB_FILE// / }")
for var in ${array[@]}
do
echo "pib:${var}"
cp ${TOP_DIR}/tools/pib/$var $CUR_DIR/pib.bin
cp ${TOP_DIR}/tools/pib/$var ${OUT_PATH}
left=${var#*_}
append=""
while [ "$left"x != "PIB.bin"x ]; do
val=`echo $left | awk -F '_' '{print $1}'`
left=${left#*_}
append=$append$val"-"
done
cp ${TMP_CFG_NAME} ./tmp.cfg
if [ "${IMG_UPPER}" == "CCO" ] && [ ${IOT_SMART_BUILD} == 1 ]; then
if [ "${SIZE_UPPER}" == "COMBO" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-3P-${append},g" ./tmp.cfg
elif [ "${SIZE_UPPER}" == "4M" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-3P-${append}F-,g" ./tmp.cfg
elif [ "${SIZE_UPPER}" == "2M" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-3P-${append}T-,g" ./tmp.cfg
else
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-3P-${append}O-,g" ./tmp.cfg
fi
else
if [ "${SIZE_UPPER}" == "COMBO" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${append},g" ./tmp.cfg
elif [ "${SIZE_UPPER}" == "4M" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${append}F-,g" ./tmp.cfg
elif [ "${SIZE_UPPER}" == "2M" ]; then
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${append}T-,g" ./tmp.cfg
else
sed -i "s,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-,key_word=${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-${append}O-,g" ./tmp.cfg
fi
fi
if [ "${APP_UPPER}" == "BSRM" ]; then
sed -i "s/img_type=./img_type=3/" ./tmp.cfg
elif [ "${APP_UPPER}" == "BSRM_CUS" ]; then
sed -i "s/img_type=./img_type=4/" ./tmp.cfg
fi
if [ "x${NEW_TYPE_CCO}" == "x1" ]; then
sed -i "/key_word/s/CCO/NEW_TYPE_CCO/g" ./tmp.cfg
fi
#structure fw package.
./ah -c ./tmp.cfg ${PSRAM_SIZE_PARAM}
if [ ${IOT_SMART_BUILD} == 1 ] && [ "${IMG_UPPER}" == "CCO" ]; then
sed -i "s/ht.bin/ht_1p.bin/g" ./tmp.cfg
sed -i "s/-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-3P-/-${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-1P-/" ./tmp.cfg
./ah -c ./tmp.cfg ${PSRAM_SIZE_PARAM}
fi
#extra lp only pib upgrade file for kl1 htzd sta and kl3 fpga sta.
if [ "${BOARD_UPPER}${IMG_UPPER}X" == "HTZDSTAX" ] || [ "${BOARD_UPPER}${IMG_UPPER}X" == "FPGASTAX" ]; then
left=${var#*_}
if [ "$left"x == "LP_PIB.bin"x ] && [ "${RUN_UPPER}X" == "UPGRADEX" ]; then
sed -i "s/image_num=.*/image_num=0x1/g" ./tmp.cfg
sed -i "s/${BOARD_UPPER}${IMG_UPPER}../${BOARD_UPPER}${IMG_UPPER}0${CHIP_VER_UPPER}-ONLYPIB/g" ./tmp.cfg
./ah -c ./tmp.cfg ${PSRAM_SIZE_PARAM}
fi
fi
rm ./tmp.cfg
done
rm ${TMP_CFG_NAME}
rm -f *.lds
#prepare .out file.
cp ${TOP_DIR}/sbl/.output/lib/* ${OUT_PATH}
cp ${TOP_DIR}/mfgtool/ram/.output/lib/* ${OUT_PATH}
cp ${TOP_DIR}/ap/.output/lib/* ${OUT_PATH}
cp ${TOP_DIR}/sp/boot/.output/lib/* ${OUT_PATH}
cp ${TOP_DIR}/tools/oem/${OEM_FILE} ${OUT_PATH}
mv ./${CHIP_ID}-${APP_UPPER}-${BOARD_UPPER}* $BIN_PATH
if [ ${IOT_SMART_BUILD} == 1 ]; then
if [ "${SIZE_LOWER}" == "" ]; then
SPECIAL_OUT_FD="${OUT_PATH}/../out_${CHIP_ID}_${APP_LOWER}_${BOARD_LOWER}_${IMG_LOWER}_${RUN_LOWER}_1m_${DB_LOWER}"
else
SPECIAL_OUT_FD="${OUT_PATH}/../out_${CHIP_ID}_${APP_LOWER}_${BOARD_LOWER}_${IMG_LOWER}_${RUN_LOWER}_${SIZE_LOWER}_${DB_LOWER}"
fi
if [ -d ${SPECIAL_OUT_FD} ]; then
rm -rf ${SPECIAL_OUT_FD}/*
fi
mv ${OUT_PATH} ${SPECIAL_OUT_FD}
fi
fi
echo "genarate image finished."