1*b73660adSXianjun Jiao 2*b73660adSXianjun Jiao#!/bin/bash 3*b73660adSXianjun Jiaoif [ "$#" -ne 4 ]; then 4*b73660adSXianjun Jiao echo "You have input $# arguments." 5*b73660adSXianjun Jiao echo "You must enter exactly 4 arguments: \$OPENWIFI_DIR \$XILINX_DIR \$BOARD_NAME \$SDCARD_DIR" 6*b73660adSXianjun Jiao exit 1 7*b73660adSXianjun Jiaofi 8*b73660adSXianjun Jiao 9*b73660adSXianjun JiaoOPENWIFI_DIR=$1 10*b73660adSXianjun JiaoXILINX_DIR=$2 11*b73660adSXianjun JiaoBOARD_NAME=$3 12*b73660adSXianjun JiaoSDCARD_DIR=$4 13*b73660adSXianjun Jiao 14*b73660adSXianjun Jiaoif [ -f "$OPENWIFI_DIR/LICENSE" ]; then 15*b73660adSXianjun Jiao echo "\$OPENWIFI_DIR is found!" 16*b73660adSXianjun Jiaoelse 17*b73660adSXianjun Jiao echo "\$OPENWIFI_DIR is not correct. Please check!" 18*b73660adSXianjun Jiao exit 1 19*b73660adSXianjun Jiaofi 20*b73660adSXianjun Jiao 21*b73660adSXianjun Jiaoif [ -d "$XILINX_DIR/SDK" ]; then 22*b73660adSXianjun Jiao echo "\$XILINX_DIR is found!" 23*b73660adSXianjun Jiaoelse 24*b73660adSXianjun Jiao echo "\$XILINX_DIR is not correct. Please check!" 25*b73660adSXianjun Jiao exit 1 26*b73660adSXianjun Jiaofi 27*b73660adSXianjun Jiao 28*b73660adSXianjun Jiaoif [ "$BOARD_NAME" != "zc706_fmcs2" ] && [ "$BOARD_NAME" != "zc702_fmcs2" ] && [ "$BOARD_NAME" != "zed_fmcs2" ] && [ "$BOARD_NAME" != "adrv9361z7035" ] && [ "$BOARD_NAME" != "adrv9361z7035_fmc" ] && [ "$BOARD_NAME" != "adrv9364z7020" ]; then 29*b73660adSXianjun Jiao echo "\$BOARD_NAME is not correct. Please check!" 30*b73660adSXianjun Jiao exit 1 31*b73660adSXianjun Jiaoelse 32*b73660adSXianjun Jiao echo "\$BOARD_NAME is found!" 33*b73660adSXianjun Jiaofi 34*b73660adSXianjun Jiao 35*b73660adSXianjun Jiao# detect SD card mounting status 36*b73660adSXianjun Jiaoif [ -d "$SDCARD_DIR/BOOT/" ]; then 37*b73660adSXianjun Jiao echo "$SDCARD_DIR/BOOT/" 38*b73660adSXianjun Jiaoelse 39*b73660adSXianjun Jiao echo "$SDCARD_DIR/BOOT/ does not exist!" 40*b73660adSXianjun Jiao exit 1 41*b73660adSXianjun Jiaofi 42*b73660adSXianjun Jiao 43*b73660adSXianjun Jiaoif [ -d "$SDCARD_DIR/rootfs/" ]; then 44*b73660adSXianjun Jiao echo "$SDCARD_DIR/rootfs/" 45*b73660adSXianjun Jiaoelse 46*b73660adSXianjun Jiao echo "$SDCARD_DIR/rootfs/ does not exist!" 47*b73660adSXianjun Jiao exit 1 48*b73660adSXianjun Jiaofi 49*b73660adSXianjun Jiao 50*b73660adSXianjun Jiaohome_dir=$(pwd) 51*b73660adSXianjun Jiao 52*b73660adSXianjun Jiaoset -x 53*b73660adSXianjun Jiao 54*b73660adSXianjun Jiaoif [ -f "$OPENWIFI_DIR/adi-linux/arch/arm/boot/uImage" ]; then 55*b73660adSXianjun Jiao echo "Skip the time costly Linux kernel compiling." 56*b73660adSXianjun Jiaoelse 57*b73660adSXianjun Jiao # Build the Linux kernel uImage and modules 58*b73660adSXianjun Jiao cd $OPENWIFI_DIR/ 59*b73660adSXianjun Jiao git submodule init adi-linux 60*b73660adSXianjun Jiao git submodule update adi-linux 61*b73660adSXianjun Jiao cd adi-linux 62*b73660adSXianjun Jiao git reset --hard 4220d5d24c6c7589fc702db4f941f0632b5ad767 63*b73660adSXianjun Jiao cp ../kernel_boot/kernel_config ./.config 64*b73660adSXianjun Jiao source $XILINX_DIR/SDK/2017.4/settings64.sh 65*b73660adSXianjun Jiao export ARCH=arm 66*b73660adSXianjun Jiao export CROSS_COMPILE=arm-linux-gnueabihf- 67*b73660adSXianjun Jiao make oldconfig && make prepare && make modules_prepare 68*b73660adSXianjun Jiao make -j12 UIMAGE_LOADADDR=0x8000 uImage 69*b73660adSXianjun Jiao make modules 70*b73660adSXianjun Jiaofi 71*b73660adSXianjun Jiao 72*b73660adSXianjun Jiao$OPENWIFI_DIR/user_space/get_fpga.sh $OPENWIFI_DIR 73*b73660adSXianjun Jiao 74*b73660adSXianjun JiaoBOARD_NAME_ALL="zc706_fmcs2 zed_fmcs2 zc702_fmcs2 adrv9361z7035 adrv9361z7035_fmc adrv9364z7020" 75*b73660adSXianjun Jiaofor BOARD_NAME_TMP in $BOARD_NAME_ALL 76*b73660adSXianjun Jiaodo 77*b73660adSXianjun Jiao# if [ -f "$OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/output_boot_bin/BOOT.BIN" ]; then 78*b73660adSXianjun Jiao# echo "Skip the BOOT.BIN generation." 79*b73660adSXianjun Jiao# else 80*b73660adSXianjun Jiao# # Build BOOT.BIN 81*b73660adSXianjun Jiao $OPENWIFI_DIR/user_space/boot_bin_gen.sh $OPENWIFI_DIR $XILINX_DIR $BOARD_NAME_TMP 82*b73660adSXianjun Jiao# fi 83*b73660adSXianjun Jiao dtc -I dts -O dtb -o $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME_TMP/devicetree.dtb $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME_TMP/devicetree.dts 84*b73660adSXianjun Jiao mkdir $SDCARD_DIR/BOOT/$BOARD_NAME_TMP 85*b73660adSXianjun Jiao cp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME_TMP/devicetree.dtb $SDCARD_DIR/BOOT/$BOARD_NAME_TMP 86*b73660adSXianjun Jiao cp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME_TMP/output_boot_bin/BOOT.BIN $SDCARD_DIR/BOOT/$BOARD_NAME_TMP 87*b73660adSXianjun Jiaodone 88*b73660adSXianjun Jiao 89*b73660adSXianjun Jiao# Copy uImage BOOT.BIN and devicetree to SD card BOOT partition 90*b73660adSXianjun Jiaocp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/devicetree.dtb $SDCARD_DIR/BOOT/ 91*b73660adSXianjun Jiaocp $OPENWIFI_DIR/kernel_boot/boards/$BOARD_NAME/output_boot_bin/BOOT.BIN $SDCARD_DIR/BOOT/ 92*b73660adSXianjun Jiaocp $OPENWIFI_DIR/adi-linux/arch/arm/boot/uImage $SDCARD_DIR/BOOT/ 93*b73660adSXianjun Jiao 94*b73660adSXianjun Jiao# build openwifi driver 95*b73660adSXianjun Jiao$OPENWIFI_DIR/driver/make_all.sh $OPENWIFI_DIR $XILINX_DIR 96*b73660adSXianjun Jiao 97*b73660adSXianjun Jiao# Copy files to SD card rootfs partition 98*b73660adSXianjun Jiaosudo mkdir $SDCARD_DIR/rootfs/root/openwifi 99*b73660adSXianjun Jiaosudo find $OPENWIFI_DIR/driver -name \*.ko -exec cp {} $SDCARD_DIR/rootfs/root/openwifi/ \; 100*b73660adSXianjun Jiaosudo cp $OPENWIFI_DIR/user_space/* $SDCARD_DIR/rootfs/root/openwifi/ -rf 101*b73660adSXianjun Jiaosudo wget -P $SDCARD_DIR/rootfs/root/openwifi/webserver/ https://users.ugent.be/~xjiao/openwifi-low-aac.mp4 102*b73660adSXianjun Jiao 103*b73660adSXianjun Jiaosudo mkdir $SDCARD_DIR/rootfs/lib/modules 104*b73660adSXianjun Jiaosudo mkdir $SDCARD_DIR/rootfs/lib/modules/openwifi 105*b73660adSXianjun Jiaosudo find $OPENWIFI_DIR/adi-linux -name \*.ko -exec cp {} $SDCARD_DIR/rootfs/lib/modules/openwifi/ \; 106*b73660adSXianjun Jiaosudo rm $SDCARD_DIR/rootfs/lib/modules/openwifi/{axidmatest.ko,xilinx_dma.ko,adi_axi_hdmi.ko,ad9361_drv.ko} -f 107*b73660adSXianjun Jiao 108*b73660adSXianjun Jiaosudo rm $SDCARD_DIR/rootfs/etc/udev/rules.d/70-persistent-net.rules 109*b73660adSXianjun Jiaosudo cp $OPENWIFI_DIR/kernel_boot/70-persistent-net.rules $SDCARD_DIR/rootfs/etc/udev/rules.d/ 110*b73660adSXianjun Jiao 111*b73660adSXianjun Jiao# Some setup 112*b73660adSXianjun Jiaosudo echo -e "\nauto lo eth0\niface lo inet loopback\niface eth0 inet static\naddress 192.168.10.122\nnetmask 255.255.255.0\n" | sudo tee -a $SDCARD_DIR/rootfs/etc/network/interfaces 113*b73660adSXianjun Jiaosudo echo -e "\nnameserver 8.8.8.8\nnameserver 4.4.4.4\n" | sudo tee -a $SDCARD_DIR/rootfs/etc/resolv.conf 114*b73660adSXianjun Jiaosudo echo -e "\nUseDNS no\n" | sudo tee -a $SDCARD_DIR/rootfs/etc/ssh/sshd_config 115*b73660adSXianjun Jiaosudo echo -e "\nnet.ipv4.ip_forward=1\n" | sudo tee -a $SDCARD_DIR/rootfs/etc/sysctl.conf 116*b73660adSXianjun Jiaosudo chmod -x $SDCARD_DIR/rootfs/etc/update-motd.d/90-updates-available 117*b73660adSXianjun Jiaosudo chmod -x $SDCARD_DIR/rootfs/etc/update-motd.d/91-release-upgrade 118*b73660adSXianjun Jiao 119*b73660adSXianjun Jiaocd $SDCARD_DIR/BOOT 120*b73660adSXianjun Jiaosync 121*b73660adSXianjun Jiaocd $SDCARD_DIR/rootfs 122*b73660adSXianjun Jiaosync 123*b73660adSXianjun Jiao 124*b73660adSXianjun Jiaocd $home_dir 125*b73660adSXianjun Jiao 126*b73660adSXianjun Jiaoumount $SDCARD_DIR/BOOT/ 127*b73660adSXianjun Jiaoumount $SDCARD_DIR/rootfs/ 128