如何编译Pluto SDR固件plutosdr-fw得到SD卡固件和交叉编译用的sysroot

Pluto SDR是基于AD9363和Zynq7010/20的架构,其中Zynq具有双核Cortex A9,可以独立运行Linux。事实上,正常运作的Pluto SDR就是一直在运行Linux的,只不过是定制过的精简的嵌入式Linux,这个固件官方是直接提供的,本文就演示如何从源代码进行编译,得到用于Pluto SDR交叉编译的sysroot环境,并且可以自行调整Pluto SDR运行的Linux功能(默认的固件预装很少,有些Linux通常预装的库和命令都没有)。

声明:本文使用固件分支为v0.38,使用的Vivado/Vitis版本为2022.2,系统版本为Ubuntu20.04 LTS,内核版本为5.15-62,没有安装其他任何额外的软件或运行库,使用全新系统实测没有问题。若出现了本文没有涵盖的情况请参考官方安装文档

环境准备

拉取固件源码

首先当然是拉取官方提供的固件源码

git clone --recursive https://github.com/analogdevicesinc/plutosdr-fw.git

注意其中的--recursive一定要有,否则拉取到的是不完整的,该仓库还引用了Linux kernel、Buildroot等的仓库,加了这个参数才能够完整的拉取下来,文件较大,约4.3GB。
拉取后运行如下命令查看拉取到的分支需要用什么版本的Vivado:

cd plutosdr-fw
grep -i REQUIRED_VIVADO_VERSION $(find ./ -name "adi*.tcl") | grep set

若输出的类似于下面这种,则代表需要Vivado 2022.2版本的Vitis。

set required_vivado_version "2022.2"

安装Vivado&Vitis

使用此链接下载Vitis 2022.2,或者在这个网页中选择2022.2版本,下载Linux版的:
install
下载得到的是一个在线安装器,并非离线安装包(完整安装包大小非常惊人),为其分配执行权限,然后运行:

chmod +x ./Xilinx_Unified_2022.2_1014_8888_Lin64.bin
./Xilinx_Unified_2022.2_1014_8888_Lin64.bin

然后安装器就会启动。登录Xilinx网站注册的账号后,安装选项选择第一个Vitis:
vitis
然后组件选择如图即可,其他组件按需选择:
select
安装路径建议选择在/opt/Xilinx/,若提示没有权限,则使用root权限创建并赋权:

sudo mkdir /opt/Xilinx/
sudo chmod 777 /opt/Xilinx/

这样就可以顺利下一步,等待下载安装完毕即可。

安装运行库

然后安装一些待会需要的运行库:

sudo apt-get install git build-essential ccache device-tree-compiler dfu-util fakeroot help2man libncurses5-dev libssl1.0-dev mtools rsync u-boot-tools bc python cpio zip unzip file wget libmpc-dev libgmp-dev

设置环境变量

直接输入下列命令即可:

export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/opt/Xilinx/Vitis/2022.2/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin
export VIVADO_SETTINGS=/opt/Xilinx/Vivado/2022.2/settings64.sh

如果刚才安装的路径并非/opt/Xilinx/,将第二句和第三句修改为实际的安装路径即可。

开始编译

确保自己连接到了互联网,进入到源码根目录,运行:

make

就会开始执行,命令行会有非常多的输出,等待大约半小时,没有报错地结束,然后运行:

ls -AGhl build

若显示类似于下列这种文件结构,则编译成功(可以确认total总文件大小是否为543MB)。

total 543M
-rw-rw-r-- 1 kloz  294 415 21:23 aie_primitive.json
-rw-rw-r-- 1 kloz  14M 415 21:24 ant.dfu
-rw-rw-r-- 1 kloz  14M 415 21:24 ant.frm
-rw-rw-r-- 1 kloz   33 415 21:24 ant.frm.md5
-rw-rw-r-- 1 kloz  14M 415 21:24 ant.itb
-rw-rw-r-- 1 kloz  23M 415 21:24 antsdr-fw-v0.38-dirty.zip
-rw-rw-r-- 1 kloz 696K 415 21:24 antsdr-jtag-bootstrap-v0.38-dirty.zip
-rw-rw-r-- 1 kloz   69 415 21:24 boot.bif
-rw-rw-r-- 1 kloz 510K 415 21:24 boot.bin
-rw-rw-r-- 1 kloz 510K 415 21:24 boot.dfu
-rw-rw-r-- 1 kloz 639K 415 21:24 boot.frm
-rw-rw-r-- 1 kloz 460M 415 21:24 legal-info-v0.38-dirty.tar.gz
-rw-rw-r-- 1 kloz 636K 415 21:07 LICENSE.html
-rw-rw-r-- 1 kloz 535K 415 21:23 ps7_init.c
-rw-rw-r-- 1 kloz 536K 415 21:23 ps7_init_gpl.c
-rw-rw-r-- 1 kloz 4.2K 415 21:23 ps7_init_gpl.h
-rw-rw-r-- 1 kloz 3.6K 415 21:23 ps7_init.h
-rw-rw-r-- 1 kloz 2.8M 415 21:23 ps7_init.html
-rw-rw-r-- 1 kloz  36K 415 21:23 ps7_init.tcl
-rw-r--r-- 1 kloz 6.4M 415 21:13 rootfs.cpio.gz
drwxrwxr-x 6 kloz 4.0K 415 21:24 sdk
-rw-rw-r-- 1 kloz 2.4M 415 21:23 system_top.bit
-rw-rw-r-- 1 kloz 835K 415 21:23 system_top.xsa
-rwxrwxr-x 1 kloz 473K 415 21:24 u-boot.elf
-rw-rw---- 1 kloz 128K 415 21:24 uboot-env.bin
-rw-rw---- 1 kloz 129K 415 21:24 uboot-env.dfu
-rw-rw-r-- 1 kloz 7.7K 415 21:24 uboot-env.txt
-rwxrwxr-x 1 kloz 4.4M 415 21:06 zImage
-rw-rw-r-- 1 kloz  24K 415 21:13 zynq-ant.dtb

获得SD卡固件

如果需要SD卡能用的固件,则运行:

make sdimg

在build_sdimg目录下可以看到五个文件:
sdimg
将他们拷贝到SD卡插入到设备上,跳线跳到SD启动,即可使用自己刚刚编译好的固件启动Pluto SDR。

获得交叉编译用的sysroot

/buildroot/output/staging/文件夹或/plutosdr-fw/buildroot/output/host/arm-buildroot-linux-gnueabihf/sysroot/下即为板载Linux的根目录:
sysroot
可以以此目录为基准来编译代码,使编译后的文件可以在Pluto SDR上脱机运行。具体教程可以参考我的这篇文章

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值