本教程展示了如何为 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 安装路径
运行脚本并等待它完成。
./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 → 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”
此外,您将需要为 arm 架构预构建的 rootfs映像。请参阅 PYNQ 快速移植指南。
下载它。
转到 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 窗口中使用“/”搜索软件包。
退出并重建项目
petalinux-build
现在我们将通过 JTAG 启动我们的系统。
petalinux-boot --jtag --fpga --kernel --verbose;
登录到 Minized,例如使用 cutecom 或 putty。
现在我们将格式化 EMMC。(可选,稍后我们可以使用“dd”将图像写入EMMC)
使用“df -h”命令列出所有已安装的驱动器及其位置
df -h
或“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
制作第一个分区 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
打开块设计并删除未使用的 IP(您可以将 SD 卡管理器连接到 SDIO_0 端口以获得额外存储)。
生成新的双流并从项目中导出 HDF。
转到 minized_ttc_2019_1 项目并更改引用的 HDF 和图像打包配置。
cd minized_ttc_2019_1;
petalinux-config --get-hw-description=/home/bartek/Desktop/Minized_EMMC/Avnet;
构建项目并打包新的 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
并创建 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 ”<-这是我们的板存储库。
我已经修改了 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 驱动器上的磁盘映像。
并将 partition2 的大小调整为小于 EMMC 减去 partition1 的大小(例如 7Gb)并检查错误。
将 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 系统启动。
现在让我们挂载 pmod sdcard 并编写一些东西来测试功能。
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 上的内容。
我已将此项目升级为 Vivado 2020.1 版本。
打开 Vitis HLS 并为 xc7z007 芯片创建新的空项目。
单击源→新文件
创建附加 IP 核
转到项目设置→综合并在“顶级功能”中键入“添加”
单击确定并运行综合。
将我们的 IP 导出到本地 IP 存储库。
提取“add.zip”
打开 Vivado 并将新 IP 添加到项目并将其连接到 AXI 互连。
保存项目并导出比特流。
打开 Vivado 项目并搜索bistream和.hwh文件。
复制并重命名这些文件。
将它们上传到 Minized,但首先我们需要 Wi-Fi。
启动 Minized 并连接到它,例如使用 putty。
如您所见,Minized 检测到了我们的无线适配器
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
sudo wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -B
sudo dhclient wlan0
打开互联网浏览器并连接到 Minized(密码是 xilinx)
http://192.168.0.105:9090/tree?
通过 jupyter notebook 上传文件。
现在您已准备好基于这三个项目开发自己的 IOT 应用程序。
让您的 Minized 工作并分享您的工作 :)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !