xref: /openwifi/kernel_boot/build_boot_bin.sh (revision 2ee67178825ee52f380c2f72b7135d15ddadca60)
1*2ee67178SXianjun Jiao#!/bin/bash
2*2ee67178SXianjun Jiaoset -ex
3*2ee67178SXianjun Jiao
4*2ee67178SXianjun JiaoHDF_FILE=$1
5*2ee67178SXianjun JiaoUBOOT_FILE=$2
6*2ee67178SXianjun JiaoBUILD_DIR=build_boot_bin
7*2ee67178SXianjun JiaoOUTPUT_DIR=output_boot_bin
8*2ee67178SXianjun Jiao
9*2ee67178SXianjun Jiaousage () {
10*2ee67178SXianjun Jiao	echo usage: $0 system_top.hdf u-boot.elf [output-archive]
11*2ee67178SXianjun Jiao	exit 1
12*2ee67178SXianjun Jiao}
13*2ee67178SXianjun Jiao
14*2ee67178SXianjun Jiaodepends () {
15*2ee67178SXianjun Jiao	echo Xilinx $1 must be installed and in your PATH
16*2ee67178SXianjun Jiao	echo try: source /opt/Xilinx/Vivado/201x.x/settings64.sh
17*2ee67178SXianjun Jiao	exit 1
18*2ee67178SXianjun Jiao}
19*2ee67178SXianjun Jiao
20*2ee67178SXianjun Jiao### Check command line parameters
21*2ee67178SXianjun Jiaoecho $HDF_FILE | grep -q ".hdf" || usage
22*2ee67178SXianjun Jiaoecho $UBOOT_FILE | grep -q -e ".elf" -e "uboot" || usage
23*2ee67178SXianjun Jiao
24*2ee67178SXianjun Jiaoif [ ! -f $HDF_FILE ]; then
25*2ee67178SXianjun Jiao    echo $HDF_FILE: File not found!
26*2ee67178SXianjun Jiao    usage
27*2ee67178SXianjun Jiaofi
28*2ee67178SXianjun Jiao
29*2ee67178SXianjun Jiaoif [ ! -f $UBOOT_FILE ]; then
30*2ee67178SXianjun Jiao    echo $UBOOT_FILE: File not found!
31*2ee67178SXianjun Jiao    usage
32*2ee67178SXianjun Jiaofi
33*2ee67178SXianjun Jiao
34*2ee67178SXianjun Jiao### Check for required Xilinx tools
35*2ee67178SXianjun Jiaocommand -v xsdk >/dev/null 2>&1 || depends xsdk
36*2ee67178SXianjun Jiaocommand -v bootgen >/dev/null 2>&1 || depends bootgen
37*2ee67178SXianjun Jiao
38*2ee67178SXianjun Jiaorm -Rf $BUILD_DIR $OUTPUT_DIR
39*2ee67178SXianjun Jiaomkdir -p $OUTPUT_DIR
40*2ee67178SXianjun Jiaomkdir -p $BUILD_DIR
41*2ee67178SXianjun Jiao
42*2ee67178SXianjun Jiaocp $HDF_FILE $BUILD_DIR/
43*2ee67178SXianjun Jiaocp $UBOOT_FILE $OUTPUT_DIR/u-boot.elf
44*2ee67178SXianjun Jiaocp $HDF_FILE $OUTPUT_DIR/
45*2ee67178SXianjun Jiao
46*2ee67178SXianjun Jiao### Create create_fsbl_project.tcl file used by xsdk to create the fsbl
47*2ee67178SXianjun Jiaoecho "hsi open_hw_design `basename $HDF_FILE`" > $BUILD_DIR/create_fsbl_project.tcl
48*2ee67178SXianjun Jiaoecho 'set cpu_name [lindex [hsi get_cells -filter {IP_TYPE==PROCESSOR}] 0]' >> $BUILD_DIR/create_fsbl_project.tcl
49*2ee67178SXianjun Jiaoecho 'sdk setws ./build/sdk' >> $BUILD_DIR/create_fsbl_project.tcl
50*2ee67178SXianjun Jiaoecho "sdk createhw -name hw_0 -hwspec `basename $HDF_FILE`" >> $BUILD_DIR/create_fsbl_project.tcl
51*2ee67178SXianjun Jiaoecho 'sdk createapp -name fsbl -hwproject hw_0 -proc $cpu_name -os standalone -lang C -app {Zynq FSBL}' >> $BUILD_DIR/create_fsbl_project.tcl
52*2ee67178SXianjun Jiaoecho 'configapp -app fsbl build-config release' >> $BUILD_DIR/create_fsbl_project.tcl
53*2ee67178SXianjun Jiaoecho 'sdk projects -build -type all' >> $BUILD_DIR/create_fsbl_project.tcl
54*2ee67178SXianjun Jiao
55*2ee67178SXianjun Jiao### Create zynq.bif file used by bootgen
56*2ee67178SXianjun Jiaoecho 'the_ROM_image:' > $OUTPUT_DIR/zynq.bif
57*2ee67178SXianjun Jiaoecho '{' >> $OUTPUT_DIR/zynq.bif
58*2ee67178SXianjun Jiaoecho '[bootloader] fsbl.elf' >> $OUTPUT_DIR/zynq.bif
59*2ee67178SXianjun Jiaoecho 'system_top.bit' >> $OUTPUT_DIR/zynq.bif
60*2ee67178SXianjun Jiaoecho 'u-boot.elf' >> $OUTPUT_DIR/zynq.bif
61*2ee67178SXianjun Jiaoecho '}' >> $OUTPUT_DIR/zynq.bif
62*2ee67178SXianjun Jiao
63*2ee67178SXianjun Jiao### Build fsbl.elf
64*2ee67178SXianjun Jiao(
65*2ee67178SXianjun Jiao	cd $BUILD_DIR
66*2ee67178SXianjun Jiao	xsdk -batch -source create_fsbl_project.tcl
67*2ee67178SXianjun Jiao)
68*2ee67178SXianjun Jiao
69*2ee67178SXianjun Jiao### Copy fsbl and system_top.bit into the output folder
70*2ee67178SXianjun Jiaocp $BUILD_DIR/build/sdk/fsbl/Release/fsbl.elf $OUTPUT_DIR/fsbl.elf
71*2ee67178SXianjun Jiaocp $BUILD_DIR/build/sdk/hw_0/system_top.bit $OUTPUT_DIR/system_top.bit
72*2ee67178SXianjun Jiao
73*2ee67178SXianjun Jiao### Build BOOT.BIN
74*2ee67178SXianjun Jiao(
75*2ee67178SXianjun Jiao	cd $OUTPUT_DIR
76*2ee67178SXianjun Jiao	bootgen -arch zynq -image zynq.bif -o BOOT.BIN -w
77*2ee67178SXianjun Jiao)
78*2ee67178SXianjun Jiao
79*2ee67178SXianjun Jiao### clean up BUILD_DIR and copy ILA definition together with .bit into OUTPUT_DIR
80*2ee67178SXianjun Jiao(
81*2ee67178SXianjun Jiao	rm $BUILD_DIR -rf
82*2ee67178SXianjun Jiao)
83*2ee67178SXianjun Jiao
84*2ee67178SXianjun Jiao### Optionally tar.gz the entire output folder with the name given in argument 3
85*2ee67178SXianjun Jiaoif [ ${#3} -ne 0 ]; then
86*2ee67178SXianjun Jiao	tar czvf $3.tar.gz $OUTPUT_DIR
87*2ee67178SXianjun Jiaofi
88