针对Linux BSP开发的Petalinux,如何实现硬件工程导入

FPGA开发圈 2018-02-27 11:01 次阅读

简介

作者: Alex He (何晔), 赛灵思高级嵌入式应用工程师

这里的 UIO 即 Userspace I/O,本文中 UIO 泛指 UIO 设备和 UIO 驱动。它在 Linux kernel 的世界里比较小众,主要是一些定制设备和相应的驱动。UIO内核驱动指负责将中断和设备内存暴露给用户空间,再由UIO用户态驱动(Application)来实现具体的业务,随心所欲的玩。学术点叫做高度定制化,柔性设计。

那怎么和 FPGA 扯上了关系呢?是的,FPGA在硬件世界里也是随心所欲的玩,这一硬一软还真是登对,在一起啊在一起。

本实验工程将介绍如何利在赛灵思异构多处理器产品系列 Zynq UtralScale+ MPSoC  ZCU102 嵌入式评估板上实现多个 UIO,同时借助赛灵思的工具完成硬件工程和 linux BSP 的开发,最后通过测试应用程序完成测试。

ZCU102上的 MPSoC 集成固化了四核 ARM Cortex-A53,双核Cortex-R5 以及 Mali-400 MP2 GPU,这部分官方称为PS(Processing System)。另外一部分就是FPGA,即 PL(Programmable Logic)。PS端实现控制,PL用来实现应用加速,两者通过AXI连接。跑这个小实验,呵呵,大材小用。只是本人手头正好有这个板子不得不装。筒子们可以去买了个Zybo 或者ZedBoard 开发板, 在板子试试身手。

实 验 报 告实验人员:本人

实验材料:

硬件设计

建立Vivado工程,适配 ZCU102 EVB。通过 IP Integrator 加入PS,在 PL 侧加入5个UIO输入,其中1个是GPIO模块(包含中断输出和设备内存),另外4个是PIN连接到ZCU102 EVB上的DIP开关,作为中断输入通过一个concat IP连接到PS的ps_pl_irq管脚。板级细节请参考[1] UG1182,芯片资料参考[2] UG1085

添加PIN约束文件,

set_property PACKAGE_PIN AN13 [get_ports pl_irq_ll]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_ll]

set_property PACKAGE_PIN AM14 [get_ports pl_irq_lh]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_lh]

set_property PACKAGE_PIN AP14 [get_ports pl_irq_ef]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_ef]

set_property PACKAGE_PIN AN14 [get_ports pl_irq_er]

set_property IOSTANDARD LVCMOS33 [get_ports pl_irq_er]

Vivado的图形化的模块设计,丰富的IP库,加上可以上天的智能连接。有点数字电路设计的基础,很快就能完成这个小设计。整个设计如下图。

软件设计

这里用到 Xilinx 针对 Linux BSP 开发的 Petalinux。它基于Yocto,加入Xilinx的Layers实现硬件工程的导入,将复杂的Yocto的设计流程打包简化,支持一定的用户自定义功能,如QEMU仿真运行,增加 out-of-tree 的驱动,Device tree 修改,应用程序编译打包,等等。具体信息请移步 https://china.xilinx.com/products/design-tools/embedded-software/petalinux-sdk.html

这里简单展示一下具体的命令过程。

$petalinux-create -t project --template zynqMP -n zcu102-pl2ps_irq

$cd ./ zcu102-pl2ps_irq

$petalinux-config --get-hw-description <path of HDF>

$petalinux-config -c kernel

Enable UIO_PDRV_GENIRQ driver

CONFIG_UIO=y

# CONFIG_UIO_CIF is not set

CONFIG_UIO_PDRV_GENIRQ=y

$petalinux-build -c device-tree

PL侧的dtsi文件生成与./components/plnx_workspace/device-tree-generation/pl.dtsi

这里只有GPIO UIO。 PIN UIO因为不是IP,所以相关信息无法由工具自动生成。所以要做如下修改:

1. 修改GPIO UIO设备端点

    1) 将中断号改为93

    2) 将compatible改成“generic-uio” //我们后面要用 Linux 自带的 UIO_PDRV_GENIRQ 驱动

