428 lines
16 KiB
Bash
428 lines
16 KiB
Bash
#!/bin/bash
|
|||
|
|
#
|
||
|
|
# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
|
||
|
|
#
|
||
|
|
# SPDX-License-Identifier: MIT
|
||
|
|
#
|
||
|
|
|
||
|
|
#RTOS root directory
|
||
|
|
RTOS_BASE_DIR=$(realpath $(dirname $(readlink -f ${BASH_SOURCE[0]:-$0}))/..)
|
||
|
|
|
||
|
|
#Board default config
|
||
|
|
RTOS_TARGET_ADDRESS=0x2200000
|
||
|
|
BOARD_TYPE=aw402_c302x
|
||
|
|
SENSOR_TYPE=SC301IOT
|
||
|
|
DDR_SIZE=128m
|
||
|
|
UBOOT_CFG=c3_aw402
|
||
|
|
|
||
|
|
#ISP default config
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x3000000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0x37C6000
|
||
|
|
ISP_STATS_BUFFER_BASE=0x3B86000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0x3C86000
|
||
|
|
ISP_PRESET_BASE=0x3D06000
|
||
|
|
ISP_IMG_BUFFER_BASE=0x3E00000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x6000000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
|
||
|
|
while [[ $# -gt 0 ]]; do
|
||
|
|
case "$1" in
|
||
|
|
-a | --address)
|
||
|
|
RTOS_TARGET_ADDRESS=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-b | --board)
|
||
|
|
BOARD_TYPE=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-s | --sensor)
|
||
|
|
SENSOR_TYPE=$2
|
||
|
|
if [[ "$2" =~ ^SENSOR=.* ]]; then
|
||
|
|
SENSOR_TYPE=${2#SENSOR=}
|
||
|
|
fi
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--bl22)
|
||
|
|
BL22_DIR=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--uboot)
|
||
|
|
UBOOT_DIR=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--ipc-ddr-size)
|
||
|
|
DDR_SIZE=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--ubootcfg)
|
||
|
|
UBOOT_CFG=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-o | --out)
|
||
|
|
INSTALL_DIR=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
--rtos-dir)
|
||
|
|
RTOS_BASE_DIR=$2
|
||
|
|
shift 2
|
||
|
|
;;
|
||
|
|
-h | --help)
|
||
|
|
echo -e "\033[41;33m gen_fastboot.sh help info \033[0m"
|
||
|
|
echo "Usage: fastboot [OPTIONS]"
|
||
|
|
echo
|
||
|
|
echo "Options:"
|
||
|
|
echo " -a/--address et address to load (e.g., -a 0x2200000)"
|
||
|
|
echo " -b/--board Set board type (e.g., -b aw402_c302x)"
|
||
|
|
echo " -s/--sensor Set ipc sensor type (e.g., -s IMX290)"
|
||
|
|
echo " --b22 PATH Set BL22 path"
|
||
|
|
echo " -h Display this help information"
|
||
|
|
echo
|
||
|
|
echo "For more details, refer to the fastboot documentation."
|
||
|
|
exit 1
|
||
|
|
shift
|
||
|
|
;;
|
||
|
|
--)
|
||
|
|
shift
|
||
|
|
break
|
||
|
|
;;
|
||
|
|
-*|--*)
|
||
|
|
echo "Invalid option: $1" >&2
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "No more options, just arguments" >&2
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
|
||
|
|
if [[ ! -d "$BL22_DIR" ]]; then
|
||
|
|
echo "The provided bl22 path is not a directory: $BL22_DIR"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
#Retrieve the RTOS loading address; if none exists, set it to the default address.
|
||
|
|
if [ -z $RTOS_TARGET_ADDRESS ]; then
|
||
|
|
RTOS_TARGET_ADDRESS=0x02200000
|
||
|
|
fi
|
||
|
|
|
||
|
|
#Calculate the RTOS2 loading address
|
||
|
|
let "RTOS2_TARGET_ADDRESS=$RTOS_TARGET_ADDRESS+0x100000"
|
||
|
|
RTOS2_TARGET_ADDRESS=$(printf '0x%x\n' $RTOS2_TARGET_ADDRESS)
|
||
|
|
|
||
|
|
#Clear cache files
|
||
|
|
[ -d $RTOS_BASE_DIR/output ] && rm -rf $RTOS_BASE_DIR/output
|
||
|
|
|
||
|
|
#Get the current project environment variables
|
||
|
|
source $RTOS_BASE_DIR/scripts/env.sh arm64 c3 $BOARD_TYPE fastboot
|
||
|
|
if [ "$?" -ne 0 ]; then
|
||
|
|
echo "Error: Incorrect board type selection!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
#IPC sensor model configuration.
|
||
|
|
if [ -z $SENSOR_TYPE ]; then
|
||
|
|
case $BOARD_TYPE in
|
||
|
|
'aw402_c302x')
|
||
|
|
SENSOR_TYPE=SC301IOT
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
SENSOR_TYPE=IMX290
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
fi
|
||
|
|
|
||
|
|
#RTOS object file path
|
||
|
|
RTOS_BUILD_DIR=$RTOS_BASE_DIR/output/$ARCH-$BOARD-$PRODUCT/freertos
|
||
|
|
RTOS_IMAGE_1=$RTOS_BUILD_DIR/rtos_1.bin
|
||
|
|
RTOS_IMAGE_2=$RTOS_BUILD_DIR/rtos_2.bin
|
||
|
|
BL22_IMAGE=$RTOS_BUILD_DIR/bl22.bin
|
||
|
|
|
||
|
|
function toolchain_prepare() {
|
||
|
|
echo "<============ TOOLCHAIN INFO RTOS ============>"
|
||
|
|
CROSSTOOL=$RTOS_BASE_DIR/arch/$ARCH/toolchain/$COMPILER*$TOOLCHAIN_KEYWORD
|
||
|
|
TOOLCHAIN_DIR=$RTOS_BASE_DIR/output/toolchains/$COMPILER-$TOOLCHAIN_KEYWORD
|
||
|
|
rm -rf $RTOS_BASE_DIR/output/toolchains
|
||
|
|
mkdir -p $TOOLCHAIN_DIR
|
||
|
|
tar -xf $CROSSTOOL.tar.xz -C $TOOLCHAIN_DIR --strip-components=1
|
||
|
|
ls -la $TOOLCHAIN_DIR/bin
|
||
|
|
$TOOLCHAIN_DIR/bin/aarch64-none-elf-gcc -v
|
||
|
|
echo "<============ TOOLCHAIN INFO RTOS ============>"
|
||
|
|
}
|
||
|
|
|
||
|
|
function sensor_config_choose() {
|
||
|
|
VENC_CONFIG_H=lib/venc/include/venc_config.h
|
||
|
|
CONFIG_FILE=$RTOS_BASE_DIR/boards/$ARCH/$BOARD/lscript.h
|
||
|
|
|
||
|
|
#Configure the compile-time address.
|
||
|
|
sed -i '/.*#define configTEXT_BASE*/c\#define configTEXT_BASE '${RTOS_TARGET_ADDRESS}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define CONFIG_SCATTER_LOAD_ADDRESS*/c\#define CONFIG_SCATTER_LOAD_ADDRESS '${RTOS2_TARGET_ADDRESS}'' $CONFIG_FILE
|
||
|
|
|
||
|
|
sed -i '/CONFIG_SENSOR_SC301IOT/d' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/CONFIG_SENSOR_SC401AI/d' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/CONFIG_SENSOR_SC5336P/d' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_300W*/c\#define MINI_ENC_300W '0'' $VENC_CONFIG_H
|
||
|
|
sed -i '/.*#define MINI_ENC_400W*/c\#define MINI_ENC_400W '0'' $VENC_CONFIG_H
|
||
|
|
sed -i '/.*#define MINI_ENC_2880X1620*/c\#define MINI_ENC_2880X1620 '0'' $VENC_CONFIG_H
|
||
|
|
|
||
|
|
case $DDR_SIZE in
|
||
|
|
'128m')
|
||
|
|
case $SENSOR_TYPE in
|
||
|
|
'SC301IOT')
|
||
|
|
sed -i '$ a CONFIG_SENSOR_SC301IOT=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_300W*/c\#define MINI_ENC_300W '1'' $VENC_CONFIG_H
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x3000000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0x37C6000
|
||
|
|
ISP_STATS_BUFFER_BASE=0x3B86000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0x3C86000
|
||
|
|
ISP_PRESET_BASE=0x3D06000
|
||
|
|
ISP_IMG_BUFFER_BASE=0x3E00000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x6000000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
;;
|
||
|
|
'SC401AI')
|
||
|
|
sed -i '$ a CONFIG_SENSOR_SC401AI=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_400W*/c\#define MINI_ENC_400W '1'' $VENC_CONFIG_H
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x3000000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0x391A000
|
||
|
|
ISP_STATS_BUFFER_BASE=0x3D7F000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0x3E7F000
|
||
|
|
ISP_PRESET_BASE=0x3EFF000
|
||
|
|
ISP_IMG_BUFFER_BASE=0x3F00000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x6000000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
sed -i '/.*#define configSRAM_START*/c\#define configSRAM_START '0x3000000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configSRAM_LEN*/c\#define configSRAM_LEN '0x1700000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configVENC_BASE*/c\#define configVENC_BASE '0x04700000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configVENC_LEN*/c\#define configVENC_LEN '0x0B00000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configISP_RGB_BASE*/c\#define configISP_RGB_BASE '0x6000000'' $CONFIG_FILE
|
||
|
|
|
||
|
|
sed -i '/.*#define VENC_PHY_MEM_BASE_ADDR*/c\#define VENC_PHY_MEM_BASE_ADDR '0x4700000'' $VENC_CONFIG_H
|
||
|
|
sed -i '/.*#define VENC_PHY_MEM_SIZE*/c\#define VENC_PHY_MEM_SIZE '0x900000'' $VENC_CONFIG_H
|
||
|
|
;;
|
||
|
|
'256m')
|
||
|
|
case $SENSOR_TYPE in
|
||
|
|
'SC301IOT')
|
||
|
|
sed -i '$ a CONFIG_SENSOR_SC301IOT=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_300W*/c\#define MINI_ENC_300W '1'' $VENC_CONFIG_H
|
||
|
|
# start_addr
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x9B00000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0xA2C6000
|
||
|
|
ISP_STATS_BUFFER_BASE=0xA686000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0xA786000
|
||
|
|
ISP_PRESET_BASE=0xA806000
|
||
|
|
ISP_IMG_BUFFER_BASE=0xA807000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x6000000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
;;
|
||
|
|
'SC401AI')
|
||
|
|
sed -i '$ a CONFIG_SENSOR_SC401AI=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_400W*/c\#define MINI_ENC_400W '1'' $VENC_CONFIG_H
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x9B00000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0xA41A000
|
||
|
|
ISP_STATS_BUFFER_BASE=0xA87F000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0xA97F000
|
||
|
|
ISP_PRESET_BASE=0xA9FF000
|
||
|
|
ISP_IMG_BUFFER_BASE=0xAA00000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x6000000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
;;
|
||
|
|
'SC5336P')
|
||
|
|
sed -i '$ a CONFIG_SENSOR_SC5336P=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig
|
||
|
|
sed -i '/.*#define MINI_ENC_2880X1620*/c\#define MINI_ENC_2880X1620 '1'' $VENC_CONFIG_H
|
||
|
|
ISP_MCNR_BUFFER_BASE=0x9B00000
|
||
|
|
ISP_PTNR_BUFFER_BASE=0xA681000
|
||
|
|
ISP_STATS_BUFFER_BASE=0xAC11000
|
||
|
|
ISP_PARAM_BUFFER_BASE=0xAD11000
|
||
|
|
ISP_PRESET_BASE=0xAD91000
|
||
|
|
ISP_IMG_BUFFER_BASE=0xAD92000
|
||
|
|
ISP_RGB_IMG_BUFFER_BASE=0x3700000
|
||
|
|
ISP_WDR_VI_RAW_BASE=0x01000000
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
sed -i '/.*#define configSRAM_START*/c\#define configSRAM_START '0x9B00000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configSRAM_LEN*/c\#define configSRAM_LEN '0x3200000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configVENC_BASE*/c\#define configVENC_BASE '0xCD00000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configVENC_LEN*/c\#define configVENC_LEN '0x2A00000'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define configISP_RGB_BASE*/c\#define configISP_RGB_BASE '0x3700000'' $CONFIG_FILE
|
||
|
|
|
||
|
|
sed -i '/.*#define VENC_PHY_MEM_BASE_ADDR*/c\#define VENC_PHY_MEM_BASE_ADDR '0xCD00000'' $VENC_CONFIG_H
|
||
|
|
sed -i '/.*#define VENC_PHY_MEM_SIZE*/c\#define VENC_PHY_MEM_SIZE '0x2800000'' $VENC_CONFIG_H
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
#config isp buffer base
|
||
|
|
sed -i '/.*#define AML_ISP_MCNR_BUFFER_BASE_ADDR*/c\#define AML_ISP_MCNR_BUFFER_BASE_ADDR '${ISP_MCNR_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_PTNR_BUFFER_BASE_ADDR*/c\#define AML_ISP_PTNR_BUFFER_BASE_ADDR '${ISP_PTNR_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_STATS_BUFFER_BASE_ADDR*/c\#define AML_ISP_STATS_BUFFER_BASE_ADDR '${ISP_STATS_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_PARAM_BUFFER_BASE_ADDR*/c\#define AML_ISP_PARAM_BUFFER_BASE_ADDR '${ISP_PARAM_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_PRESET_BASE_ADDR*/c\#define AML_ISP_PRESET_BASE_ADDR '${ISP_PRESET_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_IMG_BUFFER_BASE_ADDR*/c\#define AML_ISP_IMG_BUFFER_BASE_ADDR '${ISP_IMG_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_RGB_IMG_BUFFER_BASE_ADDR*/c\#define AML_ISP_RGB_IMG_BUFFER_BASE_ADDR '${ISP_RGB_IMG_BUFFER_BASE}'' $CONFIG_FILE
|
||
|
|
sed -i '/.*#define AML_ISP_WDR_VI_RAW_BASE_ADDR*/c\#define AML_ISP_WDR_VI_RAW_BASE_ADDR '${ISP_WDR_VI_RAW_BASE}'' $CONFIG_FILE
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
function lz4_rtos() {
|
||
|
|
pushd $RTOS_BASE_DIR/lib/utilities/lz4
|
||
|
|
cp $RTOS_IMAGE_1 .
|
||
|
|
#Get the rtos target address
|
||
|
|
./self_decompress_tool.sh -a ./self_decompress_head.bin -b ./rtos_1.bin -l 0x04c00000 -j $RTOS_TARGET_ADDRESS -d 0 -s $RTOS2_TARGET_ADDRESS
|
||
|
|
cp ./self_decompress_firmware.bin $RTOS_IMAGE_1
|
||
|
|
rm ./self_decompress_firmware.bin ./rtos_1.bin
|
||
|
|
popd
|
||
|
|
}
|
||
|
|
|
||
|
|
function bl22_compile() {
|
||
|
|
pushd $BL22_DIR
|
||
|
|
if [ -f ./mk ]; then
|
||
|
|
echo "./mk c3 $BOARD_TYPE $SENSOR_TYPE"
|
||
|
|
./mk c3 $BOARD_TYPE $SENSOR_TYPE
|
||
|
|
if [ "$?" -ne 0 ]; then
|
||
|
|
echo "RTOS-SDK: BL22 compilation failed !!!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
cp ./bl22.bin $RTOS_BUILD_DIR/bl22.bin
|
||
|
|
popd
|
||
|
|
}
|
||
|
|
|
||
|
|
function build_header() {
|
||
|
|
local bl2_2=$1
|
||
|
|
local rtos_1=$2
|
||
|
|
local rtos_2=$3
|
||
|
|
|
||
|
|
local size=0
|
||
|
|
# 4KB for header (reserve for sign)
|
||
|
|
local offset=4096
|
||
|
|
local rem=0
|
||
|
|
|
||
|
|
# build head for bl2-2.bin
|
||
|
|
size=$(stat -c %s ${bl2_2})
|
||
|
|
# insert uuid
|
||
|
|
echo -n -e "\x6b\xe6\x1e\x1f\xac\xc0\x45\x12\x97\x3b\x32\x5f\x2e\x17\xa7\x2d" >${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
# insert size
|
||
|
|
printf "%02x%02x%02x%02x" $(((size) & 0xff)) $((((size) >> 8) & 0xff)) \
|
||
|
|
$((((size) >> 16) & 0xff)) $((((size) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
# insert offset
|
||
|
|
printf "%02x%02x%02x%02x" $(((offset) & 0xff)) $((((offset) >> 8) & 0xff)) \
|
||
|
|
$((((offset) >> 16) & 0xff)) $((((offset) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
# insert 8 bytes padding
|
||
|
|
printf "\0\0\0\0\0\0\0\0" >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
# insert sha256
|
||
|
|
openssl dgst -sha256 -binary ${bl2_2} >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
|
||
|
|
# build header for RTOS_1
|
||
|
|
offset=$(expr ${offset} + ${size} + 4095)
|
||
|
|
rem=$(expr ${offset} % 4096)
|
||
|
|
offset=$(expr ${offset} - ${rem})
|
||
|
|
size=$(stat -c %s ${rtos_1})
|
||
|
|
echo -n -e "\x31\x9f\xb3\x9e\x1f\x9f\x48\x98\x96\x38\xca\xfa\x7e\xa4\x2c\xe9" >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "%02x%02x%02x%02x" $(((size) & 0xff)) $((((size) >> 8) & 0xff)) \
|
||
|
|
$((((size) >> 16) & 0xff)) $((((size) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "%02x%02x%02x%02x" $(((offset) & 0xff)) $((((offset) >> 8) & 0xff)) \
|
||
|
|
$((((offset) >> 16) & 0xff)) $((((offset) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "\0\0\0\0\0\0\0\0" >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
openssl dgst -sha256 -binary ${rtos_1} >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
|
||
|
|
# build header for RTOS_2
|
||
|
|
offset=$(expr ${offset} + ${size} + 4095)
|
||
|
|
rem=$(expr ${offset} % 4096)
|
||
|
|
offset=$(expr ${offset} - ${rem})
|
||
|
|
size=$(stat -c %s ${rtos_2})
|
||
|
|
echo -n -e "\x33\x71\xb3\x2b\x17\xca\x43\xe2\xb4\xdb\x11\xe1\x3e\xc0\xa5\xf3" >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "%02x%02x%02x%02x" $(((size) & 0xff)) $((((size) >> 8) & 0xff)) \
|
||
|
|
$((((size) >> 16) & 0xff)) $((((size) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "%02x%02x%02x%02x" $(((offset) & 0xff)) $((((offset) >> 8) & 0xff)) \
|
||
|
|
$((((offset) >> 16) & 0xff)) $((((offset) >> 24) & 0xff)) | xxd -r -ps >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
printf "\0\0\0\0\0\0\0\0" >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
openssl dgst -sha256 -binary ${rtos_2} >>${RTOS_BUILD_DIR}/_tmp_hdr.bin
|
||
|
|
}
|
||
|
|
|
||
|
|
function package_binary() {
|
||
|
|
local fw_size=
|
||
|
|
local rem_val=
|
||
|
|
local bin1=$1
|
||
|
|
local bin2=$2
|
||
|
|
local out_bin=$3
|
||
|
|
|
||
|
|
# align bin1 size up to 4KB and padding bin2 at the end of bin1
|
||
|
|
fw_size=$(stat -c %s ${bin1})
|
||
|
|
fw_size=$(expr ${fw_size} + 4095)
|
||
|
|
rem_val=$(expr ${fw_size} % 4096)
|
||
|
|
fw_size=$(expr ${fw_size} - ${rem_val})
|
||
|
|
dd if=/dev/zero of=${RTOS_BUILD_DIR}/_tmp.bin bs=1 count=${fw_size} &>/dev/null
|
||
|
|
dd if=${bin1} of=${RTOS_BUILD_DIR}/_tmp.bin bs=1 count=${fw_size} conv=notrunc &>/dev/null
|
||
|
|
|
||
|
|
cat ${bin2} >>${RTOS_BUILD_DIR}/_tmp.bin
|
||
|
|
mv ${RTOS_BUILD_DIR}/_tmp.bin ${RTOS_BUILD_DIR}/${out_bin}
|
||
|
|
echo ==== package ${bin1} ${bin2} to ${out_bin} ====
|
||
|
|
}
|
||
|
|
|
||
|
|
function package_fastboot() {
|
||
|
|
if [ -n $UBOOT_DIR ]; then
|
||
|
|
pushd $UBOOT_DIR
|
||
|
|
if [ -d ./fastboot ]; then
|
||
|
|
rm -rf ./fastboot
|
||
|
|
fi
|
||
|
|
mkdir -p ./fastboot
|
||
|
|
cp $RTOS_IMAGE_1 ./fastboot
|
||
|
|
cp $RTOS_IMAGE_2 ./fastboot
|
||
|
|
cp $BL22_IMAGE ./fastboot
|
||
|
|
echo "./mk $UBOOT_CFG --build-nogit --ipc-ddr-size $DDR_SIZE"
|
||
|
|
./mk $UBOOT_CFG --build-nogit --ipc-ddr-size $DDR_SIZE
|
||
|
|
if [ "$?" -ne 0 ]; then
|
||
|
|
if [ -d ./fastboot ]; then
|
||
|
|
rm -rf ./fastboot
|
||
|
|
fi
|
||
|
|
echo "RTOS-SDK: Uboot compilation failed !!!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ -d ./fastboot ]; then
|
||
|
|
rm -rf ./fastboot
|
||
|
|
fi
|
||
|
|
popd
|
||
|
|
fi
|
||
|
|
build_header $BL22_IMAGE $RTOS_IMAGE_1 $RTOS_IMAGE_2
|
||
|
|
package_binary ${RTOS_BUILD_DIR}/_tmp_hdr.bin ${RTOS_BUILD_DIR}/bl22.bin bl22.bin
|
||
|
|
package_binary ${RTOS_BUILD_DIR}/bl22.bin ${RTOS_BUILD_DIR}/rtos_1.bin bl22.bin
|
||
|
|
package_binary ${RTOS_BUILD_DIR}/bl22.bin ${RTOS_BUILD_DIR}/rtos_2.bin rtos_fastboot.bin
|
||
|
|
if [[ -d "$INSTALL_DIR" ]]; then
|
||
|
|
cp ${RTOS_BUILD_DIR}/rtos_fastboot.bin ${INSTALL_DIR} -rf
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
function debug_info() {
|
||
|
|
echo "<============ Kconfig RTOS ============>"
|
||
|
|
cat $RTOS_BASE_DIR/Kconfig
|
||
|
|
echo "<============ CMakeLists RTOS ============>"
|
||
|
|
cat $RTOS_BASE_DIR/CMakeLists.txt
|
||
|
|
echo "<============ XML RTOS ============>"
|
||
|
|
cat $RTOS_BUILD_DIR/rtos_sdk_manifest.xml
|
||
|
|
echo "<============ XML OLD RTOS ============>"
|
||
|
|
cat $RTOS_BUILD_DIR/rtos_sdk_manifest_old.xml
|
||
|
|
echo "<============ JENKINS FOR RTOS ============>"
|
||
|
|
}
|
||
|
|
|
||
|
|
#choose sensor
|
||
|
|
sensor_config_choose
|
||
|
|
#Compile toolchain preparation
|
||
|
|
toolchain_prepare
|
||
|
|
#compile the rtos image
|
||
|
|
cd $RTOS_BASE_DIR && make
|
||
|
|
if [ "$?" -ne 0 ]; then
|
||
|
|
echo "RTOS-SDK: RTOS compilation failed !!!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
#lz4 compression
|
||
|
|
lz4_rtos
|
||
|
|
#compile the bl22 image
|
||
|
|
bl22_compile
|
||
|
|
#Packaging RTOS binary files
|
||
|
|
package_fastboot
|
||
|
|
#debug
|
||
|
|
# debug_info
|