#!/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 Mapping Combination BOARD_DEFINE_REF=(c3_aw409 c3_aw402 c3_aw402s c3_aw419) BOARD_DEFINE_PAR=(aw409_c302x aw402_c302x aw402s_c302x aw419_c308l) ## external resource path ## if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]; then echo -e "\033[41;33m Notice: parameter error !!! \033[0m" echo -e "\033[33m usage: ./c3_fastboot.sh bl22_path u-boot_path board_type (optional:load_address)\033[0m" exit 1 else BL22_DIR=$1 UBOOT_DIR=$2 BOARD_TYPE=$3 if [ $4 ] && [[ "$4" =~ ^0x.* ]]; then RTOS_TARGET_ADDRESS=$4 fi if [ $5 ] && [[ "$5" =~ ^SENSOR=.* ]]; then SENSOR_TYPE=${5#SENSOR=} fi fi #Parse the specified hardware type for ((i = 0; i < ${#BOARD_DEFINE_PAR[@]}; i++)); do if [ ${BOARD_DEFINE_PAR[i]} == $BOARD_TYPE ]; then BOARD_TYPE_MAPPING=${BOARD_DEFINE_REF[i]} break fi done #parameter check if [ -z $BOARD_TYPE_MAPPING ]; then echo -e "\033[41;33m Notice: parameter error !!! \033[0m" echo -e "\033[33m board_type: aw409_c302x / aw402_c302x / aw402s_c302x / aw419_c308l\033[0m" exit 1 fi #release flow if [ -d $RTOS_BASE_DIR/binary_release ] && [ -d $RTOS_BASE_DIR/bl22_bin ] &&\ { [ "$BOARD_TYPE_MAPPING" == "c3_aw402" ] ||\ [ "$BOARD_TYPE_MAPPING" == "c3_aw402s" ]; }; then pushd $UBOOT_DIR if [ -d ./fastboot ]; then rm -rf ./fastboot fi mkdir -p ./fastboot cp $RTOS_BASE_DIR/binary_release/* ./fastboot cp $RTOS_BASE_DIR/bl22_bin/bl22.bin ./fastboot ./mk $BOARD_TYPE_MAPPING popd exit 0 fi if [ -z $SENSOR_TYPE ]; then case $BOARD_TYPE_MAPPING in 'c3_aw402') SENSOR_TYPE=SC301IOT ;; *) SENSOR_TYPE=IMX290 ;; esac fi #Get the rtos target address (The configuration needs to be consistent with the lscript.h file) if [ -z $RTOS_TARGET_ADDRESS ]; then case $BOARD_TYPE_MAPPING in 'c3_aw409') RTOS_TARGET_ADDRESS=0x5400000 ;; 'c3_aw402') RTOS_TARGET_ADDRESS=0x7600000 ;; 'c3_aw402s') RTOS_TARGET_ADDRESS=0x7600000 ;; *) RTOS_TARGET_ADDRESS=0x9000000 ;; esac fi #Retrieve the size of the DDRFIP space case $BOARD_TYPE_MAPPING in 'c3_aw409') UBOOT_DDR_FIP_SIZE=128m ;; 'c3_aw402') UBOOT_DDR_FIP_SIZE=128m ;; 'c3_aw402s') UBOOT_DDR_FIP_SIZE=256m ;; *) UBOOT_DDR_FIP_SIZE=256m ;; esac #Get the loading address of rtos2 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 #RTOS object file path RTOS_BUILD_DIR=$RTOS_BASE_DIR/output/$ARCH-$BOARD-$PRODUCT/freertos RTOS_IMAGE_A=$RTOS_BUILD_DIR/rtos_1.bin RTOS_IMAGE_B=$RTOS_BUILD_DIR/rtos_2.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 rtos_config_prepare() { CONFIG_FILE=$RTOS_BASE_DIR/boards/$ARCH/$BOARD/lscript.h 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 } function sensor_config_choose() { sed -i '/CONFIG_SENSOR_SC401AI/d' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig if [ "${SENSOR_TYPE}" == "SC401AI" ]; then sed -i '$ a CONFIG_SENSOR_SC401AI=y' $RTOS_BASE_DIR/boards/$ARCH/$BOARD/defconfig fi } function lz4_rtos() { pushd $RTOS_BASE_DIR/lib/utilities/lz4 cp $RTOS_IMAGE_A . #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_A rm ./self_decompress_firmware.bin ./rtos_1.bin popd } function bl22_compile() { if [ -d $BL22_DIR ]; then pushd $BL22_DIR if [ -f ./mk ]; then ./mk c3 $BOARD_TYPE if [ "$?" -ne 0 ]; then echo "RTOS-SDK: BL22 compilation failed !!!" exit 1 fi fi cp ./bl22.bin $RTOS_BUILD_DIR/bl22.bin popd fi } function package_fastboot() { pushd $UBOOT_DIR if [ -d ./fastboot ]; then rm -rf ./fastboot fi mkdir -p ./fastboot cp $RTOS_IMAGE_A ./fastboot cp $RTOS_IMAGE_B ./fastboot cp $RTOS_BUILD_DIR/bl22.bin ./fastboot #./mk c3_aw419 --update-bl2 --bl31 ./blob-bl31.bin.signed #./mk c3_aw419 --update-bl2 --update-bl2e --bl31 ./blob-bl31.bin.signed #./mk c3_aw419 --update-bl2 --update-bl2e --bl31 ./fip/blob-bl31.bin.signed echo "./mk $BOARD_TYPE_MAPPING --build-nogit --ipc-ddr-size $UBOOT_DDR_FIP_SIZE" ./mk $BOARD_TYPE_MAPPING --build-nogit --ipc-ddr-size $UBOOT_DDR_FIP_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 } 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 ============>" } #Configure the RTOS environment if [ $4 ] && [[ "$4" =~ ^0x.* ]]; then rtos_config_prepare fi #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 #compile the u-boot image package_fastboot #debug debug_info