×

如何为Minized创建PYNQ

消耗积分:0 | 格式:zip | 大小:199.21 MB | 2022-12-14

绝代双骄

分享资料个

描述

本教程展示了如何为 Minized 创建 PYNQ,它使用带有额外存储选项的 EMMC 内存作为 PMOD sdcard。

准备环境

首先,我们需要使用这些脚本从 Avnet GitHub 克隆存储库,我们将构建我们的项目和 BSP。

mkdir Avnet;
cd Avnet;
git clone https://github.com/Avnet/bdf.git --branch master;
git clone https://github.com/Avnet/hdl.git --branch 2019.1;
git clone https://github.com/Avnet/petalinux.git --branch 2019.1;
git clone https://github.com/Xilinx/PYNQ.git --branch image_v2.5.4;
wget http://downloads.element14.com/downloads/zedboard/minized/minized_ttc_2019_1.bsp.zip?ICID=minized-datasheet-widget;
unzip minized_ttc_2019_1.bsp.zip?ICID=minized-datasheet-widget;

转到 petalinux → 脚本并编辑“make_minized_qspi_minimal_bsp.sh”

cd petalinux/scripts;
gedit make_minized_qspi_minimal_bsp.sh;

更改 Vivado 和 Petalinux 安装路径

pYYBAGOAI52ARDRtAABH3AVru8k522.png
 

运行脚本并等待它完成。

./make_minized_qspi_minimal_bsp.sh

同时,我们将基于“minized_ttc_2019.1.bsp”创建项目

打开新终端和源 petalinux settings.sh

source /home/bartek/petalinux20191/settings.sh

并创建项目

petalinux-create -t project -s minized_ttc_2019_1.bsp

打开新创建的项目。

cd minized_ttc_2019_1

在里面您可以看到“硬件”文件夹,其中包含用于构建该 BSP 的硬件设计。

我们将需要修改用于该项目的设备树,否则 Petalinux 将无法在 FPGA 管理器打开的情况下构建。

转到项目规范→元用户→食谱-bsp→设备树→文件并编辑“system-user.dtsi”

cd project-spec/meta-user/recipes-bsp/device-tree;
gedit system-user.dtsi

我们可以安全地删除引用 Wi-Fi 模块和加速度计的节点。

我以前尝试过,重新编程 FPGA 会导致 Wi-Fi 驱动程序崩溃,这就是我删除它的原因,如果你离开加速度计节点,petalinux 构建也会失败。

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

	aliases {
		serial0 = &uart1;
		serial1 = &uart0;
	};
	
};

&flash0 {
	compatible = "micron,n25q128", "jedec,spi-nor";
};

/{
	usb_phy0: usb_phy@0 {
		compatible = "ulpi-phy";
		#phy-cells = <0>;
		reg = <0xe0002000 0x1000>;
		view-port = <0x0170>;
		drv-vbus;
	};
};

&usb0 {
	dr_mode = "otg";
	usb-phy = <&usb_phy0>;
} ;

/* QSPI addresses are defined with petalinux-config, but here they are overwritten so that one can program the flash internally */
&qspi {
	#address-cells = <1>;
	#size-cells = <0>;
	flash0: flash@0 {
		compatible = "micron,m25p80";
		reg = <0x0>;
		#address-cells = <1>;
		#size-cells = <1>;
		spi-max-frequency = <50000000>;
		partition@0x00000000 {
			label = "boot";
			reg = <0x00000000 0x00ff0000>;
		};
	};
};

/* PMOD SD Interface */
&sdhci0 {
	status = "okay";
	bus-width= <4>;
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;
	/* cd-inverted; */
	wp-inverted;

	mmccardpmod: mmccardpmod@1 {
		/* reg = <0>; */
		compatible = "mmc-card";
	};
};

/* SD Interface for eMMC */
&sdhci1 {
	status = "okay"; 
	non-removeable;
	bus-width= <4>;
	xlnx,has-cd = <0x0>;
	xlnx,has-power = <0x0>;
	xlnx,has-wp = <0x0>;

	mmccard: mmccard@0 {
		reg = <0>;
		compatible = "mmc-card";
		broken-hpi;
	};
};

/* Console UART.  UART1 is tied to the USB serial port on the Zedboard */
&uart1 {
   	status = "okay";
	current-speed = <115200>;
	port-number = <0>;
};

/ {

};

PYNQ 设置

打开 PYNQ → sdbuild → 脚本并运行“setup_host.sh”脚本(如果你之前没有)。

cd PYNQ/sdbuild/scripts;
bash setup_host.sh

现在我们需要修改 PYNQ 的引导设置。

打开 PYNQ → sdbuild → boot → meta-pynq → recipes-bsp → device-tree 并编辑“pynq_bootargs.dtsi”

cd PYNQ/sdbuild/boot/meta-pynq/recipes-bsp/device-tree;
gedit pynq_bootargs.dtsi

将“/dev/mmcblk0p2”更改为“/dev/mmcblk1p2”

poYBAGOAI6CAEuvFAABIJO45EnQ788.png
 

