添加中断时,UIO 设备不再打开

问题描述

Linux 版本:v4.19
平台:Xilinx UltRascale+ Zynq

在 Xilinx 可编程逻辑中,我创建了一个内存映射设备。我使用 uio_pdrv_genirq 作为我的设备驱动程序。设备显示uio0,我可以毫无问题地对其进行读写。

到目前为止,我还没有遇到与此设备相关的中断。随着我的设计成熟,我想为设备添加一个中断。所以我创建了适当的逻辑,将中断连接到 cpu,并更新了设备树配置以告诉 Linux 中断的存在。我已经彻底检查过,并且非常确定我在设备树中指定了正确的中断 ID。

然而,一旦我指定了中断,我就开始遇到问题。当我尝试打开设备时,我的用户空间程序挂起。我已通过 printf():s 确认我不再退出功能

fid = open("/dev/uio0",O_RDWR | O_SYNC);

显然这与中断有关。也许我缺少一些额外的中断控制器设备树配置?或者在打开设备之前我必须在用户空间做些什么?

这是我的设备和中断控制器的设备树配置:

my_device@a0040000 {
    compatible = "generic-uio";
    reg = <0x0 0xa0040000 0x0 0x40000>;
    interrupt-parent = <&gic>;
    interrupts = <0 89 4>;
};

gic: interrupt-controller@f9010000 {
    compatible = "arm,gic-400","arm,cortex-a15-gic";
    #interrupt-cells = <3>;
    reg = <0x0 0xf9010000 0x10000>,<0x0 0xf9020000 0x20000>,<0x0 0xf9040000 0x20000>,<0x0 0xf9060000 0x20000>;
    interrupt-controller;
    interrupt-parent = <&gic>;
    interrupts = <1 9 0xf04>;
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)