问题描述
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 (将#修改为@)