此外,您将需要为 arm 架构预构建的 rootfs映像请参阅 PYNQ 快速移植指南

poYBAGOAI6WAR-X2AADdJN5gG4o231.png
 

下载它。

转到 PYNQ → sdbuild 并输入:

make BOARDS=Pynq-Z1

查看 PYNQ 是否设置正确。

修改最小化最小

我们在开始时为 Minized QSPI 运行的脚本现在应该完成了。

打开 petalinux → 项目 → minized_qspi_minimal_2019_1 并添加实用程序包以格式化内存(可选)。

cd petalinux/projects/minized_qspi_minimal_2019_1;
petalinux-config -c rootfs

启用“e2fsprogs”、“e2fsprogs-resize2fs”、“e2fsprogs-e2fsck”包。

您可以在 petalinux 窗口中使用“/”搜索软件包。

poYBAGOAI6eAdVhqAAB0_4WHUpg229.png
 

退出并重建项目

petalinux-build

现在我们将通过 JTAG 启动我们的系统。

petalinux-boot --jtag --fpga --kernel --verbose;

登录到 Minized,例如使用 cutecom 或 putty。

格式化 EMMC

现在我们将格式化 EMMC。(可选,稍后我们可以使用“dd”将图像写入EMMC)

使用“df -h”命令列出所有已安装的驱动器及其位置

df -h
poYBAGOAI6mAcqwgAABiEGSQ7xg086.png
 

或“fdisk -l”

fdisk -l

EMMC 是“/dev/mmcblk1”

我们需要创建两个分区。一个用于“image.ub”,第二个用于“rootfs”

第一个分区需要是 FAT32,第二个分区需要是 ext4。

打开 mmcblk1。

fdisk /dev/mmcblk1

使用 fdisk 删除分区并写入更改。

d
1
d
2
w

现在我们需要创建新分区(您可以使用“format_emmc.sh”脚本作为参考,它位于本地/bin 中)。

fdisk /dev/mmcblk1
o
n
p
1
enter (default command)
+255M 
w

现在我们有了第一个分区,例如 255Mb。

fdisk /dev/mmcblk1
n
p
2
enter (default command)
enter (default command)
w
 
 
 
pYYBAGOX3oKASkuBAAB1iLGMkFg137.png
 
1 / 2分区和类型
 

制作第一个分区 w95 fat32

fdisk /dev/mmcblk1
t
1
b
w

或使用 mkfs 将 mmblk1p1 格式化为 fat32

mkfs.vfat -F 32 -n boot /dev/mmcblk1p1

将 mmblk1p2 格式化为 ext4

mkfs.ext4 -L root /dev/mmcblk1p2

现在您的 EMMC 已准备好作为存储介质。

创建基础项目

打开 hdl → 项目 → minized_petalinux →MINIZED_2019_1

poYBAGOX3pKAQRQ6AACcFivvPgY124.png
 

打开块设计并删除未使用的 IP(您可以将 SD 卡管理器连接到 SDIO_0 端口以获得额外存储)。

pYYBAGOX3pWABmt_AAD7FkzqZKQ366.png
如果您愿意,您可以将 sdio0 wp 和 cd 端口连接到常量“0”并在设备树中添加“不可移除​​”。
 

生成新的双流并从项目中导出 HDF。

poYBAGOX3piARA5VAAA3iMkLJMM606.png
 

创建 PYNQ 映像

转到 minized_ttc_2019_1 项目并更改引用的 HDF 和图像打包配置。

cd minized_ttc_2019_1;
petalinux-config --get-hw-description=/home/bartek/Desktop/Minized_EMMC/Avnet;
poYBAGOX3qKAWHMpAAC_Z-y3ki0870.png
 

构建项目并打包新的 BSP。

petalinux-build;
petalinux-package --bsp --p ${PWD} --hwsource /home/bartek/Desktop/Minized_EMMC/Avnet/hdl/Projects/minized_petalinux/MINIZED_2019_1 -o MinizedEMMCPynq;

使用先前下载的“bionic.arm.2.5.img”将创建的 BSP 复制到 PYNQ → sdbuild

poYBAGOX3rSAXSmfAABZ2naLWV0590.png
 

并创建 PYNQ 镜像

cd PYNQ/sdbuild;
bash scripts/image_from_prebuilt.sh MinizedEMMCPynq MinizedEMMCPynq.bsp arm bionic.arm.2.5.img;
最好为 Minized 创建自定义图像。我们需要对 PYNQ 板项目进行一些修改。(准备好的包在附件 MinizedPynq.7z 中)将其提取到某个地方,例如“ PYNQ/zz ”<-这是我们的板存储库。
pYYBAGOX3rmAd-5XAAAphU0ns54011.png
 

我已经修改了 petalinux_bsp → meta-user → ... → user_2018-06-26-17-14-00.cfg

并为某些 USB Wi-Fi 模块启用内核驱动程序。

在打包 BSP 之前,您可以通过“ petalinux-config -c kernel ”来执行此操作。