2. 增加 DIP UIO 端点

    1) 将compatible改成“generic-uio”

    2) 依次设置中断值89到93

    3) 按照每个 DIP PIN 的 interrupt trigger type 设置属性值

*DTS里的中断号与硬件中断号有32的 offset。

Petalinux 提供了自定义DTS文件./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi,将以上修改定义到system-user.dtsi.

有两个方法来适配UIO端点和 UIO_PDRV_GENIRQ 驱动

1. bootargs use “uio_pdrv_genirq.of_id=generic-uio”,可以通过DTS定义。

2. insmod uio_pdrv_genirq.ko of_id=generic-uio when install the driver

修改完后,编译出Image.

$petalinu-build

$cd ./images/linux

$petalinux-package --boot --fsbl zynqmp_fsbl.elf --fpga --atf --pmufw --u-boot --force

将生成的BOOT.bin(bootloader)和image.ub(FIT uImage)拷贝到SD卡用于启动。\

测试

这里引用下关于uio_pdrv_genirq驱动的介绍

https://01.org/linuxgraphics/gfx-docs/drm/driver-api/uio-howto.html

结合驱动代码./drviver/uio/uio_pdrv_genirq.c)可知,每个UIO设备会有对应的/dev/uioX的设备节点。用户态驱动程序的读操作会阻塞直到UIO硬件中断发生。UIO的中断处理程序uio_pdrv_denirq_handler()会关闭该硬件中断。用户态驱动程序需要通过write函数来触发uio_pdrv_genirq_irqcontrol()以完成中断的使能和关闭。代码如下,

启动内核及加载uio_pdrv_genirq驱动

检查/proc/interrupts

细心的你一定发现了一个坑,少了2个UIO中断(IRQ122和IRQ124),原来是硬件不支持Edge falling和Level Low的触发模式。kernel log如下。

测试DIP UIO方法一

通过拨动2个DIP,观察到

2个DIP中断发生了,可是不论怎么再拨动DIP开关,始终是1。前文铺垫过,这个中断在驱动的中断处理程序里会被关掉,需要通过应用程序调用write()来打开。这里有个easy way,使用万能的echo命令“echo 0x1 > /dev/uioX”,再配合DIP可以触发多次中断。

测试DIP UIO方法二

前面的方法比较low,这里有稍微高级的享受。写个简单的用户态驱动程序,上代码。

借助petalinux提供的交叉编译工具编译出bin文件,拷贝到启动SD卡。

运行测试程序并配合DIP开关测试。(为了更好的体现测试运行情况,在UIO内核驱动里增加了irqcontrol的调用打印)

测试GPIO UIO

UIO驱动会将设备内存(寄存器)空间枚举出来,由用户态驱动程序通过mmap导出进行读写控制。参见AXI_GPIO IP的文档pg144-axi-gpio.pdf,其寄存器如下。

测试应用程序会通过设置GIER和IP_IER来使能中断。上代码。

测试过程

或许你觉得这么贴图代码不厚道而不能施展复制黏贴大法,可不知我拙与WORD,没try出好排版。莫急莫急,这里有GIT,https://gitenterprise.xilinx.com/AlexHe/UIO_Linux_Demo

硬件资源文件和Image,测试代码一个都不能少,统统献上。酸爽否?

实 验 结 论

UIO这种可高度自定义的设备结合Xilinx的MPSoC可以实现非常灵活的应用。Xilinx提供的完备的工具集,给用户带来了高效的开发体验。本例虽然简单,但Xilinx所推崇的All Programmable的概念和实际的FPGA加速应用的的确确是建立在这些软硬件协同技术之上。忘周知!

热门推荐

原文标题:如何在 Zynq UltraScale+ MPSoC 上实现 Linux UIO 设计

文章出处:【微信号:FPGA-EETrend,微信公众号:FPGA开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

Google发布了适用于Mac和Linux的全新工具——VR180Creator

VR180 Creator将素材转换为标准格式,以便您可以使用Adobe Premiere和Fina....

