首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PCIe中断号

PCIe中断号
EN

Stack Overflow用户
提问于 2014-06-17 12:37:54
回答 1查看 4.7K关注 1票数 1

我正在尝试编写一个内核模块,我可以使用它来服务PCIe MSI中断。现在,我在尝试配置中断时遇到了困难,并试图跟随"Linux设备驱动程序Ed.3“,书中写道:

“驱动程序不需要费心检查中断号,因为在PCI_INTERRUPT_LINE中找到的值肯定是正确的。”

当然,这似乎是设置我的中断的逻辑方式:

代码语言:javascript
复制
err = pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &myirq);
if(err)
{
    printk(KERN_WARNING "Could not get IRQ number\n");
    return err;
}
err = request_irq(myirq, fpga_isr, IRQF_SHARED, fpga_driver.name, dev);

现在这把我登记为中断60。然后我开始使用jTag手动触发一个中断,并收到一条内核消息,上面说中断没有一个处理程序(中断576)。如果我将irq_line硬编码到576,那么request_irq就会失败。

找出我的中断线路最好的方法是什么?为什么我不能得到我需要的IRQ呢?

还有一件事,在引导过程中,我的设备被自动设置为IRQ引脚1(遗产中断A),它的相关秒设置为irq行572,这也是dev->irq中存储的值。如果引导序列自动将IRQ设置为pin 0(保留中断已禁用),那么dev->irq会指向我的MSI中断@ 576吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-17 14:41:50

对于MSI,您需要首先使用pci_enable_msi在设备上启用MSI中断。MSI中断与“标准PCI”中断不一样。调用pci_enable_msi后,中断号应该从pci_dev->irq获得,用于调用request_irq。在内核源代码树中寻找一个示例。

更多信息见文档/PCI/MSI-HOWTO.txt

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24264030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档