linux uio 硬件中断,当ZYNQ遇到Linux Userspace I/O(UIO)

373c803751df89e62907aca3c8eb41c2.png

作者:何晔 来源: Linuxer微信公众号 (微信号:LinuxDev)

作者简介:

何晔:做过学生也做过老师又做了学生后错入了IT门。接触linux也有十来个年头,辗转于各种驱动开发,无一精通。在AMD就职期间,曾提交过少量的xHCI和ACPI的patch,算是在linux内核留下点印记。现就职于Xilinx,从事与嵌入式FPGA的应用支持。FPGA的使用经验满打满算也不过半年,斗胆写下此篇分享一下经验,也是自己一个小小设计的总结。其中谬误,望指正并谅解。

00d2ee69ab976a536f82234a6a879911.png

装B一点可以叫《UIO在FPGA上的实现和应用》。本文出于草根,还是装C吧。

当下最火的是AI,Machine Learning, Embedded Vision。FPGA老酒新装,在这个圈子里也可以掺和掺和。而谈到linux,这里从事传统嵌入式开发的朋友不在少数,八成都在谋求转型,寻个风口。急人所求,本篇软文以一个简单的实例来介绍一下FPGA的嵌入式linux里应用。隐去过多设计细节,重过程体验。新客们可以看个热闹,FPGA老玩家可以就此贵安。

这里的UIO即Userspace I/O,本文中UIO泛指UIO设备和UIO驱动。它在Linux kernel的世界里比较小众,主要是只一些定制设备和相应的驱动。UIO内核驱动指负责将中断和设备内存暴露给用户空间,再由UIO用户态驱动(Application)来实现具体的业务,随心所欲的玩。学术点叫做高度定制化,柔性设计。那怎么和FPGA扯上了关系?是的,FPGA在硬件世界里也是随心所欲的玩,这一硬一软还真是登对,在一起啊在一起。

本实验工程利用Xilinx Zynq UtralScale+(MPSoC)ZCU102嵌入式评估板上实现多个UIO,借助Xilinx的工具完成硬件工程和linux BSP的开发,最后通过测试应用程序完成测试。

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

实验报告

实验人员:本人

实验时间:几天前

实验材料:

Xilinx Vivado 2017.2

硬件工程设计工具

有免费版本

Petalinux 2017.2

Linux BSP开发工具(基于yocto)

免费

ZCU102 EVB final v1.0

高端开发板一枚

收费,贵

PC

电脑一台

要快一点,空间大一点

硬件设计

建立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

IRQ source

Trigger type

IRQ number

Board Info

pl_irq_er

edge rising

121

SW13.8, DIP0

pl_irq_ef

edge falling

122

SW13.7, DIP1

pl_irq_lh

level high

123

SW13.6, DIP2

pl_irq_ll

level low

124

SW13.5, DIP3

axi_gpio_1

N/A

125

写好约束文件,

b079aee48bdf9f924b365d308685ed9b.png

set_property PACKAGE_PIN AN13 [get_ports pl_irq_ll]

set_property IOSTANDARD LVCMOS33 [get_portspl_irq_ll]

set_property PACKAGE_PIN AM14 [get_ports pl_irq_lh]

set_property IOSTANDARD LVCMOS33 [get_portspl_irq_lh]

set_property PACKAGE_PIN AP14 [get_ports pl_irq_ef]

set_property IOSTANDARD LVCMOS33 [get_portspl_irq_ef]

set_property PACKAGE_PIN AN14 [get_ports pl_irq_er]

set_propertyIOSTANDARD LVCMOS33 [get_ports pl_irq_er]

(责任编辑:ioter)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值