本例程基于SDRPI开发板,在Ubuntu中使用vivado编译openwifi工程,最终生成BOOT.BIN文件。需要拥有安装vivado2021.1版本的ubuntu系统或虚拟机。
首先需要下载openwifi的编译文件,可以在GitHub中搜索openwifi-hw,网址如下所示:https://github.com/open-sdr/openwifi-hw
也可以直接在ubuntu系统中使用git工具下载,使用如下命令:
git clone --recursive https://github.com/open-sdr/openwifi-hw
同时在文件末尾我也会提供下载好的网盘链接。
下载完成后进入openwifi-hw目录,打开命令行窗口。
在命令行中配置vivado的环境变量,这个要根据安装地址进行设置。例如我这里的安装地址在/tools/Xilinx/文件夹中,使用如下命令配置vivado的环境变量:
source /tools/Xilinx/Vivado/2021.1/settings64.sh
然后需要定义一个变量,变量名称为XILINX_DIR,值为vivado的安装目录,例如在这里安装目录为/tools/Xilinx/,使用如下命令设置变量
export XILINX_DIR=/tools/Xilinx
设置变量完成后运行 prepare_adi_lib.sh 脚本,参数为XILINX_DIR,使用如下命令:
./prepare_adi_lib.sh $XILINX_DIR
编译时间有点长,耐心等待编译完成。若编译失败,重新编译几次大概率会通过,下图是我第一次编译失败,直接进行第二次编译。
编译成功后设置开发板名称的变量,使用export命令定义变量名称BOARD_NAME,值为本次实验的硬件平台sdrpi,使用如下命令:
export BOARD_NAME=sdrpi
若使用其他硬件平台,可以在上面下载网址中寻找对应的名称,截图如下所示
例如若使用的是zedborad+ad9361,BOARD_NAME的值为zed_fmcs2。设置好变量后运行prepare_adi_board_ip.sh脚本,参数为XILINX_DIR和OARD_NAME,在命令行输入如下命令:
./prepare_adi_board_ip.sh $XILINX_DIR $BOARD_NAME
运行上面这个条命令后,出现如下所示的界面时由于等待时间很长,可以使用ctrl+c中断此脚本的运行,这个操作不会对结果产生影响。
继续运行get_ip_openofdm_rx.sh脚本,在命令行中运行如下命令:
./get_ip_openofdm_rx.sh
进入工程目录
cd boards/$BOARD_NAME/
运行create_ip_repo.sh脚本,参数为XILINX_DIR
../create_ip_repo.sh $XILINX_DIR
此脚本会自动打开vivado进行配置,不要主动操作打断脚本。
等待脚本运行完成,vivado会回到初始界面,在下方命令行中运行如下命令打开工程。
source ./openwifi.tcl
打开工程后,若需要修改vivado内容在这一步进行。修改完成或无需修改,生成bit文件。
若编译报错,点击system.xdc:31到转跳处,注释此行,如下图所示。若编译成功则无需此步骤。修改完成后保存。先点击Run Synthesis重新编译,在生成bit文件。
导出XSA文件,File-->Export-->Export Hardware...
默认选项下一步到选择保存地址,在当前地址上加 /vitis 并复制全部地址,后面需要用到。默认下一步到完成即可。
打开vitis,Tools-->Launch...
工作空间选择上面复制的地址,启动vitis
创建平台项目
设置名称
选择上面导出的XSA文件,完成创建
选择项目-->编译
到此我们就生成了bit文件和fsbl文件,生成BOOT.BIN文件还需要一个elf文件,这里因为要引导LINUX系统启动,因此是UBOOT,这个UBOOT在ZYNQ里面比较通用的。我们也可以使用OPENWIFI中其他ZYNQ板子的UBOOT来替换。下载命令如下:
git clone --recursive https://github.com/open-sdr/openwifi
下载完成后进入目录:openwifi/kernel_boot/board/sdrpi 可以看到里面有个u-boot.elf文件,复制文件到openwifi-hw目录,创建一个BootFile文件夹,放置生成BOOT.BIN所需的文件。UBOOT文件可以使用我提供的网盘链接中的文件。
进入目录:openwifi-hw/board/sdrpi/openwifi_sdri/openwifi_sdri.runs/impl_1
复制system_top.bit文件到BootFile中,
进入目录:openwifi-hw/board/sdrpi/openwifi_sdri/vitis/fsbl/zynq_fsbl
复制fsbl.elf文件到BootFile中。
打开sdk 生成BOOT.BIN文件:Xilinx-->create...-->zynq...
保存地址选择BootFile-->添加文件-->按顺序添加图中的三个文件-->生成BOOT.BIN文件。
此boot.bin文件可以直接代替openwifi启动盘中的boot.bin文件,关于sdrpi的openwifi的启动盘制作与使用,可以参考如下链接:
https://blog.csdn.net/mcupro/article/details/138193494
提供的链接中sdrpi_openwifi-hw_ok.zip是编译完成后的文件,BootFile文件夹也在其中。openwifi-hw_new.zip是没编译过的文件。
链接:https://pan.baidu.com/s/14frYS1gWJL4wmf5n1CECMA
提取码:11rk