12ee67178SXianjun Jiao#!/bin/bash 22ee67178SXianjun Jiaoset -ex 32ee67178SXianjun Jiao 4*6ffca2acSXianjun JiaoHDF_FILE=$1 5*6ffca2acSXianjun JiaoUBOOT_FILE=$2 6*6ffca2acSXianjun JiaoBUILD_DIR=build_boot_bin 7*6ffca2acSXianjun JiaoOUTPUT_DIR=output_boot_bin 82ee67178SXianjun Jiao 9*6ffca2acSXianjun Jiaousage () { 10*6ffca2acSXianjun Jiao echo "usage: $0 system_top.<hdf/xsa> u-boot.elf [output-archive]" 11*6ffca2acSXianjun Jiao exit 1 12*6ffca2acSXianjun Jiao} 132ee67178SXianjun Jiao 14*6ffca2acSXianjun Jiaodepends () { 15*6ffca2acSXianjun Jiao echo Xilinx $1 must be installed and in your PATH 16*6ffca2acSXianjun Jiao echo try: source /opt/Xilinx/Vivado/201x.x/settings64.sh 17*6ffca2acSXianjun Jiao exit 1 18*6ffca2acSXianjun Jiao} 192ee67178SXianjun Jiao 202ee67178SXianjun Jiao### Check command line parameters 21*6ffca2acSXianjun Jiaoecho $HDF_FILE | grep -q ".hdf\|.xsa" || usage 22*6ffca2acSXianjun Jiaoecho $UBOOT_FILE | grep -q -e ".elf" -e "uboot" -e "u-boot"|| usage 232ee67178SXianjun Jiao 242ee67178SXianjun Jiaoif [ ! -f $HDF_FILE ]; then 252ee67178SXianjun Jiao echo $HDF_FILE: File not found! 262ee67178SXianjun Jiao usage 272ee67178SXianjun Jiaofi 282ee67178SXianjun Jiao 292ee67178SXianjun Jiaoif [ ! -f $UBOOT_FILE ]; then 302ee67178SXianjun Jiao echo $UBOOT_FILE: File not found! 312ee67178SXianjun Jiao usage 322ee67178SXianjun Jiaofi 332ee67178SXianjun Jiao 34*6ffca2acSXianjun Jiao### Check for required Xilinx tools (xcst is equivalent with 'xsdk -batch') 35*6ffca2acSXianjun Jiaocommand -v xsct >/dev/null 2>&1 || depends xsct 362ee67178SXianjun Jiaocommand -v bootgen >/dev/null 2>&1 || depends bootgen 372ee67178SXianjun Jiao 382ee67178SXianjun Jiaorm -Rf $BUILD_DIR $OUTPUT_DIR 392ee67178SXianjun Jiaomkdir -p $OUTPUT_DIR 402ee67178SXianjun Jiaomkdir -p $BUILD_DIR 412ee67178SXianjun Jiao 422ee67178SXianjun Jiaocp $HDF_FILE $BUILD_DIR/ 432ee67178SXianjun Jiaocp $UBOOT_FILE $OUTPUT_DIR/u-boot.elf 442ee67178SXianjun Jiaocp $HDF_FILE $OUTPUT_DIR/ 452ee67178SXianjun Jiao 46*6ffca2acSXianjun Jiao### Create create_fsbl_project.tcl file used by xsct to create the fsbl. 472ee67178SXianjun Jiaoecho "hsi open_hw_design `basename $HDF_FILE`" > $BUILD_DIR/create_fsbl_project.tcl 482ee67178SXianjun Jiaoecho 'set cpu_name [lindex [hsi get_cells -filter {IP_TYPE==PROCESSOR}] 0]' >> $BUILD_DIR/create_fsbl_project.tcl 49*6ffca2acSXianjun Jiao### The fsbl creating flow is different starting with 2019.2 Xilinx version 50*6ffca2acSXianjun Jiaoif [[ "$HDF_FILE" =~ ".hdf" ]];then 512ee67178SXianjun Jiao echo 'sdk setws ./build/sdk' >> $BUILD_DIR/create_fsbl_project.tcl 522ee67178SXianjun Jiao echo "sdk createhw -name hw_0 -hwspec `basename $HDF_FILE`" >> $BUILD_DIR/create_fsbl_project.tcl 532ee67178SXianjun Jiao echo 'sdk createapp -name fsbl -hwproject hw_0 -proc $cpu_name -os standalone -lang C -app {Zynq FSBL}' >> $BUILD_DIR/create_fsbl_project.tcl 542ee67178SXianjun Jiao echo 'configapp -app fsbl build-config release' >> $BUILD_DIR/create_fsbl_project.tcl 552ee67178SXianjun Jiao echo 'sdk projects -build -type all' >> $BUILD_DIR/create_fsbl_project.tcl 562ee67178SXianjun Jiao 57*6ffca2acSXianjun Jiao FSBL_PATH="$BUILD_DIR/build/sdk/fsbl/Release/fsbl.elf" 58*6ffca2acSXianjun Jiao SYSTEM_TOP_BIT_PATH="$BUILD_DIR/build/sdk/hw_0/system_top.bit" 59*6ffca2acSXianjun Jiaoelse 60*6ffca2acSXianjun Jiao echo 'platform create -name hw0 -hw system_top.xsa -os standalone -out ./build/sdk -proc $cpu_name' >> $BUILD_DIR/create_fsbl_project.tcl 61*6ffca2acSXianjun Jiao echo 'platform generate' >> $BUILD_DIR/create_fsbl_project.tcl 62*6ffca2acSXianjun Jiao 63*6ffca2acSXianjun Jiao FSBL_PATH="$BUILD_DIR/build/sdk/hw0/export/hw0/sw/hw0/boot/fsbl.elf" 64*6ffca2acSXianjun Jiao SYSTEM_TOP_BIT_PATH="$BUILD_DIR/build/sdk/hw0/hw/system_top.bit" 65*6ffca2acSXianjun Jiaofi 66*6ffca2acSXianjun Jiao 672ee67178SXianjun Jiao### Create zynq.bif file used by bootgen 682ee67178SXianjun Jiaoecho 'the_ROM_image:' > $OUTPUT_DIR/zynq.bif 692ee67178SXianjun Jiaoecho '{' >> $OUTPUT_DIR/zynq.bif 702ee67178SXianjun Jiaoecho '[bootloader] fsbl.elf' >> $OUTPUT_DIR/zynq.bif 712ee67178SXianjun Jiaoecho 'system_top.bit' >> $OUTPUT_DIR/zynq.bif 722ee67178SXianjun Jiaoecho 'u-boot.elf' >> $OUTPUT_DIR/zynq.bif 732ee67178SXianjun Jiaoecho '}' >> $OUTPUT_DIR/zynq.bif 742ee67178SXianjun Jiao 752ee67178SXianjun Jiao### Build fsbl.elf 762ee67178SXianjun Jiao( 772ee67178SXianjun Jiao cd $BUILD_DIR 78*6ffca2acSXianjun Jiao xsct create_fsbl_project.tcl 792ee67178SXianjun Jiao) 802ee67178SXianjun Jiao 812ee67178SXianjun Jiao### Copy fsbl and system_top.bit into the output folder 82*6ffca2acSXianjun Jiaocp $FSBL_PATH $OUTPUT_DIR/fsbl.elf 83*6ffca2acSXianjun Jiaocp $SYSTEM_TOP_BIT_PATH $OUTPUT_DIR/system_top.bit 842ee67178SXianjun Jiao 852ee67178SXianjun Jiao### Build BOOT.BIN 862ee67178SXianjun Jiao( 872ee67178SXianjun Jiao cd $OUTPUT_DIR 882ee67178SXianjun Jiao bootgen -arch zynq -image zynq.bif -o BOOT.BIN -w 892ee67178SXianjun Jiao) 902ee67178SXianjun Jiao 91*6ffca2acSXianjun Jiao### Optionally tar.gz the entire output folder with the name given in argument 3 92*6ffca2acSXianjun Jiaoif [ ${#3} -ne 0 ]; then 93*6ffca2acSXianjun Jiao tar czvf $3.tar.gz $OUTPUT_DIR 94*6ffca2acSXianjun Jiaofi 95