PYNQ 镜像编译教程,用于非官方的开发板

序言

由于 PYNQ 官方和一些开发者只提供了部分开发板的 PYNQ 镜像,但是许多第三方生产的开发板并没有提供对应的 PYNQ 镜像,或者所提供的镜像版本过于古老,所以本文章出于次目的介绍了如何为第三方 ZYNQ 开发板编译对应的 PYNQ 镜像。

PYNQ 官网提供的一些开发板的镜像文件:

BoardSD card imagePrevious versionsDocumentationBoard webpage
PYNQ-Z2v3.0.1v2.7 v2.6PYNQ setup guideTUL Pynq-Z2
PYNQ-Z1v3.0.1v2.7 v2.6PYNQ setup guideDigilent Pynq-Z1
PYNQ-ZUv3.0.1v2.7 v2.6GitHub project pageTUL PYNQ-ZU
Kria KV260*Ubuntu 22.04Kria PYNQ setupXilinx Kria KV260
Kria KR260*Ubuntu 22.04Kria PYNQ setupXilinx Kria KR260
ZCU104v3.0.1v2.7 v2.6PYNQ setup guideXilinx ZCU104
RFSoC 2x2v3.0.1v2.7 v2.6RFSoC-PYNQXUP RFSoC 2x2
RFSoC 4x2v3.0.1v2.7RFSoC-PYNQXUP RFSoC 4x2
ZCU111v3.0.1v2.7 v2.6RFSoC-PYNQXilinx ZCU111
ZCU208v3.0.1RFSoC-PYNQXilinx ZCU208
Ultra96V2v3.0.1v2.7 v2.6Avnet PYNQ webpageAvnet Ultra96V2
Ultra96 (legacy)v3.0.1v2.7 v2.6See Ultra96V2See Ultra96V2
ZUBoard 1CGv3.0.1GitHub project pageAvnet ZUBoard 1CG
TySOM-3-ZU7EVv3.0.1v2.7GitHub project pageAldec TySOM-3-ZU7EV
TySOM-3A-ZU19EGv3.0.1v2.7GitHub project pageAldec TySOM-3A-ZU19EG

准备工作:软件安装及环境配置

PYNQ 镜像的编译工作需要在 Ubuntu 系统中完成,软件安装及环境编译过程中会遇到许多问题,为了避免出现重大问题导致系统损坏,所以本文建议在虚拟机中安装 Ubuntu 系统来搭建编译 PYNQ 镜像所需的环境,需要准备的软件有VMware Workstation Pro:虚拟机 VMware Workstation Pro、Ubuntu系统镜像、VMware Workstation Pro VMware Workstation Pro、Vitis (包含 Vivado)、Petalinux 以及 PYNQ 官方仓库。

Xilinx 官方手册中描述了安装 Vitis 软件的系统要求,并且 PYNQ 官方文档中的“PYNQ SD Card image”也明确描述了 PYNQ 版本对应 Ubuntu 系统版本和所需的 Vitis 和 Petalinux 的版本要求,所以本文采用的 Ubuntu 20.04 系统和 PYNQ v3.0.1(PYNQ 官方文档更新不及时,所以最新版本还停留在 v3.0,但是 PYNQ 官网上发布的最新镜像版本都是v3.0.1,所以本文也采用该版本),以及 Vitis 2022.1 和 Petalinux 2022.1

建议使用的 Ubuntu 系统版本:

Supported OSCode name
Ubuntu 18.04Bionic
Ubuntu 20.04Focal

PYNQ 版本对应使用的 Vitis 和 Petalinux 版本:

Release versionXilinx Tool Version
v1.42015.4
v2.02016.1
v2.12017.4
v2.22017.4
v2.32018.2
v2.42018.3
v2.52019.1
v2.62020.1
v2.72020.2
v3.02022.1

虚拟机 VMware Workstation Pro 和 Ubuntu 系统的安装

目前 VMware Workstation Pro 17 已经对个人用户完全免费,所以我们可以直接下载安装使用,具体的安装过程不再本文中过多赘述,安装可以参考这篇博客:VMware Workstation Pro 个人免费版下载及安装指南

Ubuntu 20.04 的系统镜像可以从 USTC 的镜像网站中下裁:https://mirrors.ustc.edu.cn/ubuntu-releases/20.04/

