| #!/bin/bash |
| |
| NAND=${1:-toshiba} |
| [ "$FLASH_TYPE" = "" -o "$CUST_SELFKEY_IMAGE" = "" ] && { |
| source ../../berlin_config/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=../../berlin_config/ |
| 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` |
| |
| 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 include/. |
| |
| # 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 include/pin_settings.h ||exit 1 |
| |
| case "$BERLIN_CHIP" in |
| BG2CDP) |
| if [ $CPU_TYPE = "Z1" -o $CPU_TYPE = "Z2" ];then |
| SYS_INIT_DIR=../sys_init_bg2cdp |
| else |
| SYS_INIT_DIR=../sys_init_bg2cdp_a0 |
| fi |
| ;; |
| BG4CDP) |
| if [ $CPU_TYPE = "Z1" ];then |
| SYS_INIT_DIR=../sys_init_bg4cdp_z1 |
| else |
| SYS_INIT_DIR=../sys_init_bg4cdp_a0 |
| fi |
| ;; |
| AS370) |
| SYS_INIT_DIR=../sys_init_as370_a0 |
| ;; |
| *) |
| echo "ERROR: unknown $BERLIN_CHIP" |
| exit 1 |
| ;; |
| esac |
| |
| SYS_INIT_BIN_FILE=sys_init_${BOOT_DEV}_secure_CPU"$CPUPLL"_MEM"$MEMPLL"_SYS"$SYSPLL"_$CPU_TYPE.bin |
| |
| [ $# = 1 ] && VT_PATH=$1 || VT_PATH=../.temp/version_table |
| |
| SYS_INIT_BIN_DIR=$SYS_INIT_DIR/$PLATFORM |
| SYS_INIT_BIN_FILE=${NAND}_sysinit.bin |
| echo "sys_init binary file: $SYS_INIT_BIN_DIR/$SYS_INIT_BIN_FILE" |
| cp $SYS_INIT_BIN_DIR/image1/release/bcm_erom.bin init_erom.bin || exit 1 |
| cp $SYS_INIT_BIN_DIR/image1/release/drm_erom.bin drm_erom.bin || exit 1 |
| cp $SYS_INIT_BIN_DIR/image2/release/${NAND}_sysinit.bin init_boot.bin || exit 1 |
| cp $SYS_INIT_BIN_DIR/image2/release/tz_loader_en.bin tz_loader_en.bin || exit 1 |
| # Preserve TZ (MPR enabled) version of TZ loader |
| cp $SYS_INIT_BIN_DIR/image2/release/tz_loader_en_tz.bin tz_loader_en_tz.bin || exit 1 |
| |
| if [ ! -f $VT_PATH ];then |
| echo "please generate $VT_PATH first." |
| exit 1 |
| fi |
| |
| make clean &&\ |
| make && \ |
| rm -f pin_settings.h || exit 1 |
| |
| TOOL_DIR=$WORKING_DIR/.. |
| |
| SIGN_TOOL=$TOOL_DIR/sign_image |
| SIGN_TOOL_CMD=$TOOL_DIR/sign_image_cmd.sh |
| |
| readelf -h bootloader_en.elf | grep "Entry point" >bootloader_en.info |
| #echo " Entry point address: 0x680000" >bootloader.info |
| cp -f $SIGN_TOOL $SIGN_TOOL_CMD ../gen_layout.sh ../set_layout.sh . && \ |
| $SIGN_TOOL_CMD $TOOL_DIR -d 0x5 -i bootloader.bin -o bootloader_en.bin -v -g > bootloader.log 2>&1 || { |
| echo fail to generate bootloader_en.img |
| 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 |
| |
| echo -------------------- |
| echo Generate pre bootloader image |
| echo -------------------- |
| |
| target=init_loader.img |
| LAST2K=`expr $block_size - 2048` |
| |
| #layout: erom, im2, tzl, tsm, version |
| |
| #make version 1KiB |
| dd if=$VT_PATH of=version.bin conv=notrunc && \ |
| SIZE=`stat -c %s version.bin` && \ |
| dd if=script/random.bin of=version.bin bs=1 seek=$SIZE count=`expr 1024 - $SIZE` conv=notrunc || exit 1 |
| echo " Entry point address: 0x600000" >version.info |
| |
| #eval filler size |
| cat init_erom.bin init_boot.bin tz_loader_en.bin drm_erom.bin > $target || exit 1 |
| INIT_LOADER_FINAL_SIZE=`stat -c %s $target` |
| if [ $INIT_LOADER_FINAL_SIZE -gt $LAST2K ]; then |
| echo "Error: size of preloader images image size is too big." |
| exit 1; |
| fi |
| head -c `expr $LAST2K - $INIT_LOADER_FINAL_SIZE` script/random.bin >filler.bin |
| echo " Entry point address: 0x000000" >filler.info |
| |
| head -c 1024 script/random.bin > filler2.bin |
| |
| # Generate ".info' file (not used in BG4-CD+) |
| echo " Entry point address: 0x2c001" > init_rom.info |
| echo " Entry point address: 0x2e001" > drm_erom.info |
| echo " Entry point address: 0xf7a40000" > init_boot.info |
| echo " Entry point address: 0x08000000" > tz_loader_en.info |
| |
| # Generate layout table |
| GEN_LAYOUT=./gen_layout.sh # tool to generate block1 layout data |
| SET_LAYOUT=./set_layout.sh # tool to inject block1 layout |
| echo "$WORKING_DIR/init_erom 0x10001" >layout.seq |
| echo "$WORKING_DIR/init_boot 2" >>layout.seq |
| echo "$WORKING_DIR/tz_loader_en 3" >>layout.seq |
| echo "$WORKING_DIR/drm_erom 0x10002" >>layout.seq |
| echo "$WORKING_DIR/filler 0x100200ff" >>layout.seq |
| echo "$WORKING_DIR/version 0x10020008" >>layout.seq |
| $GEN_LAYOUT layout.seq layout.bin |
| $SET_LAYOUT layout.bin init_erom.bin init_layout.bin $(( 8192-512 )) |
| |
| # Generate final image of pre-bootloader |
| cat init_layout.bin init_boot.bin tz_loader_en.bin drm_erom.bin filler.bin version.bin filler2.bin > init_loader.img || exit 1 |
| |
| # |
| # Pre bootloader image generation complete |
| # |
| |
| # |
| # Generate post bootloader image |
| # |
| $TOOL_DIR/prepend_image_info.sh bootloader_en.bin post-init_loader.img || exit 1 |
| |
| # Save a copy of the post-bootloader prior to padding |
| cp post-init_loader.img post-bootloader_nopadding.img |
| cp init_loader.img bootloader_nopadding.img |
| |
| # Sanity check size of init_loader.img |
| INIT_LOADER_FINAL_SIZE=`stat -c %s init_loader.img` |
| if [ $INIT_LOADER_FINAL_SIZE -gt $block_size ]; then |
| echo "Error: bootloader partition image size is greater than block size." |
| exit 1; |
| fi |
| |
| # expand post-init_loader to align to block_size |
| target2=post-init_loader.img |
| s=`stat -c %s $target2` && \ |
| mask=$(( block_size - 1 )) |
| d=$((( (s + mask) & ~mask ) - s)) |
| if [ $d -gt 0 ]; then |
| dd if=script/random.bin of=$target2 bs=1 seek=$s count=$d conv=notrunc || exit 1 |
| echo "expand $target2 from $s with $d" |
| fi |