的头像 AR联盟 发表于 06-21 11:43 188次 阅读
Google发布了适用于Mac和Linux的全新工具——VR180Creator

基于FPGA的异步FIFO的实现

大家好,又到了每日学习的时间了,今天我们来聊一聊基于FPGA的异步FIFO的实现。 一、FIFO简介....

的头像 FPGA学习交流 发表于 06-21 11:15 332次 阅读
基于FPGA的异步FIFO的实现

基于单片机对FPGA进行编程配置

本文实现了基于遗传算法的硬件演化过程。通过Mcu随机产生种群,选择好的基因进行交叉变异产生后代,然....

发表于 06-21 10:45 51次 阅读
基于单片机对FPGA进行编程配置

揭秘造芯黑马的神秘面纱

如果说目前高端集成电路的落后现状是因为我国相关产业起步晚、积累少导致的,对于如今再次兴起的人工智能浪....

的头像 电子发烧友网工程师 发表于 06-21 08:02 195次 阅读
揭秘造芯黑马的神秘面纱

AM3352 Linux 里面不用以太网功能,请问要改哪些地方?

发表于 06-21 07:30 36次 阅读
AM3352 Linux 里面不用以太网功能,请问要改哪些地方?

AM3352 linux 停止在Starting kernel无法启动,这是为什么?怎么解决?

发表于 06-21 07:29 41次 阅读
AM3352 linux 停止在Starting kernel无法启动,这是为什么?怎么解决?

请问AM335x+Linux 在程序运行中IO可否改变用途?

发表于 06-21 06:03 14次 阅读
请问AM335x+Linux 在程序运行中IO可否改变用途?

AM335X最新Linux SDK下载问题,请问最新的Linux SDK在哪里下载?

发表于 06-21 04:14 14次 阅读
AM335X最新Linux SDK下载问题,请问最新的Linux SDK在哪里下载?

AM335X以太网问题,请问需要在linux里面修改什么吗,比如把PHY芯片的自协商关闭,固定在100full模式之类的?

发表于 06-21 03:42 12次 阅读
AM335X以太网问题,请问需要在linux里面修改什么吗,比如把PHY芯片的自协商关闭,固定在100full模式之类的?

想通过Xmanager之类的nfs工具实现从Windows下方便的将文件传到am335上,需要移植那些东西到嵌入式Linux系统呢?

发表于 06-21 03:25 11次 阅读
想通过Xmanager之类的nfs工具实现从Windows下方便的将文件传到am335上,需要移植那些东西到嵌入式Linux系统呢?

请问哪位大神可以分享一下AM335x-LINUX-PSP-MM.mm.pp.bb.tgz的下载地址?

发表于 06-21 02:57 12次 阅读
请问哪位大神可以分享一下AM335x-LINUX-PSP-MM.mm.pp.bb.tgz的下载地址?

请问AM335x Linux移植中的设备树其中的 reg = <0 0 4>; /* CS0, offset 0, IO size 4 */这句话中的 “ IO size 4”是什么意思?

发表于 06-21 02:24 19次 阅读
请问AM335x Linux移植中的设备树其中的  reg = <0 0 4>; /* CS0, offset 0, IO size 4 */这句话中的 “ IO size 4”是什么意思?

请问为什么ti-processor-sdk-linux-am335x-evm-03.02.00.05-Linux-x86 编译后没有u-boot-spl?

发表于 06-21 01:35 23次 阅读
请问为什么ti-processor-sdk-linux-am335x-evm-03.02.00.05-Linux-x86 编译后没有u-boot-spl?

请问SPL.backup有什么作用?

发表于 06-21 00:49 14次 阅读
请问SPL.backup有什么作用?

FPGA和CPU如何搭配?

如下图,FPGA作为协处理器,CPU把指令写入内存,FPGA从内存读取指令执行,并把计算结果写入内存....

的头像 ssdfans 发表于 06-20 15:17 200次 阅读
FPGA和CPU如何搭配?

PCB设计过程中需要考虑的因素

千兆位级串行I/O技术有着极其出色的优越性能,但这些优越的性能是需要条件来保证的,即优秀的信号完整性....

发表于 06-20 14:24 60次 阅读
PCB设计过程中需要考虑的因素

FPGA和ASIC之间界限正在模糊,FPGA为未来的ASIC提供设计架构

该系列器件现在包括从基本的可编程逻辑一直到复杂的SoC。在各种应用领域(包括汽车,AI,企业网络,航....

发表于 06-20 14:13 34次 阅读
FPGA和ASIC之间界限正在模糊,FPGA为未来的ASIC提供设计架构

可编程在辅助驾驶系统中的应用

通过消除繁琐的驾驶动作,辅助驾驶还可提供更高的舒适水平。例如,传统的巡航控制允许司机设定一个固定的行....

发表于 06-20 14:01 22次 阅读
可编程在辅助驾驶系统中的应用

Xilinx的7系列FPGA高速收发器:TX发送端的介绍

每一个收发器拥有一个独立的发送端,发送端有PMA(Physical Media Attachment....

发表于 06-20 13:48 38次 阅读
Xilinx的7系列FPGA高速收发器:TX发送端的介绍

FPGA学习系列:21. 自动售货机的设计

设计背景: 我们从开始学习 FPGA。到现在也慢慢的学到了血多的东西,那么我们就应该慢慢的去学习深一....

的头像 FPGA学习交流 发表于 06-20 10:41 578次 阅读
FPGA学习系列:21. 自动售货机的设计

关于FFT硬件实现,设计中RAM输出端为何没有使用REG

以2048点为例,根据理论值计算,计算一次2048点的IFFT的时间应为130us。在采用流水线的方....

的头像 FPGA极客空间 发表于 06-20 09:05 345次 阅读
关于FFT硬件实现,设计中RAM输出端为何没有使用REG

关于PIC和FPGA的区别及优缺点总结

FPGA是逻辑门器件,可以配置成为并行逻辑模块。FPGA最大优点是并行处理。例如构建一百个与非门,F....

的头像 FPGA极客空间 发表于 06-19 16:20 174次 阅读
关于PIC和FPGA的区别及优缺点总结

增强机器学习能力的“左膀右臂”的GPU、FPGA芯片

FPGA是帮助公司和研究人员解决问题的芯片。FPGA是一种集成电路,可以编程为多种用途。它有一系列“....

的头像 人工智能学家 发表于 06-19 15:27 315次 阅读
增强机器学习能力的“左膀右臂”的GPU、FPGA芯片

Linux以inode的方式,让数据形成文件

当我们读取一个文件时,实际上是在目录中找到了这个文件的inode编号,然后根据inode的指针,把数....

的头像 马哥Linux运维 发表于 06-19 14:23 170次 阅读
Linux以inode的方式,让数据形成文件

基于FPGA的PCIe设备如何才能满足PCIe设备的启动时间的要求?

根据PCIe的协议,当设备启动后,PCIe设备必须满足启动时间的要求,即上电后100ms内,完成PC....

发表于 06-19 10:24 45次 阅读
基于FPGA的PCIe设备如何才能满足PCIe设备的启动时间的要求?

如何避免升级失败而使FPGA变砖呢?

如果升级过程中出现意外情况,FLASH里面原有的固件被破坏,那么FPGA能够从备份固件区启动配置,即....

发表于 06-19 10:09 42次 阅读
如何避免升级失败而使FPGA变砖呢?

单片机中按键消抖程序

效率上来说,延时消抖花费时间在无意义延时上,而相对较好的定时轮询还是不可避免的在轮询,而现在这种方式....

的头像 电子工程专辑 发表于 06-19 08:55 241次 阅读
单片机中按键消抖程序

Embest EduKit2410 平台的ARM920T Linux实验系统的用户手册详细概述

Linux 的调试通常比较复杂,可以选择的调试环境也很多。但由于 Linux 系统内核有包括全球在内....

发表于 06-19 08:00 11次 阅读
Embest EduKit2410 平台的ARM920T Linux实验系统的用户手册详细概述

DE1的SoC开发工具包的用户手册详细资料免费下载

DE1的SoC开发工具包提供了一个强大的硬件设计平台建立在片上系统(SoC)FPGA公司,它结合了最....

发表于 06-19 08:00 17次 阅读
DE1的SoC开发工具包的用户手册详细资料免费下载

如何建立OpenCL开发环境编译和执行DE1 SoC的示例项目的详细概述

DE1 SoC是Altera片上系统(SOC)FPGA构建的一个健壮的硬件设计平台,它是Altera....

发表于 06-19 08:00 11次 阅读
如何建立OpenCL开发环境编译和执行DE1 SoC的示例项目的详细概述

SOPC和FPGA的介绍和基础实验的详细资料概述

本文档的主要内容详细介绍的是SOPC和FPGA的介绍和基础实验的详细资料概述包括了:FPGA基础实验....

发表于 06-19 08:00 25次 阅读
SOPC和FPGA的介绍和基础实验的详细资料概述

DE2-115板的详细介绍和实验指导的详细资料概述

这个练习的目的是学习如何将简单的输入和输出设备连接到FPGA芯片上,并实现使用这些设备的电路。我们将....

发表于 06-19 08:00 24次 阅读
DE2-115板的详细介绍和实验指导的详细资料概述

LabVIEW状态图模块的详细介绍和使用手册详细概述

该模块在 LabVIEW 中增加了创建状态图的功能,以开収基于事件的控制与测试系统。状态图编程模块迚....

发表于 06-19 08:00 18次 阅读
LabVIEW状态图模块的详细介绍和使用手册详细概述

简谈FPGA的上电复位

大家好,博主最近有事忙了几天,没有更新,今天正式回来了。那么又到了每日学习的时间了,今天咱们来聊一聊....

的头像 FPGA学习交流 发表于 06-18 19:24 595次 阅读
简谈FPGA的上电复位

FPGA学习系列:18. 数码管的设计

设计背景: 数码管是一种半导体发光 器件 ,其基本单元是发光二极管。 数码管在我们的许多设计中都又用....

的头像 FPGA学习交流 发表于 06-18 19:24 616次 阅读
FPGA学习系列:18. 数码管的设计

FPGA学习系列:19. rom到数码管显示设计

设计背景: rom是读写的的静态存储单元,在我们的设计中我们会经常用到,数码管模块同样的大大小小的设....

的头像 FPGA学习交流 发表于 06-18 19:24 501次 阅读
FPGA学习系列:19. rom到数码管显示设计

FPGA学习系列:20. ram控制器的设计(调用IP核)

设计背景: 随机存取存储器 (random access memory,RAM)又称作随机存储器,是....

的头像 FPGA学习交流 发表于 06-18 19:24 559次 阅读
FPGA学习系列:20. ram控制器的设计(调用IP核)

Linux文件缓存使用情况和命中率查看的工具详细概述

这里总结几个Linux文件缓存(page cache)使用情况、命中率查看的工具。

的头像 Linuxer 发表于 06-18 17:51 82次 阅读
Linux文件缓存使用情况和命中率查看的工具详细概述

Windows和Linux的区别以及Linux系统的目录结构

本文先对 Windows 和 Linux 上面文件系统原理、组织概念进行区分,并给出例子、列举两者的....

的头像 Linux爱好者 发表于 06-18 17:37 99次 阅读
Windows和Linux的区别以及Linux系统的目录结构

FPGA成为数据中心发展的趋势及重要性

用AI防鲨鱼、用AI学写中国书法、用AI预测人类死亡时间、用AI审判罪犯……在人工智能方兴未艾的今天....

的头像 电子发烧友网工程师 发表于 06-18 07:16 421次 阅读
FPGA成为数据中心发展的趋势及重要性

你一定想知道FPGA的那些事...

作者:张泽小脚丫STEP 导读:FPGA(Field Programmable Gate Array....

发表于 06-14 13:35 319次 阅读
你一定想知道FPGA的那些事...

Linux内存配置:overcommit的设置

使用版本管理工具的工程师都熟悉commit的含义,就是向代码仓库提交自己更新的意思,对于这个场景,实....

的头像 Linuxer 发表于 06-14 11:45 203次 阅读
Linux内存配置:overcommit的设置

如何在Linux中使用SIM7100模块的详细资料概述

本文档的主要内容详细介绍的是如何在Linux中使用SIM7100模块的详细资料概述

发表于 06-14 08:00 24次 阅读
如何在Linux中使用SIM7100模块的详细资料概述

为应用选择最佳可编程SoC时进行的六个设计考虑

SoC FPGA器件在一个器件中同时集成了处理器和FPGA体系结构。将两种技术合并起来具有很多优点,....

发表于 06-13 14:59 152次 阅读
为应用选择最佳可编程SoC时进行的六个设计考虑

Linux用户与用户组的关系详解

在 linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。

的头像 马哥Linux运维 发表于 06-13 14:30 229次 阅读
Linux用户与用户组的关系详解

FPGA学习系列:13. 任意分频器设计

设计背景: 分频在 fpga的设计中一直都担任着很重要的角色,而说到分频,我相信很多人都已经想到了利....

的头像 FPGA学习交流 发表于 06-13 11:21 571次 阅读
FPGA学习系列:13. 任意分频器设计

FPGA学习系列:14. 锁相环pll设计

设计背景: 在我们设计工程中我们会用到100M,500M等时钟,如果我们的晶振达不到我们就需要倍频,....

的头像 FPGA学习交流 发表于 06-13 11:21 717次 阅读
FPGA学习系列:14. 锁相环pll设计

FPGA学习系列:15. 呼吸灯(pwm)设计

设计背景: 呼吸灯 广泛应用于手机之上,并成为各大品牌新款手机的卖点之一。如果手机里面有未处理的通知....

的头像 FPGA学习交流 发表于 06-13 11:21 902次 阅读
FPGA学习系列:15. 呼吸灯(pwm)设计

FPGA学习系列:16. rom控制器设计

设计背景: ROM是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据....

的头像 FPGA学习交流 发表于 06-13 11:21 484次 阅读
FPGA学习系列:16. rom控制器设计

补充: FPGA产生基于LFSR的伪随机数

大家好,又到了每日学习的时间了,上一篇《荐读:基于FPGA 的CRC校验码生成器》文中,提到了要实现....

的头像 FPGA学习交流 发表于 06-13 11:21 509次 阅读
补充: FPGA产生基于LFSR的伪随机数

Web Installer提供的各种特性及设计方法

你有没有注意到在Netflix流媒体视频播放时,有时候视频模糊,然后很快恢复到高质量? 你知道Net....

的头像 FPGA开发圈 发表于 06-13 09:19 439次 阅读
Web Installer提供的各种特性及设计方法

DE2-115详细中文数据手册免费下载

DE2-115 套装包含了所有使用开发板会用到的器件资源,您额外需要的仅是一台装有微软视窗操作系统的....

发表于 06-13 08:00 37次 阅读
DE2-115详细中文数据手册免费下载

Web Installer介绍和提供的各种特性以及优点的详细资料概述

你有没有注意到在Netflix流媒体视频播放时,有时候视频模糊,然后很快恢复到高质量? 你知道Net....

的头像 嵌入式资讯精选 发表于 06-12 19:44 503次 阅读
Web Installer介绍和提供的各种特性以及优点的详细资料概述

FPGA定点小数的常规格式、相对于浮点小数的优势与劣势和计算的概述

所谓定点小数,就是小数点固定地隐含在某一位置上的数据。由于小数点的位置是固定的,所以就没有必要储存它....

的头像 电子技术应用ChinaAET 发表于 06-12 19:34 384次 阅读
FPGA定点小数的常规格式、相对于浮点小数的优势与劣势和计算的概述

Linux内核中的hash与bucket

哈希表(Hashtable)又称为“散列”,Hashtable是会根据索引键的哈希程序代码组织成的索....

的头像 嵌入式ARM 发表于 06-12 14:53 297次 阅读
Linux内核中的hash与bucket