cd PYNQ/sdbuild;
make PREBUILT=/home/bartek/PYNQ/sdbuild/bionic.arm.2.5.img BOARDDIR=/home/bartek/PYNQ/zz BOARD=Minizedzik

如果它不起作用,请尝试添加 PYNQ_SDIST:

make PYNQ_SDIST=/home/bartek/Downloads/pynq-2.5.tar.gz PREBUILT=/home/bartek/PYNQ/sdbuild/bionic.arm.2.5.img BOARDDIR=/home/bartek/PYNQ/zz BOARD=Minizedzik

缩小的图像应该在输出文件夹中。

恢复 USB 驱动器上的磁盘映像。

poYBAGOX3r-AFHqQAACOui8UjKc423.png
 

并将 partition2 的大小调整为小于 EMMC 减去 partition1 的大小(例如 7Gb)并检查错误。

pYYBAGOX3sKAC701AAAiHlXivDs402.png
 

将 USB 驱动器连接到 Minized。

使用“dd”命令将图像写入 EMMC(这需要一段时间)。

dd if=/dev/sda of=/dev/mmcblk1

如果您希望检查错误。

e2fsck /dev/mmcblk1p1
e2fsck /dev/mmcblk1p2

使用“minized_ttc_2019_1”BOOT.bin 最小化的程序

petalinux-build;
petalinux-package --boot --fpga --u-boot -o BOOT.bin --force;
program_flash -f ./BOOT.bin -offset 0 -flash_type qspi_single -fsbl ./images/linux/zynq_fsbl.elf;

Minized 将使用 QSPI 内存来加载 BOOT.bin。

ZYNQ 将使用该 BOOT.bin 来加载 FSBL 为 FPGA 进行 Minized 编程,然后加载 u-boot 以在“/dev/mmcblk1p1”分区上搜索 image.ub。Image.ub 将等到“/dev/mmcblk1p2”被挂载并加载rootfs。

现在 Minized 应该使用 PYNQ 系统启动。

poYBAGOX3sqAArWzAACFq5l0-RU841.png
-bash 警告,因为我忘了增加 rootfs 的大小 :)
 
pYYBAGOX3tKAdql4AAAsxUvFLBo041.png
适当调整大小后
 

现在让我们挂载 pmod sdcard 并编写一些东西来测试功能。

pYYBAGOX3t-AAxN5AABAJZxVqzQ003.png
 
mkdir mnt;
ls -l /dev | grep mmc;
sudo mount /dev/mmcblk0p2 mnt;

打开 mnt 文件夹并创建.txt 文件。

cd mnt;
sudo nano TestWrite.txt;

退出并保存,umount sdcard。

cd ..;
sudo umount mnt;

让我们检查一下 sdcard 上的内容。

poYBAGOX3uGAZGfxAAAma9QGMp0932.png
 
pYYBAGOX3uSAOhhLAAAVLvRnwp8286.png
 

创建叠加层

我已将此项目升级为 Vivado 2020.1 版本。

打开 Vitis HLS 并为 xc7z007 芯片创建新的空项目。

单击源→新文件

 

pYYBAGOX3uqAPT-xAAAdUWrBEvk338.png
 

创建附加 IP 核

poYBAGOX3u-AGafZAABagApAJ28960.png
 

转到项目设置→综合并在“顶级功能”中键入“添加”

poYBAGOX3veAWyO4AACECpKKd_c818.png
 

单击确定并运行综合。

将我们的 IP 导出到本地 IP 存储库。

poYBAGOX3vyAaJQzAAB_2sFHjGY339.png
 

提取“add.zip”

打开 Vivado 并将新 IP 添加到项目并将其连接到 AXI 互连。

poYBAGOX3wqAT_s-AAC_5LkIJss246.png
 

 

poYBAGOX3xWAYqm5AAFRRrVzbok383.png
 

保存项目并导出比特流。

打开 Vivado 项目并搜索bistream.hwh文件。

 

pYYBAGOX3xmAI3oKAAA6xlAahs0148.png
 

 

poYBAGOX3xyAV86vAABDaMAluho493.png
 

复制并重命名这些文件。

pYYBAGOX3yCAPa0kAAAhy0lpU4Q820.png
 

 

将它们上传到 Minized,但首先我们需要 Wi-Fi。

启动 Minized 并连接到它,例如使用 putty。

 

pYYBAGOX3yKACqWlAAANpfcRifU218.png
 

如您所见,Minized 检测到了我们的无线适配器

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

 

pYYBAGOX3yaAAceGAAAcsxsbHKk876.png
 
sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -B
sudo dhclient wlan0
poYBAGOX3zmAeKm3AACRgw7PrLM988.png
 

打开互联网浏览器并连接到 Minized(密码是 xilinx)

 http://192.168.0.105:9090/tree?

通过 jupyter notebook 上传文件。

pYYBAGOX3zyAPIoZAAAzzmavUZE246.png
 

 

pYYBAGOX30SACpJuAADWceTf4f8500.png
“它只是工作!”
 

结束

现在您已准备好基于这三个项目开发自己的 IOT 应用程序。

让您的 Minized 工作并分享您的工作 :)


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !