Can';t设置IRQ';Linux内核中的触发器类型
我在Linux内核3.18.20和RTAI补丁5.2中遇到了一个问题。我发现我的驱动程序记录的中断频率很高,约为20us/次 我试图改变它的触发类型,看看它是否被错误的方式触发Can';t设置IRQ';Linux内核中的触发器类型,c,linux,linux-kernel,interrupt-handling,irq,C,Linux,Linux Kernel,Interrupt Handling,Irq,我在Linux内核3.18.20和RTAI补丁5.2中遇到了一个问题。我发现我的驱动程序记录的中断频率很高,约为20us/次 我试图改变它的触发类型,看看它是否被错误的方式触发 err=request\u irq(dev->irq,sja1000\u中断,IRQF\u触发器\u高| IRQF\u共享| IRQF\u一次性, dev->name,(void*)dev); PINFO(“priv->flags=%x\n”,priv->flags); 如果(irq设置irq类型(开发->irq,irq
err=request\u irq(dev->irq,sja1000\u中断,IRQF\u触发器\u高| IRQF\u共享| IRQF\u一次性,
dev->name,(void*)dev);
PINFO(“priv->flags=%x\n”,priv->flags);
如果(irq设置irq类型(开发->irq,irq类型irq级别高))
PERROR(“无法设置irq%d类型,\n”,dev->irq);
其他的
PINFO(“设置irq%d类型成功\n”,开发->irq);
request\u irq
和irq\u set\u irq\u type
似乎可以返回0。但是当我使用irq\u get\u irq\u type
时,它总是返回0
中断号为16。显示以下/proc/interrupt/
它没有改变它的触发类型
CPU0 CPU1 CPU2 CPU3
0: 57 0 0 0 IO-APIC-edge timer
1: 12 0 0 0 IO-APIC-edge i8042
7: 1 0 0 0 IO-APIC-edge
9: 0 0 0 0 IO-APIC-fasteoi acpi
12: 1 0 0 0 IO-APIC-edge
16: 998473 0 49801960 0 IO-APIC 16-fasteoi can0
17: 52 0 0 0 IO-APIC 17-fasteoi mmc0
18: 0 0 0 0 IO-APIC 18-fasteoi mmc1
23: 28409 0 0 0 IO-APIC 23-fasteoi ehci_hcd:usb1, mmc2
87: 1905 0 0 0 PCI-MSI-edge i915
88: 0 0 0 0 PCI-MSI-edge eth0
89: 471 0 5 0 PCI-MSI-edge eth0-TxRx-0
90: 6 0 0 470 PCI-MSI-edge eth0-TxRx-1
91: 6 465 5 0 PCI-MSI-edge eth0-TxRx-2
92: 6 0 10 460 PCI-MSI-edge eth0-TxRx-3
93: 1 0 0 0 PCI-MSI-edge eth1
94: 32 0 0 666 PCI-MSI-edge eth1-TxRx-0
95: 18 506 9 0 PCI-MSI-edge eth1-TxRx-1
96: 23 0 53 485 PCI-MSI-edge eth1-TxRx-2
97: 113 561 13 0 PCI-MSI-edge eth1-TxRx-3
NMI: 31 0 94 21 Non-maskable interrupts
LOC: 1373419 2014 939934 1115589 Local timer interrupts
SPU: 0 0 0 0 Spurious interrupts
PMI: 31 0 94 21 Performance monitoring interrupts
IWI: 2528 0 642 0 IRQ work interrupts
RTR: 0 0 0 0 APIC ICR read retries
RES: 195337 1 19434 42295 Rescheduling interrupts
CAL: 143 162 118 101 Function call interrupts
TLB: 571 0 290 640 TLB shootdowns
TRM: 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 Machine check exceptions
MCP: 4 4 4 4 Machine check polls
ERR: 1
MIS: 0
有没有办法设置IRQ16的触发器类型
apic=debug
将显示配置的IOAPIC端。其余部分在代码中。您已在request\u irq()
call中明确请求活动的高级irq。(注意,irq\u set\u irq\u type()
调用是多余的)我在引导命令行中添加了apic=debug,但是我如何从demsg获得信息来找出16上有这么多irq的原因呢?可能有不同的原因。你必须自己做作业。@0andriy结果是FPGA的家伙不断地发送irq。即未通过清除中断来清除中断源register@deepblue0755你能再详细说明一下你是如何解决你的问题的吗?谢谢