#!/bin/bash export PATH=$PATH:/opt/mips-mti-elf/2020.06-01/bin COMPILE_VENDOR=$(basename $(dirname $(pwd))) COMPLIE_BOARD=$(basename $(pwd)) DEBUG_VERSION=debug VERSION="code01align" DATE=`date +%Y%m%d` CURPATH=. ROOTPATH=../../.. OUTPATH=$ROOTPATH/out PREBUILDPATH=./Prebuilds BUILD_PROJECT_PATH=$ROOTPATH/build TARGETOUTPATH=./out SILICON_DATA_FILE=$OUTPATH/ddr-Monitor_SOC.bin SILICON_DATA_DB_FILE=$OUTPATH/ddr-Monitor_SOC.bin-DB BOOT_FILE=$OUTPATH/silicon_boot.bin PM_FILE=pm.bin SUPERBLK_FILE=super.bin SILICON_DATA_FILE_COMPRESSED=ddr-Monitor_SOC_compressed.bin SILICON_DATA_FILE_DB_COMPRESSED=ddr-Monitor_SOC_compressed.bin-DB DATA_FILE_COMPRESSED=temp_data_compressed.bin search_files_cal_call_check() { local dir="$1" for file in "$dir"/*; do if [ -d "$file" ]; then search_files_cal_call_check "$file" elif [ -f "$file" ] && [[ "$file" == *hv_cal_* ]] && [ -n "$(grep -l 'Hv_Drv_' "$file")" ]; then echo "$file has called func: Hv_Drv_" exit elif [ -f "$file" ] && [[ "$file" == *hv_cal_* ]] && [ -n "$(grep -l 'Hv_Mw_' "$file")" ]; then echo "$file has called func: Hv_Mw_" exit elif [ -f "$file" ] && [[ "$file" == *hv_cal_* ]] && [ -n "$(grep -l 'HvPlat_' "$file")" ]; then echo "$file has called func: HvPlat_" exit elif [ -f "$file" ] && [[ "$file" == *hv_cal_* ]] && [ -n "$(grep -l 'Hv_App_' "$file")" ]; then echo "$file has called func: Hv_App_" exit fi done } search_files_drv_call_check() { local dir="$1" for file in "$dir"/*; do if [ -d "$file" ]; then search_files_drv_call_check "$file" elif [ -f "$file" ] && [[ "$file" == *hv_drv_* ]] && [ -n "$(grep -l 'Hv_Mw_' "$file")" ]; then echo "$file has called func: Hv_Mw_" exit elif [ -f "$file" ] && [[ "$file" == *hv_drv_* ]] && [ -n "$(grep -l 'HvPlat_' "$file")" ]; then echo "$file has called func: HvPlat_" exit elif [ -f "$file" ] && [[ "$file" == *hv_drv_* ]] && [ -n "$(grep -l 'Hv_App_' "$file")" ]; then echo "$file has called func: Hv_App_" exit fi done } search_files_mw_call_check() { local dir="$1" for file in "$dir"/*; do if [ -d "$file" ]; then search_files_mw_call_check "$file" elif [ -f "$file" ] && [[ "$file" == *hv_mw_* ]] && [ -n "$(grep -l 'HvPlat_' "$file")" ]; then echo "$file has called func: HvPlat_" exit elif [ -f "$file" ] && [[ "$file" == *hv_mw_* ]] && [ -n "$(grep -l 'Hv_App_' "$file")" ]; then echo "$file has called func: Hv_App_" exit fi done } search_files_plat_file_check() { local dir="$1" for file in "$dir"/*; do if [ -d "$file" ]; then search_files_plat_file_check "$file" elif [ -f "$file" ] && [[ "$file" == *HvPlat* ]]; then echo "$file in sdk" exit fi done } search_files_plat_call_app() { local dir="$1" for file in "$dir"/*; do if [ -d "$file" ]; then search_files_plat_call_app "$file" elif [ -f "$file" ] && [[ "$file" == *HvPlat* ]] && [ -n "$(grep -l 'Hv_App_' "$file")" ]; then echo "$file has called func: Hv_App_" exit fi done } code_check(){ cd $ROOTPATH/sdk/Driver search_files_cal_call_check "." search_files_drv_call_check "." search_files_mw_call_check "." search_files_plat_file_check "." cd - search_files_cal_call_check "." search_files_drv_call_check "." search_files_mw_call_check "." search_files_plat_call_app "." } cmake_project(){ cd $BUILD_PROJECT_PATH bash project_config.sh $COMPILE_VENDOR $COMPLIE_BOARD ht7315 make clean make $DEBUG_VERSION -j cd - if [ ! -f $SILICON_TEXT_RO_FILE ]; then echo "APP build fail, NO APP FILE-${SILICON_TEXT_RO_FILE}!" exit fi if [ ! -f $SILICON_DATA_FILE ]; then echo "APP build fail, NO APP FILE-${SILICON_DATA_FILE}!" exit fi return 0 } get_git_revision(){ GITREV=`git rev-parse --short HEAD` echo "GIT revision: $GITREV" } compressed_file_size(){ FILE_SIZE=`wc -c < $1` echo "$1 size: $FILE_SIZE" echo "HIVIEW!" > hiview.bin echo $FILE_SIZE > size.bin cat hiview.bin size.bin > ${1}_size dd if=${1}_size of=${1}_size_aline32 ibs=32 conv=sync } pad_file(){ echo "padding file" input_size=$(wc -c < $1) cp $1 $1_temp echo $input_size padding_size=$(($2-$input_size)) cat $1_temp > $3 echo $padding_size dd if=/dev/zero bs=1 count=$padding_size|tr "\000" "\377" >> $3 } superblkOffset=$(printf "%d" 0) TEMP_CRC=$(printf "%x" 0) add_super_blk(){ echo $1 $2 $3 if [ "$3" = "0" ]; then echo "no padding for $2" cp $2 $2_padded; else echo "padding for $2" pad_file $2 $3 $2_padded fi echo -n "SBLK" >> $SUPERBLK_FILE string=$1 result=0 substring=${string:0:4} # 将每个字符转换为ASCII码值并拼接成32位的数 for ((i=0; i<${#substring}; i++)); do char_code=$(printf "%d" "'${substring:i:1}") result=$(( (result << 8) | char_code )) done hex=$(printf "%08X" $result) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $SUPERBLK_FILE length=`wc -c < $2` hex=$(printf "%08X" $length) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $SUPERBLK_FILE hex=$(printf "%08X" $superblkOffset) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $SUPERBLK_FILE length=`wc -c < $2_padded` superblkOffset=$(($superblkOffset+$length)) echo $VERSION >> $SUPERBLK_FILE crc=$(cksum $2 | cut -f1 -d' ') hex=$(printf "%08X" $crc) TEMP_CRC=${hex} echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $SUPERBLK_FILE } pqOffset=$(printf "%d" 4096) add_pq_bin(){ echo $1 $2 $3 $4 echo "HEAD:add file $1" echo -n "HEAD" >> $TARGETOUTPATH/header.bin hex=$(printf "%04X" $3) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}" >> $TARGETOUTPATH/header.bin hex=$(printf "%04X" $4) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}" >> $TARGETOUTPATH/header.bin size=$(stat -c%s $PREBUILDPATH/$1) echo $size hex=$(printf "%08X" $size) echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $TARGETOUTPATH/header.bin echo $pqOffset hex=$(printf "%08X" $pqOffset) echo $hex echo -n -e "\x${hex:0:2}\x${hex:2:2}\x${hex:4:2}\x${hex:6:2}" >> $TARGETOUTPATH/header.bin offset=$((($size + 511) / 512 * 512)) echo $offset hex=$(printf "%08X" $offset) echo $hex cp $PREBUILDPATH/$1 $TARGETOUTPATH/$1 pad_file $TARGETOUTPATH/$1 $offset $TARGETOUTPATH/$1_pad pqOffset=$(($pqOffset+$offset)) dd if=$TARGETOUTPATH/$1_pad of=$2 conv=notrunc oflag=append } find_multy_bin(){ rm -rf $TARGETOUTPATH/$1.bin for ((i=1; i<=10; i++)) do if [ -e $PREBUILDPATH/$1_$i.bin ]; then add_pq_bin $1_$i.bin $2 $3 $i else break fi done } find_pq_bin(){ if [ -e $PREBUILDPATH/$1.bin ]; then echo "file $1" rm -rf $TARGETOUTPATH/$1.bin add_pq_bin $1.bin $2 $3 1 elif [ -e $PREBUILDPATH/$1_1.bin ]; then echo " multy file $1" find_multy_bin $1 $2 $3 else echo "no file $1" return; fi nodeOffset=$(($nodeOffset+16)) } if [ "$1" = "nocompile" ]; then echo "$1" cd $BUILD_PROJECT_PATH bash project_config.sh $COMPILE_VENDOR $COMPLIE_BOARD ht7315 cd - exit -1 fi echo "vendor: $COMPILE_VENDOR" echo "board: $COMPLIE_BOARD" echo "date: $DATE" get_git_revision rm -rf $OUTPATH/Monitor_SOC_*.bin echo "code check******************************" code_check echo "Complie Bin*****************************" cmake_project if [ ! -x "$TARGETOUTPATH" ];then echo "$TARGETOUTPATH" mkdir $TARGETOUTPATH fi echo "Merge PQData*****************************" rm -rf $TARGETOUTPATH/temp_pq.bin rm -rf $TARGETOUTPATH/header.bin find_pq_bin pq_init_reg $TARGETOUTPATH/temp_pq.bin 1 find_pq_bin dither $TARGETOUTPATH/temp_pq.bin 2 find_pq_bin scl $TARGETOUTPATH/temp_pq.bin 3 find_pq_bin ldc $TARGETOUTPATH/temp_pq.bin 4 find_pq_bin od $TARGETOUTPATH/temp_pq.bin 5 find_pq_bin contrast $TARGETOUTPATH/temp_pq.bin 6 find_pq_bin yccm $TARGETOUTPATH/temp_pq.bin 7 find_pq_bin sharpness $TARGETOUTPATH/temp_pq.bin 8 find_pq_bin contrast_para $TARGETOUTPATH/temp_pq.bin 9 find_pq_bin sharpness_para $TARGETOUTPATH/temp_pq.bin 10 find_pq_bin gamma_t $TARGETOUTPATH/temp_pq.bin 11 find_pq_bin gamma_d $TARGETOUTPATH/temp_pq.bin 12 find_pq_bin osd_gmd $TARGETOUTPATH/temp_pq.bin 13 find_pq_bin osd_gmi $TARGETOUTPATH/temp_pq.bin 14 find_pq_bin wcg_cm $TARGETOUTPATH/temp_pq.bin 15 find_pq_bin wcg_gmd $TARGETOUTPATH/temp_pq.bin 16 find_pq_bin wcg_gmi $TARGETOUTPATH/temp_pq.bin 17 find_pq_bin hdr $TARGETOUTPATH/temp_pq.bin 18 find_pq_bin demura $TARGETOUTPATH/temp_pq.bin 19 pad_file $TARGETOUTPATH/header.bin 4096 $TARGETOUTPATH/pad_header.bin cat $TARGETOUTPATH/pad_header.bin $TARGETOUTPATH/temp_pq.bin > $TARGETOUTPATH/temp_header_pq.bin echo "Merge PQData over*************************" echo "compress bin******************************" $PREBUILDPATH/LZSS e $SILICON_DATA_DB_FILE $TARGETOUTPATH/$SILICON_DATA_FILE_DB_COMPRESSED echo "compress bin" $PREBUILDPATH/LZSS e $SILICON_DATA_FILE $TARGETOUTPATH/$SILICON_DATA_FILE_COMPRESSED echo "compress bin" $PREBUILDPATH/LZSS e $TARGETOUTPATH/temp_header_pq.bin $TARGETOUTPATH/$DATA_FILE_COMPRESSED echo "compress bin over*************************" echo "Merge ALLBin*****************************" cp $OUTPATH/*.bin $TARGETOUTPATH/ cp $OUTPATH/*.bin-DB $TARGETOUTPATH/ cd $TARGETOUTPATH/ compressed_file_size $SILICON_DATA_FILE_COMPRESSED compressed_file_size $SILICON_DATA_FILE_DB_COMPRESSED compressed_file_size $DATA_FILE_COMPRESSED pad_file $PM_FILE 32768 temp_pm.bin_padded cp temp_pm.bin_padded $SUPERBLK_FILE cat ${SILICON_DATA_FILE_COMPRESSED}_size_aline32 $SILICON_DATA_FILE_COMPRESSED > temp_silicon_data.bin echo d >> pmsb.bin pad_file pmsb.bin 36864 pmsb.bin_padded add_super_blk PMSB pmsb.bin_padded 36864 add_super_blk BOOT silicon_boot.bin 61440 add_super_blk BTBK silicon_boot.bin-DB 61440 add_super_blk CODE temp_silicon_data.bin 1335296 CODE_CRC=${TEMP_CRC} SHORT_CRC=${CODE_CRC: -4} LOGO_BIN_NAME=$(grep -w 'HV_PROJECT_CONFIG_LOGO_BIN_NAME' ../ProjectConfig.h | head -n 1 | awk -F' ' '{gsub(/[(]/,""); gsub(/[)]/,""); print $3}' | sed 's/\r$//' | tr -d '\r' | tr -d '"') if [ "$LOGO_BIN_NAME" = "" ]; then LOGO_BIN_NAME=Logo.bin fi if [ -e ../Prebuilds/${LOGO_BIN_NAME} ]; then echo $LOGO_BIN_NAME else echo ERROR:no $LOGO_BIN_NAME exit fi cp ../Prebuilds/${LOGO_BIN_NAME} ./Logo.bin add_super_blk LOGO Logo.bin 131072 cat ${DATA_FILE_COMPRESSED}_size_aline32 $DATA_FILE_COMPRESSED > temp_pq_data.bin add_super_blk PQDA temp_pq_data.bin 405504 cp ../Prebuilds/ConfigData.bin ./ConfigData.bin add_super_blk CFIG ConfigData.bin 65536 pad_file ${SUPERBLK_FILE} 36864 ${SUPERBLK_FILE}_ota_padded touch null.bin add_super_blk FULL null.bin 0 pad_file ${SUPERBLK_FILE} 36864 ${SUPERBLK_FILE}_full_padded cat ${SUPERBLK_FILE}_ota_padded silicon_boot.bin_padded silicon_boot.bin-DB_padded temp_silicon_data.bin > ../Monitor_SOC_${COMPILE_VENDOR}_${COMPLIE_BOARD}_${DATE}_GIT${GITREV}_OTA.bin #not pad pq and monitordata cat ${SUPERBLK_FILE}_full_padded silicon_boot.bin_padded silicon_boot.bin-DB_padded temp_silicon_data.bin_padded Logo.bin_padded temp_pq_data.bin > ../Monitor_SOC_${COMPILE_VENDOR}_${COMPLIE_BOARD}_${DATE}_GIT${GITREV}_FLASH.bin pad_file silicon_boot.bin 61440 silicon_boot.bin_padded pad_file silicon_boot.bin-DB 61440 silicon_boot.bin_padded-DB echo ${CODE_CRC} cat silicon_boot.bin_padded silicon_boot.bin_padded-DB temp_silicon_data.bin > ../USB-OTA.bin echo -n ${CODE_CRC} | xxd -r -p >> ../USB-OTA.bin cd - mv USB-OTA.bin $OUTPATH/His7315Upgrade.bin mv Monitor_SOC_* $OUTPATH/ mv out $OUTPATH/compressed echo "Merge Bin Finish**********************"