xref: /openwifi/kernel_boot/build_boot_bin.sh (revision 6ffca2ac8f2eba95591c1471d78f21f17dc419ce)
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