我有一个Linux系统,我正在连接到定制硬件。(具体来说,这是一个带有FPGA的SoC )。
我正在尝试编写一个内核模块,它将响应来自我设备的中断。它包含对request_irq的调用,但这是通过调用uio_register_device来完成的。当我运行insmod时,它会以“无效的参数”失败。
在浏览代码一段时间之后,我最终在模块init函数中添加了这些行:
struct irq_desc *p;
p = irq_to_desc(89);
if (!p) {
printk(KERN_ALERT "No descriptor allocated for IRQ number
假设有一个端口映射的I/O设备,它在IRQ线路上任意生成中断。设备的挂起中断可以通过对特定寄存器的单个outb调用来清除。
此外,假设下面的中断处理程序通过request_irq分配给相关的IRQ行
irqreturn_t handler(int irq, void *data)
{
/* clear pending IRQ on device */
outb(0, CLEAR_IRQ_REGISTER_ADDR);
/* device may generate another IRQ at this point,
* but