【Zynq】PetaLinux 2021.2构建Zynq7020的固件
赛灵思官方有提供 Zynq 的 Linux 支持包。
系统:Ubuntu 18.04 x86_64
版本:2021.2(参考
ug1144-petalinux-tools-reference-guide.pdf
、Zynq Linux)终端:bash(不建议使用 MobaXterm 工具连接 SSH,可能会导致无法打开配置 GUI,然后一直卡死在那边;Windows 自带的 SSH 可以用,但是在 GUI 的输入中可能看不到退格;推荐使用 Putty)
用户:szc(普通用户,可调用sudo)
安装
安装依赖
1
sudo apt install -y gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential zlib1g:i386 screen pax gzip gawk
前往下载 PetaLinux
下载
PetaLinux 2021.2 安装程序
(2.1 GB)文件名为:
petalinux-v2021.2-final-installer.run
1
2# 校验 我下载的文件MD5校验结果为:fc307268822433258b006b7be02bf78e
md5sum petalinux-v2021.2-final-installer.run(可选)下载 PetaLinux 工具 sstate-cache 工件
考虑到可能每次全新编译都要重新下载文件,非常慢,还是推荐下个完整包,后面编译可以跳过下载过程,会很快
下载
sstate-cache 2021.2
完整包(57.4 GB)文件名为:
downloads_2021.2.tar.gz
1
2
3
4
5# 校验 我下载的文件MD5校验结果为:44d9103360894914a1469046a1ae4d67
md5sum downloads_2021.2.tar.gz
# 解压缩,会解压到当前目录下的 downloads 文件夹中
tar -zxvf downloads_2021.2.tar.gz安装
1
2
3
4sudo chown szc:szc petalinux-v2021.2-final-installer.run
sudo chmod 777 petalinux-v2021.2-final-installer.run
mkdir petalinux
./petalinux-v2021.2-final-installer.run -d petalinux安装过程中,查看的两个文件后按q退出,按y同意
配置 tftp 服务
1
2
3
4
5
6
7
8# 安装依赖
sudo apt install -y tftp-hpa tftpd-hpa xinetd
# 创建工作文件夹
mkdir -p /home/szc/workspace/zynq_petalinux/tftpboot
# 创建客户端配置
sudo vim /etc/xinetd.d/tftp配置如下
1
2
3
4
5
6
7
8
9
10
11
12service tftp
{
disable = no 138
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/szc/workspace/zynq_petalinux/tftpboot -c
per_source = 11
cps = 100 2
}修改服务端配置文件
1
sudo vim /etc/default/tftpd-hpa
将
TFTP_DIRECTORY
的值修改为/home/szc/workspace/zynq_petalinux/tftpboot
然后重启相关服务
1
2
3sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
sudo /etc/init.d/tftpd-hpa restart
创建工程
创建工程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 更新环境变量
source petalinux/settings.sh
echo $PETALINUX
# 创建 Zynq 工程
petalinux-create --type project --template zynq --name linux_proj
# 打开工程目录
cd linux_proj
# 运行清理工程命令,这会清除所有下载的内容和编译的内容
# 用于创建 .petalinux/metadata 文件,防止 git 管理出现问题
petalinux-build -x mrproper
# 初始化 git 本地仓库
git init
# 查看文件跟踪状态
git status
# 初次提交
git add .
git commit -m "Initial commit"*注1:创建的工程里面有默认的git排除文件,可以将整个工程使用git做管理,这边方便跟踪文件修改状态,初始化了git仓库,不做git的也是可以的
*注2:因为默认创建的工程下没有
.petalinux/metadata
文件,所以.petalinux
文件夹在提交时会被删除,导致无法创建工程,所以需要先清理一下工程创建这个文件使用 Vivado 2021.2 创建硬件工程并配置 PetaLinux 工程
创建项目并存放在
../basepl_proj
,工程有以下要求启用一路TTC(必须)
若启用了多个TTC,则只会用到设备树里的第一个
启用DDR,并确保配置正确(必须)
需要至少512MB内存
启用串口(必须)
启用SD卡(可选)
启用以太网(可选)
最后生成 xsa 文件,可以不需要包含 BitStream
1
2# 载入硬件工程并配置项目
petalinux-config --get-hw-description=../basepl_proj找到
Image Packaging Configuration > tftpboot directory
修改为
/home/szc/workspace/zynq_petalinux/tftpboot
确保
Auto Config Settings > [*] Device tree autoconfig
已选中确保
FPGA Manager > [*] Fpga Manager
已选中,启用加载FPGA比特流的能力(可选)上面下载了
sstate-cache
包,可以设置一下增加一下编译速度1
2
3Yocto Settings --->
Add pre-mirror url --->
(file:///home/szc/workspace/zynq_petalinux/downloads) pre-mirror url path注意需要在前面加一个
file://
,不然编译时会报错
然后直接退出保存即可,其他设置编译完再改
全部编译
先全部编译,需要下载很多包,会花不少时间。
1
petalinux-build
使用 Jtag 运行工程
关闭板卡电源
设置启动方式为 JTAG
连接 USB Cable 到工作站
由于非Root用户无法使用 JTAG 工具,这里在
/etc/udev/rules.d
中添加一个规则1
vim /etc/udev/rules.d/52-xilinx-digilent-usb.rules
然后添加以下内容
1
2
3# /etc/udev/rules.d/52-xilinx-digilent-usb.rules
ATTR{idVendor}=="1443", MODE:="777"
ACTION=="add", ATTR{idVendor}=="0403", ATTR{manufacturer}=="Digilent", MODE:="777"保存并退出
然后重新插拔一下 USB Cable
连接 USB TTL 到板卡和普通PC
我将 USB TTL 连接到了我的手提电脑上
打开板卡电源
打开手提电脑上的 终端工具 并连接到串口,波特率 115200
我用的还是 Putty 进行连接的
在工作站上打包预构建镜像
1
petalinux-package --prebuilt --force
在工作站上启动
重新烧写之前需要先复位目标板
1
petalinux-boot --jtag --prebuilt 3
速度较慢,需要等好一会儿
在 串口终端工具中 操作
使用 TFTP 运行(推荐)
使用 TFTP 会比纯 JTAG 方式快很多,但前提是需要先在 uboot 中调通 ETH
参考完成【使用 Jtag 运行工程】前 7 个步骤
使用网线连接板卡到本地局域网
在工作站上设置通过 JTAG 引导到 U-Boot
重新烧写之前需要先复位目标板
1
petalinux-boot --jtag --prebuilt 2
在 串口终端工具中 操作
可以观察到输出了关于
*** ERROR: 'serverip' not set
的错误这是因为没有设置工作站的IP地址导致的
使用命令
ifconfig
查看工作站的IP地址,我这边是192.168.2.3
然后在板卡终端中操作
1
2
3
4
5
6
7
8
9
10
11# 查看设置
print serverip
# 设置 TFTP 服务器 IP 地址 并保存环境变量
setenv serverip 192.168.2.3;saveenv
# 获取引导固件 并 引导
pxe get;pxe boot
### 可以合成一句话
setenv serverip 192.168.2.3;pxe get;pxe boot然后就启动了
不过这种方式,每次通过 JTAG 启动就没了
serverip
的环境变量可以考虑将 uboot 放到 SD 卡或烧到 spi flash 中
使用SD卡启动
创建 BOOT.BIN
1
petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --u-boot --force
将
images/linux
目录下或 TFTP 目录下的BOOT.BIN
、boot.scr
和image.ub
放入 SD 卡的 FAT32 分区下将
rootfs.tar.gz
解压到 SD 卡的 ext4 分区将 SD 卡插入板卡
将板卡设置为 SD 卡启动
板卡上电
在 串口终端工具中 操作
*注1:默认启动的 u-boot 中不会启动 dhcp 分配,需要输入 dhcp 才能分配到 ip 地址
定制系统
SSH 服务器
默认自带了 SSH 服务器,默认密码是
root
OpenAMP(Linux + 裸机)
参考本站的
【Zynq】PetaLinux裸机配置OpenAMP
Petalinux 系统中相关命令参考
烧写 FPGA
使用参考:Solution Zynq PL Programming With FPGA Manager
他只支持烧写 bin 格式的 bit 文件
bit 转成 bin
在工作站上执行
1
bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin
Full_Bitstream.bif 的内容如下
1
2
3
4all:
{
design_1_wrapper.bit /* Bitstream file name */
}使用 sysfs 烧写
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 设置标志
echo 0 > /sys/class/fpga_manager/fpga0/flags
# 创建文件夹,这个文件夹是驱动程序默认加载固件的地方
mkdir -p /lib/firmware
# 将固件复制到该文件夹
cp design_1_wrapper.bit.bin /lib/firmware/
# 开始加载固件,加载成功会立刻开始运行,支持重复加载
echo design_1_wrapper.bit.bin > /sys/class/fpga_manager/fpga0/firmware
# 查看是否加载成功,operating 就是成功且在运行了
cat /sys/class/fpga_manager/fpga0/state
睡眠
1
2
3
4
5
6
7
8# 查看支持哪几种睡眠方式
cat /sys/power/state
# IO设备低功耗,处理器进入空闲状态
echo "freeze" > /sys/power/state
# 进入睡眠,将状态保存到内存然后停止运行
echo "mem" > /sys/power/state这几种睡眠方式并不能停止 PL 端的工作
【Zynq】PetaLinux 2021.2构建Zynq7020的固件