linuxOS_D21X/target/d211/common/post-image.sh
2024-11-29 16:23:11 +08:00

334 lines
8.0 KiB
Bash
Executable File

#!/bin/bash
MKIMAGEPY=tools/scripts/mk_image.py
MKRESPRIVPY=tools/scripts/mk_private_resource.py
MKENVIMAGE=${HOST_DIR}/bin/mkenvimage
PINMUXCHECKPY=tools/scripts/pinmux_check.py
DTBDIR=${BINARIES_DIR}/u-boot.dtb
PACKAGECHECKPY=tools/scripts/package_check.py
KERNEL_HEADER_DIR=${TOPDIR}/source/linux-5.10/include
UBOOT_HEADER_DIR=${TOPDIR}/source/uboot-2021.10/include
COLOR_BEGIN="\033["
COLOR_RED="${COLOR_BEGIN}41;37m"
COLOR_YELLOW="${COLOR_BEGIN}43;30m"
COLOR_WHITE="${COLOR_BEGIN}47;30m"
COLOR_END="\033[0m"
function mk_error()
{
echo -e " ${COLOR_RED}$*${COLOR_END}"
}
function mk_warn()
{
echo -e " ${COLOR_YELLOW}$*${COLOR_END}"
}
function mk_info()
{
echo -e " ${COLOR_WHITE}$*${COLOR_END}"
}
function run_cmd()
{
echo -e " $*"
eval $1
if [ $? -ne 0 ] ; then
mk_error "Run command failed: $*"
exit 1
fi
}
function mk_uboot_env()
{
local ENVTXT1
local ENVTXT2
mk_info "Install uboot env source file ..."
ENVTXT1="${TARGET_BOARD_DIR}/env.txt"
ENVTXT2="${TARGET_CHIP_DIR}/common/env.txt"
rm -rf ${BINARIES_DIR}/env.txt
if [ -f ${ENVTXT1} ]; then
run_cmd "ln -sf ${ENVTXT1} ${BINARIES_DIR}/"
elif [ -f ${ENVTXT2} ]; then
run_cmd "ln -sf ${ENVTXT2} ${BINARIES_DIR}/"
fi
return 0
}
function mk_boot_logo()
{
local LOGO_DIR
local BOOT_LOGO
LOGO_DIR="${TARGET_BOARD_DIR}/logo"
BOOT_LOGO="${TARGET_BOARD_DIR}/boot_logo.*"
rm -rf ${BINARIES_DIR}/logo
rm -rf ${BINARIES_DIR}/boot_logo.*
if [ -d ${LOGO_DIR} ]; then
mk_info "Install logo image ..."
run_cmd "ln -sf ${LOGO_DIR} ${BINARIES_DIR}"
elif [ -f ${BOOT_LOGO} ]; then
mk_info "Install boot logo image ..."
run_cmd "ln -sf ${BOOT_LOGO} ${BINARIES_DIR}"
fi
return 0
}
function mk_rsa_key()
{
local KEYDIR="${TARGET_BOARD_DIR}/keys"
rm -rf ${BINARIES_DIR}/keys
if [ -d ${KEYDIR} ]; then
mk_info "Install rsa key file ..."
run_cmd "ln -sf ${KEYDIR} ${BINARIES_DIR}"
fi
return 0
}
function install_pbp()
{
mk_info "Install Pre-Boot-Program file ..."
for pbp in $(find ${TARGET_CHIP_DIR}/common/ -maxdepth 1 -name "*.pbp")
do
rm -rf ${BINARIES_DIR}/`basename ${pbp}`
run_cmd "ln -sf ${pbp} ${BINARIES_DIR}/"
done
for pbp in $(find ${TARGET_BOARD_DIR}/ -maxdepth 1 -name "*.pbp")
do
rm -rf ${BINARIES_DIR}/`basename ${pbp}`
run_cmd "ln -sf ${pbp} ${BINARIES_DIR}/"
done
}
function install_dts()
{
local DTSDIR="${BINARIES_DIR}/dts"
if [ ! -d ${DTSDIR} ]; then
mkdir -p ${DTSDIR}
fi
mk_info "Install dts file ..."
for dtsi in $(find ${TARGET_CHIP_DIR}/common/ ${TARGET_BOARD_DIR}/ -maxdepth 1 -name "*.dtsi")
do
rm -rf ${DTSDIR}/`basename ${dtsi}`
run_cmd "ln -sf ${dtsi} ${DTSDIR}/"
HEADER_FILES=`awk -F "[<>]" '/#include/ {print $2}' ${dtsi}`
for HEADER_FILE in ${HEADER_FILES[@]}; do
UBOOT_HEADER_FILE="${UBOOT_HEADER_DIR}/${HEADER_FILE}"
KERNEL_HEADER_FILE="${KERNEL_HEADER_DIR}/${HEADER_FILE}"
BINARIES_HEADER_DIR=`dirname ${DTSDIR}/${HEADER_FILE}`
if [ ! -d ${BINARIES_HEADER_DIR} ]; then
mkdir -p ${BINARIES_HEADER_DIR}
fi
rm -rf "${DTSDIR}/${HEADER_FILE}"
if [ -f ${UBOOT_HEADER_FILE} ]; then
# run_cmd "ln -sf ${UBOOT_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
run_cmd "cp ${UBOOT_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
fi
if [ -f ${KERNEL_HEADER_FILE} ]; then
# run_cmd "ln -sf ${KERNEL_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
run_cmd "cp ${KERNEL_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
fi
done
done
for dts in $(find ${TARGET_CHIP_DIR}/common/ ${TARGET_BOARD_DIR}/ -maxdepth 1 -name "*.dts")
do
rm -rf ${DTSDIR}/`basename ${dts}`
run_cmd "ln -sf ${dts} ${DTSDIR}/"
HEADER_FILES=`awk -F "[<>]" '/#include/ {print $2}' ${dts}`
for HEADER_FILE in ${HEADER_FILES[@]}; do
UBOOT_HEADER_FILE="${UBOOT_HEADER_DIR}/${HEADER_FILE}"
KERNEL_HEADER_FILE="${KERNEL_HEADER_DIR}/${HEADER_FILE}"
BINARIES_HEADER_DIR=`dirname ${DTSDIR}/${HEADER_FILE}`
if [ ! -d ${BINARIES_HEADER_DIR} ]; then
mkdir -p ${BINARIES_HEADER_DIR}
fi
rm -rf ${DTSDIR}/${HEADER_FILE}
if [ -f ${UBOOT_HEADER_FILE} ]; then
# run_cmd "ln -sf ${UBOOT_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
run_cmd "cp ${UBOOT_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
fi
if [ -f ${KERNEL_HEADER_FILE} ]; then
# run_cmd "ln -sf ${KERNEL_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
run_cmd "cp ${KERNEL_HEADER_FILE} ${BINARIES_HEADER_DIR}/"
fi
done
done
}
function install_ota_image()
{
mk_info "Install OTA recovery image file ..."
for ota in $(find ${TARGET_CHIP_DIR}/common/ -maxdepth 1 -name "Recovery.gz")
do
rm -rf ${BINARIES_DIR}/`basename ${ota}`
run_cmd "ln -sf ${ota} ${BINARIES_DIR}/"
done
for ota in $(find ${TARGET_BOARD_DIR}/ -maxdepth 1 -name "Recovery.gz")
do
rm -rf ${BINARIES_DIR}/`basename ${ota}`
run_cmd "ln -sf ${ota} ${BINARIES_DIR}/"
done
}
function mk_resource_private()
{
local DDR_INIT1
local DDR_INIT2
mk_info "Install ddr init config file ..."
DDR_INIT1="${TARGET_BOARD_DIR}/ddr_init.json"
DDR_INIT2="${TARGET_CHIP_DIR}/common/ddr_init.json"
rm -rf ${BINARIES_DIR}/ddr_init.json
if [ -f ${DDR_INIT1} ]; then
run_cmd "ln -sf ${DDR_INIT1} ${BINARIES_DIR}/"
elif [ -f ${DDR_INIT2} ]; then
run_cmd "ln -sf ${DDR_INIT2} ${BINARIES_DIR}/"
else
return 0
fi
# Generate resource private data
run_cmd "${MKRESPRIVPY} -v -c ${BINARIES_DIR}/ddr_init.json -o ${BINARIES_DIR}/ddr_init.bin"
return 0
}
function mk_image_file()
{
local IMGCFG
mk_info "Create image file ..."
IMGCFG="${TARGET_BOARD_DIR}/image_cfg.json"
rm -rf ${BINARIES_DIR}/image_cfg.json
run_cmd "ln -sf ${IMGCFG} ${BINARIES_DIR}/"
# Copy file in common first
for its in $(find ${TARGET_CHIP_DIR}/common/ -maxdepth 1 -name "*.its")
do
rm -rf ${BINARIES_DIR}/`basename ${its}`
run_cmd "ln -sf ${its} ${BINARIES_DIR}/"
done
# Use the file in board to overwrite it if file name is the same
for its in $(find ${TARGET_BOARD_DIR}/ -maxdepth 1 -name "*.its")
do
rm -rf ${BINARIES_DIR}/`basename ${its}`
run_cmd "ln -sf ${its} ${BINARIES_DIR}/"
done
# Generate image
rm -rf ${BINARIES_DIR}/*.itb
if [ "$(grep BR2_GENERATE_BURNER_IMAGE=y ${BR2_CONFIG})" != "" ]; then
run_cmd "${MKIMAGEPY} -v -s -b -c ${BINARIES_DIR}/image_cfg.json -d ${BINARIES_DIR}"
else
run_cmd "${MKIMAGEPY} -v -s -c ${BINARIES_DIR}/image_cfg.json -d ${BINARIES_DIR}"
fi
return 0
}
function pinmux_check()
{
mk_info "Pinmux check ..."
python3 ${PINMUXCHECKPY} ${DTBDIR}
}
function package_check()
{
mk_info "Package check ..."
python3 ${PACKAGECHECKPY} ${DTBDIR}
}
function swupdate_pack_swu()
{
local PACK_NAME="${LUBAN_CURRENT_OUT}"
local SWU_DIR="${BINARIES_DIR}/swupdate"
local SWU_IMAGES="${TARGET_BOARD_DIR}/swupdate/sw-images.cfg"
mkdir -p ${SWU_DIR}
mk_info "Pack swu ..."
. $SWU_IMAGES
cp "$SWU_IMAGES" "$SWU_DIR"
rm -f "$SWU_DIR/sw-subimgs-fix.cfg"
mk_info "Show images ..."
echo ${swota_file_list[@]} | sed 's/ /\n/g'
mk_info "Do copy ..."
for line in ${swota_file_list[@]} ; do
ori_file=$(echo $line | awk -F: '{print $1}')
base_name=$(basename "$line")
fix_name=${base_name#*:}
[ ! -f "$ori_file" ] && mk_info "$ori_file not exist!!" && return 1
cp $ori_file $SWU_DIR/$fix_name
echo $fix_name >> "$SWU_DIR/sw-subimgs-fix.cfg"
done
cd "$SWU_DIR"
mk_info "Do sha256 ..."
cp sw-description sw-description.bk
[ -f $SWU_DIR/sw-subimgs-fix.cfg ] && {
while IFS= read -r line
do
item="$line"
if grep -q -E "sha256 = \"@$item\"" sw-description ; then
echo "sha256sum $item"
item_hash=$(sha256sum "$item" | awk '{print $1}')
sed -i "s/\(.*\)\(sha256 = \"@$item\"\)/\1sha256 = \"$item_hash\"/g" sw-description
fi
done < "$SWU_DIR/sw-subimgs-fix.cfg"
}
mk_info "Do cpio ..."
while IFS= read -r line
do
echo "$line"
done < "$SWU_DIR/sw-subimgs-fix.cfg" | cpio -ov -H crc > "$SWU_DIR/${LUBAN_CURRENT_OUT}.swu"
mk_info "OTA image file is generated..."
du -sh "$SWU_DIR/${LUBAN_CURRENT_OUT}.swu"
cd - > /dev/null
}
function main()
{
mk_uboot_env
mk_boot_logo
mk_resource_private
install_dts
install_pbp
pinmux_check
package_check
mk_rsa_key
install_ota_image
mk_image_file
if [ "$(grep BR2_PACKAGE_SWUPDATE=y ${BR2_CONFIG})" != "" ]; then
swupdate_pack_swu
fi
}
main