由于 Vitis 软件非常庞大,Ubuntu 虚拟机安装时需要分配至少 400GB 的硬盘空间,系统安装好了以后需要在系统设置中将系统休眠时间改为 Never,防止系统自动休眠。

然后由于后续的编译时间很长,编译过程中执行的几次 sudo 命令需要输入密码才能继续进行,所以建议关闭 sudo 命令需要输入密码,操作如下,先切换到 root 用户,然后编辑 /etc/sudoers 文件

su root # root 用户默认密码为:root
vim /etc/sudoers

在文件末尾补充下列代码 其中 xilinx 为用户名,需要修改为自己电脑的用户名

xilinx ALL=(ALL) NOPASSWD: ALL

最后还建议安装上网软件(Clash Verge 或其他,本文不介绍该软件的安装和使用过程),确保在 PYNQ 镜像编译环境配置和编译过程中能够正常下载所需的软件包。

PYNQ 编译环境配置

安装 git

sudo apt install git

克隆 PYNQ 仓库

git clone https://github.com/Xilinx/PYNQ.git

进入 PYNQ 目录,并切换到 v3.0.1 版本

cd PYNQ
git checkout origin/image_v3.0.1

安装 ncurses-dev

sudo apt-get install ncurses-dev

用 Vim 或文本编辑器打开 PYNQ 目录下 sdbuild//scripts/setup_host.sh 脚本文件,找到脚本文件中下载 qemu 的所在的代码,并作如下替换,原因是原有的网站可能无法访问下载 qemu,需要替换其他网站下载。

该问题目前 PYNQ 的 master 分支已经修复了该问题,但 v3.1 及以下版本的 PYNQ 仍然存在这个错误,如果你使用的是 v3.1 及以下版本的 PYNQ,仍然需要手动解决这个问题。

# wget http://wiki.qemu-project.org/download/qemu-$qemuver.tar.bz2
wget https://download.qemu.org/qemu-$qemuver.tar.bz2

执行 sdbuild/scripts/setup_host.sh 脚本文件进行编译环境配置

./sdbuild/scripts/setup_host.sh

执行完成后会在 ~/.profile 末尾自动添加环境变量:

如果没有自动添加环境变量,那么需要手动在 ~/.profile 末尾添加环境变量

PATH=/opt/qemu/bin:/opt/crosstool-ng/bin:$PATH

最后可以执行 sdbuild/scripts/check_env.sh 脚本文件,检查环境是否配置成功

./sdbuild/scripts/check_env.sh 

Petalinux 2022.1 安装

在 Xilinx 官方下载 Petalinux 2022.1 安装包:Downloads

下载需要登录 AMD 账户,没有的话需要注册一个,建议使用国外的邮箱注册

登录之后需要填写姓名和住址等信息,需要注意的是这里的填写的信息如果涉及到国内地址,或者国内人名或拼音的话将无法下载,所以需要填写美国的地址信息,那么可以在这个网站美国地址生成器 - 美国身份生成器 - 美国信用卡生成器中获取随机的美国地址,然后按照对应位置填写即可下载。

安装 tftp 和 tftpd-hpa

sudo apt install tftp
sudo apt install tftpd-hpa

切换到主目录,然后新建目录 petalinux,作为 Petalinux 的安装路径,把下载好的 Petalinux 安装包放入这个 petalinux 目录

cd
mkdir petalinux && cd petalinux

修改  Petalinux 安装包权限为 755

sudo chmod 755 petalinux-v2022.1-04191534-installer.run

然后输入安装命令,开始安装 Petalinux ,安装过程中需要同意协议内容,安装提示输入 y 即可

./petalinux-v2022.1-04191534-installer.run

安装完成之后需要把 Petalinux 的路径加入环境变量,打开主目录下的 .bashrc 文件,在末尾添加

source ~/petalinux/settings.sh

然后重启终端或者输入以下命令即可完成 Petalinux 安装和环境变量配置

source ~/.bashrc

最后删除 Petalinux 安装包

rm petalinux-v2022.1-04191534-installer.run

Vitis 2022.1 安装

在 Xilinx 官方下载 Vitis 2022.1 安装包:Downloads,这里选择 Xilinx Unified Installer 2022.1 SFD 这个离线安装包,同意下载之前需要登录 AMD 账户和填写美国地址信息,这部分内容在前面安装 Petalinux 时已经描述了

注意:不要在虚拟机系统中下载 Vitis 2022.1 安装包,我们需要在 Windows 主机系统中下载 Vitis 2022.1 安装包,因为 Vitis 2022.1 安装包非常大,如果在虚拟机系统中下载安装包,然后再解压出来,最后再安装,这会占用大量的虚拟机系统硬盘容量,甚至完全占用系统容量导致系统崩溃。

然后在 VMware Workstation Pro 中点击右上角的 VM,再点击 Settings,打开虚拟机系统的设置界面

然后将主机中下载 Vitis 2022.1 安装包的路径添加到共享文件夹中,比如我这里下载 Vitis 2022.1 安装包的路径为:D:\Downloads,那么我就将 D:\Downloads 添加到共享文件夹中

添加完共享文件夹之后,就可以在虚拟机系统中的 /mnt/hgfs/ 路径下看到添加进来的共享文件夹 Downloads,在 Downloads 目录就有下载好的 Vitis 2022.1 安装包

然后在共享文件夹路径下解压 Vitis 2022.1 安装包

cd /mnt/hgfs/Downloads/
tar -zxvf Xilinx_Unified_2022.1_0420_0327.tar.gz

解压完成后,在开始安装前需要先安装一下 libtinfo5,以防止出现下面这样安装失败的问题:ubuntu 20.4 安装vitis2021.1, 安装到这里就不动了。安装了2次,都是同一个现象,请问是怎么回事?

sudo apt install libtinfo5

进入安装包目录,执行安装命令,即可打开 Vitis 2022.1 安装界面

cd Xilinx_Unified_2022.1_0420_0327
./xsetup

打开界面后首先会弹出更新提示,点击 Continue,不更新并继续安装

选择 Vitis,点击 Next

这里默认会勾选所有的器件,但是我们并不需要所有的器件,将不需要的器件取消勾选,保留需要的器件即可,然后点击 Next

这里全部勾选 I Agree,然后点击 Next

确认安装信息,特别是注意左下方的硬盘空间是否充足,然后点击 Next

点击 Yes,确认创建安装路径

最后确然安装信息,点击 Install 开始安装,耐心等待安装完成

安装完成,关闭窗口

然后配置环境变量,将这行代码添加到 ~/.bashrc 的末尾

source /tools/Xilinx/Vitis/2022.1/settings64.sh

最后再安装 libcanberra-gtk-module,不安装这个包的话,Vivado 启动后可能会报错

sudo apt install libcanberra-gtk-module

准备开发板硬件相关文件

需要准备的文件介绍

软件安装及环境配置完成之后,还需要准备开发板硬件对应的比特流文件,开始之前我们先看一下 PYNQ 仓库目录下的 boards 文件夹:

boards 目录下的 Pynq-Z1、Pynq-Z1 和 ZCU104 三个文件夹是 PYNQ 官方提供的开发板编译 PYNQ 镜像所需的文件,我们可以使用 tree 命令查看任意文件夹,以 ZCU104 为例,在 boards 路径下打开终端输入:

tree ZCU104/

输出如下:

ZCU104/
├── base
│   ├── base.py
│   ├── base.tcl
│   ├── build_bitstream.tcl
│   ├── build_ip.tcl
│   ├── check_timing.tcl
│   ├── __init__.py
│   ├── makefile
│   ├── notebooks
│   │   ├── board
│   │   │   ├── asyncio_buttons.ipynb -> ../../../../Pynq-Z1/base/notebooks/board/asyncio_buttons.ipynb
│   │   │   └── register_map_intro.ipynb
│   │   ├── microblaze -> ../../../Pynq-Z1/base/notebooks/microblaze
│   │   ├── pmod -> ../../../Pynq-Z1/base/notebooks/pmod
│   │   └── video -> ../../../Pynq-Z1/base/notebooks/video
│   └── vivado
│       └── constraints
│           └── base.xdc
├── notebooks
│   └── common
│       └── zcu104_pmbus.ipynb
├── packages
│   ├── boot_leds
│   │   ├── boot.py
│   │   └── pre.sh
│   └── sensorconf
│       ├── pre.sh
│       └── zcu104.conf
├── petalinux_bsp
│   └── meta-user
│       └── recipes-bsp
│           ├── device-tree
│           │   └── files
│           │       └── system-user.dtsi
│           └── u-boot
│               ├── files
│               │   ├── bsp.cfg
│               │   └── ethernet.cfg
│               └── u-boot-xlnx_%.bbappend
└── ZCU104.spec

20 directories, 20 files

可以看到 ZCU104 路径下有非常多的文件,但是我们并不需要这么多文件,那么我们来看一下我们需要准备的文件有哪些,以我准备好的 zynq_pi 文件夹为例,这里的 zynq_pi 是我们定义的开发板的名字,zynq_pi 路径下的文件结构如下:

zynq_pi
├── base
│   ├── base.bit
│   ├── base.hwh
│   ├── base.py
│   └── base.xsa
├── petalinux_bsp
│   └── hardware_project
│       └── base.xsa
└── zynq_pi.spec

3 directories, 6 files

首先是 zynq_pi\base 路径下的 4 个文件,其中 base.py 是从 Pynq-Z1、Pynq-Z1 和 ZCU104 三个目录下任意一个目录中相同路径下复制出来的,其余三个文件 base.bit、base.hwh 和 base.xsa 是 Vivado 工程生成的开发板对应的硬件文件,稍后我们会介绍如何生成这三个文件。 zynq_pi\petalinux_bsp\hardware_project 这个路径下的 base.xsa 是从 zynq_pi\base 路径下复制过来的。最后 zynq_pi.spec 文件描述了针对该开发板的各种配置和文件路径,文件内容如下:

# Copyright (C) 2022 Xilinx, Inc
# SPDX-License-Identifier: BSD-3-Clause

ARCH_zynq_pi := aarch64
BSP_zynq_pi := 
BITSTREAM_zynq_pi := base/base.bit
FPGA_MANAGER_zynq_pi := 1

STAGE4_PACKAGES_zynq_pi := xrt pynq ethernet boot_leds 

第一行 ARCH_zynq_pi := aarch64 描述了开发板搭载的 ZYNQ 芯片的处理器内核架构,根据官方文档中的描述,Zynq7000系列这里需要填写为 arm,MPSoC 系列需要填写为 aarch64。

第二行 BSP_zynq_pi := 为开发板 bsp 文件的路径,一般我们自己的开发板没有这个文件,所以这里留空,而 bsp 文件会在编译 PYNQ 镜像的时候通过 zynq_pi\petalinux_bsp\hardware_project 这个路径下的 base.xsa 文件生成。

第三行 BITSTREAM_zynq_pi := base/base.bit 指定了比特流文件的路径。

第四行 FPGA_MANAGER_zynq_pi := 1 指定了开发板上电后是否自动加载比特流文件到 FPGA  中,当设置为 0 时,开发板上电以后不自动加载比特流文件到 FPGA  中,需要手动加载比特流文件到 FPGA  中,当设置为 0 时,开发板上电以后将会自动加载比特流文件到 FPGA  中。

最后一行 STAGE4_PACKAGES_zynq_pi := xrt pynq ethernet boot_leds 指定了需要安装的软件包,其中 xrt、pynq 和 ethernet 这三个是必须的,也可以根据需要参考其他三个自带的开发板文件夹中的 spec 文件填写需要的软件包。

注意:spec 文件名以及文件中的变量名后缀"zynq_pi"需要和开发板文件夹的命名保持一致。

使用 Vivado 搭建硬件工程生成需要的文件

在终端中输入 vivado,打开 Vivado 图形界面

vivado

点击 Create Project 创建工程

输入工程名称 zynq_pi

默认创建 RTL Project,点击 Next

不需要添加源文件,点击 Next

不需要添加约束文件,点击 Next

选择你的开发板搭载的芯片型号,点击 Next

创建完工程后,需要先导入 License 文件,点击右上角的 Help --> Manage License

然后点击 Load LIcense,再点击 Copy License 导入 Vivado 的 License 文件。vivado License导入方法与资源获取

在右侧栏点击 Create Block Design

填写 Design name 为 system_ps,点击 OK

