blob: 28a24392d26e9c0ba8643a4d6461adbb24a3c06a [file] [log] [blame]
#!/bin/bash
NAND=${1:-micron}
#NAND=${1:-powerchip}
NAND=${1:-toshiba}
MV88DE3100_SDK=$(readlink -f ../..)
WORKING_DIR=$(readlink -f .)
[ "$FLASH_TYPE" = "" -o "$CUST_SELFKEY_IMAGE" = "" ] && {
source $MV88DE3100_SDK/Customization_Data/config
if [ -z $CPUPLL ];then
CPUPLL=1000
fi
if [ -z $MEMPLL ];then
MEMPLL=1600
fi
if [ -z $SYSPLL ];then
SYSPLL=800
fi
export PLATFORM
export CPUPLL
export PV_COMP
export NFCECCCLK
export LINUX_ON_CPU1
export CPU_TYPE
export CPU_PLL
export MEMPLL
export SYSPLL
export SYSTEM_CONFIGURATION_PATH
export PLATFORM_INFO
export BUILD_GOOGLETV
export BOOT_TYPE
export RANDOMIZER
export CONFIG_NAND_READ_RETRY
export CONFIG_ENHANCED_SLC
export CONFIG_SLC
export SM_IMAGE_ACTIVE
export SM_IMAGE_PATH
export SM_IMAGE_FORMAT
export CPU0_START_ADDR
export CONFIG_GPT
export DISABLE_CRASH_COUNTER
export BERLIN_CHIP
top_data_dir=$MV88DE3100_SDK/Customization_Data/
export top_data_dir
}
pagesize=`echo $FLASH_TYPE | cut -d _ -f1`
page_per_block=`echo $FLASH_TYPE | cut -d _ -f3`
block_size=`expr $pagesize \* $page_per_block`
block_size_kB=`expr $block_size / 1024`
echo "pagesize=$pagesize , page_per_block=$page_per_block"
echo "block_size_kB=$block_size_kB"
#WORKING_DIR=`pwd`
#yunsen ADDHEADER_TOOL="../Scripts/addheader.sh"
ADDHEADER_TOOL="$MV88DE3100_SDK/tool/addheader.sh"
LOCAL_CUST_SELFKEY_PATH=$MV88DE3100_SDK/Customization_Data/${CUST_SELFKEY_IMAGE}
SYSTEM_INIT_FILE_LOCAL=SI_part1.bin
SI_CUST_FIGO_IMAGE_LOCAL=SI_cust_figo.bin
SM_PATH=$MV88DE3100_SDK/Customization_Data/$SM_IMAGE_PATH
if [ $BOOT_TYPE = "NAND_BOOT" ]; then
BOOT_DEV=nand
else
BOOT_DEV=emmc
fi
# copy the linux parameters (bootargs)
if [ ! -f ../.temp/linux_param.h ]; then
echo run \"make linux_param\" under MV88DE3100_Tools/ first
exit 1
fi
cp -f ../.temp/linux_param.h .
# check platform info
if [ \( ! -f $top_data_dir/$PLATFORM_INFO \) -a \( ! -L $top_data_dir/$PLATFORM_INFO \) ]; then
echo "Error: Pin setting file $top_data_dir/$PLATFORM_INFO does not exist."
exit 1
fi
cp -f $top_data_dir/$PLATFORM_INFO pin_settings.h ||exit 1
# copy SM
if [ "$SM_IMAGE_FORMAT" = "binary" ]; then
echo "SM image is a binary file"
else
echo "SM image is a $SM_IMAGE_FORMAT file" do not support now
exit 1
fi
cp -f $SM_PATH sm.bin
if [ $BERLIN_CHIP = "BG2CD" ]; then
SYS_INIT_DIR=../sys_init_bg2cd
else
if [ $CPU_TYPE = "Z1" -o $CPU_TYPE = "Z2" ];then
SYS_INIT_DIR=../sys_init_Zx
else
SYS_INIT_DIR=../sys_init
fi
fi
#yunsen SYS_INIT_BIN_FILE=sys_init_${BOOT_DEV}_secure_CPU"$CPUPLL"_MEM"$MEMPLL"_SYS"$SYSPLL"_$CPU_TYPE.bin
#yunsen [ $# = 1 ] && VT_PATH=$1 || VT_PATH=../.temp/version_table
VT_PATH=../.temp/version_table
#if [ "$ROM_KEY_DISABLE" = "0" ]; then
# cp diag_jtag_switch_figo_romkey.bin figo_image.bin
#else
# cp diag_jtag_switch_figo_distkey.bin figo_image.bin
#fi
if [ "$PRODUCTION_CHIP" = "0" ]; then
echo "Generating bootloader for engineer chip"
if [ ! -f ../DRM_Image/customer_keystore_figo.bin_ROM_Key ]; then
echo "../DRM_Image/customer_keystore_figo.bin_ROM_Key not found"
exit 1
fi
DRM_IMAGE_FILE=../DRM_Image/customer_keystore_figo.bin_ROM_Key
#yunsen if [ "is$PLATFORM" != "is" -a -d $SYS_INIT_DIR/$PLATFORM ]; then
#yunsen SYS_INIT_BIN_DIR=$SYS_INIT_DIR/$PLATFORM/${BOOT_DEV}_secure_romkey
#yunsen else
#yunsen SYS_INIT_BIN_DIR=$SYS_INIT_DIR/default/${BOOT_DEV}_secure_romkey
#yunsen fi
else
echo "Generating bootloader for production chip"
if [ ! -f ../DRM_Image/customer_keystore_figo.bin_Dist_Key ]; then
echo "../DRM_Image/customer_keystore_figo.bin_Dist_Key not found"
exit 1
fi
DRM_IMAGE_FILE=../DRM_Image/customer_keystore_figo.bin_Dist_Key
#yunsen if [ "is$PLATFORM" != "is" -a -d $SYS_INIT_DIR/$PLATFORM ]; then
#yunsen SYS_INIT_BIN_DIR=$SYS_INIT_DIR/$PLATFORM/${BOOT_DEV}_secure_distkey
#yunsen else
#yunsen SYS_INIT_BIN_DIR=$SYS_INIT_DIR/default/${BOOT_DEV}_secure_distkey
#yunsen fi
fi
# Copy system init part1 image and cust figo image to local
cp $DRM_IMAGE_FILE $SI_CUST_FIGO_IMAGE_LOCAL
SYS_INIT_BIN_DIR=$MV88DE3100_SDK/image2/release #yunsen
SYS_INIT_BIN_FILE=${NAND}_sysinit.bin #yunsen
echo "sys_init binary file: $SYS_INIT_BIN_DIR/$SYS_INIT_BIN_FILE"
#yunsen cp $SYS_INIT_BIN_DIR/$SYS_INIT_BIN_FILE $SYSTEM_INIT_FILE_LOCAL || exit 1
cp $MV88DE3100_SDK/image1/release/bcm_erom.bin init_erom.bin || exit 1
cp $MV88DE3100_SDK/image2/release/${NAND}_sysinit.bin init_boot.bin || exit 1
cat init_erom.bin init_boot.bin >$SYSTEM_INIT_FILE_LOCAL
if [ ! -f $VT_PATH ];then
echo "please generate $VT_PATH first."
exit 1
fi
# Generate Customer Key Store in C style
if [ "x$CUST_KEY_IMAGE_2ND" != "x" ]; then
cat $MV88DE3100_SDK/Customization_Data/${CUST_KEY_IMAGE_2ND} | xxd -i > customer_key_store.h
else
echo > customer_key_store.h
fi
make clean &&\
make configure ASIC=BG2CDP CPU_TYPE=$CPU_TYPE CPUPLL=$CPUPLL BOX_PRODUCT_RELEASE=$BOX_PRODUCT_RELEASE BOOT_TYPE=$BOOT_TYPE RANDOMIZER=$RANDOMIZER &&\
make >/dev/null && \
rm -f pin_settings.h #|| exit 1
echo cust_self_key=$CUST_SELFKEY_IMAGE
ls -l $MV88DE3100_SDK/Customization_Data/$CUST_SELFKEY_IMAGE
#yunsen $ADDHEADER_TOOL bootloader.elf bootloader_en.bin && \
#yunsen cp -f ../enc_tool . && \
#yunsen cp -f ../Common/tools/encryption.sh ./
#yunsen cp -f ../Common/tools/encrypt ./
#yunsen if [ "$CPU_IMAGE_ENCRYPT" = "y" ];then
#yunsen cp -f $LOCAL_CUST_SELFKEY_PATH ./
#yunsen fi
#yunsen ./encryption.sh bootloader_en.bin bootloader_en.bin || {
ENC_TOOL=$MV88DE3100_SDK/tool/bin/cdp_sign0
$ENC_TOOL -C3 -B1 -i bootloader.bin -O bootloader_en.bin > bootloder.log || {
echo fail to generate bootloader_en.bin
exit 1
}
if [ "$ROM_KEY_DISABLE" = "" ];then
echo "ROM_KEY_DISABLE is not set in config file, please update your config file"
exit 1
fi
if [ "$ROM_KEY_DISABLE" = "1" ]; then
echo " ****************** ROM key has been disabled ************"
if [ "$OTP_RSA_KEY_FILE_NAME" = "" ]; then
echo "ROM KEY has been disabled, but OTP_RSA_KEY_FILE_NAME is not defined"
exit 1
fi
if [ ! -f $MV88DE3100_SDK/Customization_Data/${OTP_RSA_KEY_FILE_NAME} ];then
echo " Can not find User RSA key file: $MV88DE3100_SDK/Customization_Data/${OTP_RSA_KEY_FILE_NAME} "
exit 1
fi
cp $MV88DE3100_SDK/Customization_Data/${OTP_RSA_KEY_FILE_NAME} ./
#cp ../SPI_Secure_Uboot_Releases_Prod_Chip/ChangeSign ./
cp ../kms_release_bg2_32/seclab/bin/ChangeSign ./
if [ ! -f ./ChangeSign ];then
echo "ChangeSign doesn't exist"
exit 1
fi
echo " resign system init..."
./ChangeSign $SYSTEM_INIT_FILE_LOCAL 0
echo " resign cust figo image..."
./ChangeSign $SI_CUST_FIGO_IMAGE_LOCAL 0
fi
cp $SYSTEM_INIT_FILE_LOCAL ../IMAGE/Key_Injection/SI_part1
cp $SI_CUST_FIGO_IMAGE_LOCAL ../IMAGE/Key_Injection/SI_figo_image
cp $MV88DE3100_SDK/Customization_Data/${CUST_KEY_IMAGE} ../IMAGE/Key_Injection/SI_cust_key
#cp bootloader_en.bin ../IMAGE/Key_Injection/SI_part2
cp bootloader_en.bin ../IMAGE/Key_Injection/SI_part2
cp -vf $SYSTEM_INIT_FILE_LOCAL image2_init.bin &&\
$ADDHEADER_TOOL $SI_CUST_FIGO_IMAGE_LOCAL figo.img &&\
$ADDHEADER_TOOL $MV88DE3100_SDK/Customization_Data/${CUST_KEY_IMAGE} key.img || exit 1
echo --------------------
echo begin padding
echo --------------------
dd if=$VT_PATH of=version conv=notrunc && \
SIZE=`stat -c %s version` && \
dd if=/dev/urandom of=version bs=1 seek=$SIZE count=`expr 4096 - $SIZE` conv=notrunc && \
SIZE=`stat -c %s figo.img` && \
dd if=/dev/urandom of=figo.img bs=1 seek=$SIZE count=`expr 4096 - $SIZE` conv=notrunc && \
SIZE=`stat -c %s key.img` && \
dd if=/dev/urandom of=key.img bs=1 seek=$SIZE count=`expr 4096 - $SIZE` conv=notrunc && \
#create filler.bin
rm filler.bin
#touch filler.bin
#SIZE="stat -c %s image2_init.bin" && \
#dd if=/dev/urandom of=filler.bin bs=1 seek=0 count=`expr 53248 - $SIZE` conv=notrunc
SIZE=$(stat -c %s image2_init.bin) && \
head -c `expr 53248 - $SIZE` /dev/urandom >filler.bin
echo " Entry point address: 0x000000" >filler.info
cat version figo.img key.img > version.bin || exit 1
echo " Entry point address: 0x600000" >version.info
readelf -h bootloader.elf | grep "Entry point" >bootloader_en.info
#echo " Entry point address: 0x680000" >bootloader.info
GEN_LAYOUT=$MV88DE3100_SDK/tool/gen_layout.sh # tool to generate block1 layout data
SET_LAYOUT=$MV88DE3100_SDK/tool/set_layout.sh # tool to inject block1 layout
echo "$MV88DE3100_SDK/image1/release/bcm_erom 0x10001" >layout.seq
echo "$MV88DE3100_SDK/image2/release/${NAND}_sysinit 2" >>layout.seq
echo "$WORKING_DIR/filler 0x100200ff" >>layout.seq
echo "$WORKING_DIR/version 0x10020008" >>layout.seq
echo "$WORKING_DIR/bootloader_en 3" >>layout.seq
$GEN_LAYOUT layout.seq layout.bin
$SET_LAYOUT layout.bin $SYSTEM_INIT_FILE_LOCAL image2_init.bin
#cat image2_init.bin version figo.img key.img bootloader_en.bin> init_loader.img || exit 1
#cat image2_init.bin filler.bin version.bin bootloader_en.bin> init_loader.img || exit 1 #baowei
cat image2_init.bin filler.bin version.bin > init_loader.img || exit 1
cat bootloader_en.bin > post-init_loader.img || exit 1
if [ $BOOT_TYPE = "EMMC_BOOT" ]; then
INIT_LOADER_FINAL_SIZE=`stat -c %s init_loader.img`
if [ $INIT_LOADER_FINAL_SIZE -ge 524288 ]; then
echo "Error: bootloader partition image size is greater than 512K."
exit 1;
fi
dd if=/dev/zero of=init_loader.img bs=1 count=1 seek=524287 conv=notrunc || exit 1
else
INIT_LOADER_FINAL_SIZE=`stat -c %s init_loader.img`
if [ $INIT_LOADER_FINAL_SIZE -ge $block_size ]; then
echo "Error: bootloader partition image size is greater than block size."
exit 1;
fi
SIZE=`stat -c %s init_loader.img` && \
dd if=/dev/urandom of=init_loader.img bs=1 seek=$SIZE count=`expr $block_size - $SIZE` conv=notrunc || exit 1
SIZE=`stat -c %s post-init_loader.img` && \
dd if=/dev/urandom of=post-init_loader.img bs=1 seek=$SIZE count=`expr 1048576 - $SIZE` conv=notrunc || exit 1
fi