2016-10-16 155 views
1

Hello iam開發Xilinx FPGA和Intel PC之間的PCIe通信...我寫了一個內核模塊(linux驅動程序),我使用INTx中斷。 我面臨中斷處理的問題....驅動程序中的PCI Express中斷

加載內核模塊:

從lspci的:INT A - > 11

從配置看:INT A - > 11

從/ proc /中斷:沒有,因爲IRQ不registerd

加載內核模塊後:

從lspci的:INT A - > 16

從配置讀:INT A - > 11

從/ proc /中斷:INT 11 registerd

當我運行在程序它正在向IRQ-16發送中斷,並表示沒有任何身體關心,它被禁用。

在我的宏module_init

request_irq(dev->gIrq, XPCIe_IRQHandler, IRQF_SHARED, gDrvrName, gDev)); 

我的中斷服務例程:

static irqreturn_t XPCIe_IRQHandler(int irq, void *dev_id, struct pt_regs *regs) 
{ return IRQ_HANDLED; } 

所以任何人都可以說,問題可能是什麼....

回答

0

你不」 t顯示您的dev->gIrq從哪裏設置,但是您的內核模塊應該採取中斷編號來自與您的設備關聯的struct pci_dev。見include/linux/pci.h此評論:

struct pci_dev { 
    ... 
    /* 
    * Instead of touching interrupt line and base address registers 
    * directly, use the values stored here. They might be different! 
    */ 
    unsigned int irq; 
+0

而在最新的內核中,你不應該這樣做,而是使用'pci_alloc_irq_vectors()'&Co來代替。 – 0andriy

0

呀吉爾, 感謝您的回覆..代碼

request_irq(dev->gIrq, XPCIe_IRQHandler, IRQF_SHARED, gDrvrName, gDev)); 

的dev-> gIrq不過我已經從結構的pci_dev採取 只。

安迪的IAM不使用任何MSI或者MSI-X中斷使用pci_alloc_irq_vectors()。