点击中间的 + ,搜索 zynq 并添加

zynq IP 的配置内容一般由开发板厂家提供,如果没有的话需要搭配开发板的硬件原理图进行配置外设,由于每个开发板对应的硬件不同,具体的配置过程也不相同,所以这里就不描述具体是如何配置的了,可以参考开发板厂家提供资料和例程进行配置。

配置完成后为 system_ps 创建 HDL Wrapper

然后点击右下角的 Generate Bitstream 生成比特流文件

Number of jobs 选择最高,然后点击 OK

等待比特流文件生成完成之后,点击右上角的 File --> Export --> Export Hardware

点击 Next

这里需要选择包含比特率,然后点击 Next,最后点击 Finish 导出硬件

然后按照上一节内容介绍的文件结构,在 PYNQ 仓库的 boards 路径下打开终端新建目录zynq_pi/base 和 zynq_pi/petalinux_bsp/hardware_project

mkdir -p zynq_pi/base
mkdir -p zynq_pi/petalinux_bsp/hardware_project

从其他的开发板文件夹中复制 base.py 和 .spec 文件到 zynq_pi目录下的相同路径,按照上一节的要求修改 .spec 文件的文件名为 zynq_pi.spec,修改内容为

# Copyright (C) 2022 Xilinx, Inc
# SPDX-License-Identifier: BSD-3-Clause

ARCH_zynq_pi := aarch64
BSP_zynq_pi := 
BITSTREAM_zynq_pi := base/base.bit
FPGA_MANAGER_zynq_pi := 1

STAGE4_PACKAGES_zynq_pi := xrt pynq ethernet boot_leds 

在前面 Vivado 创建的工程路径下查找 *.bit *.xsa *.hwh 这三个文件,并复制到 zynq_pi/base 路径下,可以用这条命令完成:

find ~/Desktop/zynq_pi -type f -regex '.*\.\(bit\|xsa\|hwh\)$' -exec cp {} ./zynq_pi/base \;

然后在将这三个文件重命名为 base.bit、base.xsa、base.hwh

cd zynq_pi/base && for ext in bit xsa hwh; do mv *.$ext base.$ext; done

最后在再把 base.xsa 复制一份到 petalinux_bsp/hardware_project 路径下

cp base.xsa ../petalinux_bsp/hardware_project

zynq_pi 路径下的文件如下所示:

zynq_pi
├── base
│   ├── base.bit
│   ├── base.hwh
│   ├── base.py
│   └── base.xsa
├── petalinux_bsp
│   └── hardware_project
│       └── base.xsa
└── zynq_pi.spec

3 directories, 6 files

编译 PYNQ 镜像

这个时候理论上我们需要的文件已经准备完成了,可以开始我们的 PYNQ 镜像编译工作,但是为了减少编译时间,PYNQ 提供了与开发板硬件无关的预编译的 PYNQ 文件系统和预编译的 PYNQ 源码,这两个文件可以在 PYNQ 官网下载:PYNQ supported boards and PYNQ pre-built images | PYNQ

根据板子上 ZYNQ 芯片的处理器内核架构选择需要的预编译文件系统,Zynq7000 系列选择 PYNQ rootfs arm v3.0.1,MPSoC 系列选择 PYNQ rootfs aarch64 v3.0.1,以及预编译的 PYNQ 源码 Prebuilt PYNQ source distribution binary v3.0.1

将下载好的这两个文件放入 PYNQ 仓库 sdbuild/prebuild 路径下,并分别重命名为pynq_rootfs.aarch64.tar.gz(如果是 arm 架构就重命名为 pynq_rootfs.arm.tar.gz)和 pynq_sdist.tar.gz

注意:目前 PYNQ 官方下载的预编译的 PYNQ 源码文件是 .gz 格式文件,而不是 .tar.gz 格式文件,目前还没被修复,所以我们要将这个文件进行重新打包,如果你下载下来的文件是tar.gz 格式文件,那么可以跳过这部分

# 解压缩 .gz 文件:
gunzip filename.gz    # 这将生成一个名为 filename 的文件。

# 创建 .tar 文件:
tar -cvf filename.tar filename    # 这将创建一个名为 filename.tar 的 tar 包含文件。

# 压缩 .tar 文件:
gzip filename.tar    # 这将生成一个名为 filename.tar.gz 的文件。

在 PYNQ 仓库下的 sdbuild 路径下打开终端,输入编译以下命令开始编译,其中 zynq_pi 为 boards 路径下我们准备的文件夹名称

make BOARDS=zynq_pi

如果编译顺利完成的话,在 sdbuild/output 目录下将会得到编译完成的镜像文件:zynq_pi-3.0.1.img

但是在编译过程中大概率会因为网络问题无法下载 sstate-cache 而导致编译失败,即使能够正常下载 sstate-cache,下载过程也消耗了大量的编译时间,所以建议执行一下这一步操作:

解决办法是在编译前先下载好该文件,打开 Petalinux 的下载页面 依次点击 Archive --> 2022.1 

然后翻到页面下方,找到 PetaLinux Tools sstate-cache Artifacts - 2022.1 ,根据需要的内核架构选择 aarch64 sstate-cache 或者 arm sstate-cache 进行下载

下载好了以后使用 tar 命令进行解压

tar sstate_aarch64_2022.1_04190222.tar.gz

然后在我们之前准备的 zynq_pi 文件夹的 petalinux 路径下创建文件夹 meta-user/conf

mkdir -p meta-user/conf

在 conf 目录下创建文件 petalinuxbsp.conf ,然后在 petalinuxbsp.conf 中配置解压出来的 sstate-cache 的路径

SSTATE_DIR = "/home/xilinx/aarch64"

这时候再执行编译命令,就不会出现无法下载 sstate-cache 的问题了,同时也能省去每次编译下载 sstate-cache 的时间。

编译完成之后,在 sdbuild/output 目录下会生成编译完成后的 PYNQ 镜像文件:zynq_pi-3.0.1.img,将镜像文件复制到 Windows 系统中,使用 Win32 Disk Imager 或者 balenaEtcher 将镜像烧录到 SD 卡中,然后将烧录完成的 SD 卡插入开发板,并将开发板的 BootMode 设置为 SD 卡启动,连接上串口,在 MobaXterm 中打开对应的端口号,波特率设置为 115200,开发板上电后即可进入安装了 PYNQ 的 Ubuntu 系统:

一些存在的问题和解决方法

镜像编译成功后,开发板上电无法进入系统:Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,10)

这个问题的出现的原因很复杂,一位大佬的博客中对这个问题进行了描述:EdgeBoard 的 PYNQ 移植 - Haozhe Zhu's Blog

这里我仅针对我遇到的问题提供一些理解,一个原因是由于 SD 卡的写保护功能导致系统无法启动,在大佬的博客中描述中,这个问题是由于 Vivado 创建工程时开启了 SD 卡槽的写保护引脚引起的,即在配置 Zynq 时勾选了 SD 配置中的 WP 引脚,但是开发板 PCB 中却没有使用到这个引脚。

所以按理来说这个问题的解决方法是取消勾选 WP 写保护引脚,然后重新生成比特流文件再次编译即可解决。但是事实并非如此,实际上就算取消勾选了  WP 写保护引脚,重新编译后的镜像文件还是会出现这样的问题,所以根据大佬博客中的描述,这可能是 petalinux 的一个 bug,解决方法就是编写设备树,禁用 SD 卡的写保护功能,具体操作就是在 zynq_pi/petalinux_bsp 目录下新建路径 meta-user/recipes-bsp/device-tree/files,然后在 files 目录下创建设备树文件 system-user.dtsi 

mkdir -p meta-user/recipes-bsp/device-tree/files
cd  meta-user/recipes-bsp/device-tree/files
touch system-user.dtsi

然后在 system-user.dtsi 文件中填写以下内容,需要注意的是,这里的 sdhci0 是因为在我的开发板中 SD 卡槽是接在 SD 0 上的,如果你的开发板上的 SD 卡槽是接在 SD 1 上的话,则需要把 sdhci0 改为 sdhci1。

/include/ "system-conf.dtsi"
/ { 
};

&sdhci0 {
    status = "okay";
    max-frequency = <50000000>;
    no-1-8-v; 
    disable-wp; 
}

另外一个导致这个问题的原因是由于 PYNQ 镜像的编译过程中默认认定 SD 卡槽接在 SD 0 上,d大部分的开发板也是的 PCB 也是这么配置的,将 SD 卡槽接在 SD 0 上,而 EMMC 接在 SD 1 上,但是也有一些开发板是反过来的,也就是将 EMMC 接在 SD 0 上,而 SD 卡槽接在 SD 1 上。因此,如果是这样的话,开发板在上电之后首先会正常进入 SD 卡启动,如下图所示,但是在上电启动后不久,系统会由于 PYNQ 镜像编译时的配置,导致后续启动位置跳转到接在 SD 0 上的 EMMC,EMMC 上没有预先烧录系统的话,那么将会出现前面提到的报错信息:Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,10),但是如果 EMMC 上实现烧录了系统的话,则会进入 EMMC 中的系统,也是就出现了一个奇怪的现象,明明设置了 BootMode 是从 SD 卡启动,串口打印出来的启动信息也是 Bootmode:SD_MODE,但是实际确启动了 EMMC 上的系统。

这个问题的解决方法大佬也在自己的博客中进行了描述,具体操作就是修改 sdbuild/boot/meta-pynq/recipes-bsp/device-tree/files 目录下的 pynq_bootargs.dtsi 文件,将其中的 mmcblk0p2 修改为 mmcblk1p2,再将 sdbuild 目录下的 Makefile 文件中的 mmcblk0p2 修改为 mmcblk1p2,然后重新编译镜像。

/ {
	chosen {
		bootargs = "root=/dev/mmcblk1p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 uio_pdrv_genirq.of_id=\"generic-uio\" clk_ignore_unused";
		pynq_board = "Unknown";
	};
};

Problem 1:执行 scripts/setup_host.sh 出现报错:configure: error: curses library not found

解决方法:

安装 ncurses-dev

sudo apt-get install ncurses-dev

sdbuild/scripts/setup_host.sh error curses library not found · Issue #1421 · Xilinx/PYNQ · GitHub

Problem 2:执行 scripts/setup_host.sh 无法下载:qemu

连接不上http://wiki.qemu-project.org 导致以下命令无法下载qemu

wget <http://wiki.qemu-project.org/download/qemu-$qemuver.tar.bz2>

解决方法:

更换其他的源进行下载

# wget <http://wiki.qemu-project.org/download/qemu-$qemuver.tar.bz2>
wget <https://download.qemu.org/qemu-$qemuver.tar.bz2>

Problem 3:编译 pynq 镜像出现报错:make: *** [Makefile:372: qemu_check_aarch64] Error 1

环境变量中的qemu版本与scripts/setup_host.sh中安装的qemu版本不对应,scripts/setup_host.sh 执行后未能自动添加环境变量,需要手动添加环境变量

解决方法:

将环境变量添加到 ~/.profile 结尾

PATH=/opt/qemu/bin:/opt/crosstool-ng/bin:$PATH

或者执行

export PATH=/opt/qemu/bin:/opt/crosstool-ng/bin:$PATH

Pynq 3.0 fails quemu version check - Support - PYNQ

Problem 4:Petalinux 环境变量报错:WARNING: /bin/sh is not bash! - No tftp server found

解决方法:

安装 tftp 和 tftpd-hpa

sudo apt install tftp
sudo apt install tftpd-hpa

运行命令,然后选择 NO

sudo dpkg-reconfigure dash

Problem 5:安装 Vitis 时,Final Processing ... Generateing installed device list 进度条卡住不动

解决方法:

安装 libtinfo5​

sudo apt-get install libtinfo5​

AMD Customer Community

参考资料

https://github.com/Xilinx/PYNQ

PYNQ Introduction — Python productivity for Zynq (Pynq)

EdgeBoard 的 PYNQ 移植 - Haozhe Zhu's Blog

[教程] PYNQ镜像完美移植适配教程_哔哩哔哩_bilibili

【原创教程】手把手教你编译移植PYNQ镜像_哔哩哔哩_bilibili

自定义ZYNQ板卡移植PYNQ文件系统_哔哩哔哩_bilibili

在Zynq MPSoC Ultrascale+上移植PetaLinux(以EdgeBoard Lite FX3为例) / Xilinx/Altera/FPGA/CPLD/Verilog / WhyCan Forum(哇酷开发者社区)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值