Linux PCIe驱动程序探测功能不可用';我没打电话

Linux PCIe驱动程序探测功能不可用';我没打电话,linux,driver,fpga,pci,probe,Linux,Driver,Fpga,Pci,Probe,我已经写了一个PCIe驱动程序。在调试过程中,我注意到我的探测函数从未被调用,我看不出问题所在。希望你能帮助我 代码如下: static int device_init(struct pci_dev *dev, const struct pci_device_id *id) { ... } static struct pci_device_id pci_drv_tbl[] = {{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_XILINX_PCIE, PCI_ANY

我已经写了一个PCIe驱动程序。在调试过程中,我注意到我的探测函数从未被调用,我看不出问题所在。希望你能帮助我

代码如下:

static int device_init(struct pci_dev *dev, const struct pci_device_id *id)
{ ... }

static struct pci_device_id pci_drv_tbl[] = {{ PCI_VENDOR_ID_XILINX, PCI_DEVICE_ID_XILINX_PCIE, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0 }, { 0,}};

static struct pci_driver pci_drv =  
{                                                  
.name= "Xilinx PCIe",
.id_table= pci_drv_tbl,
.probe= device_init,
.remove= device_deinit,
};
在这里,我将调用设备_init()fct:


我没有得到任何错误输出或类似的东西,但我的驱动程序当然不工作,因为从未调用过设备_init(…)

发现问题:设备ID不匹配。但是现在我在插入modul(insmod)时确实遇到了一个错误:错误:无法在fdcfe000处处理内核分页请求。另一方面,有一个带有PIO示例DesignUpdate的Virtex 7:错误来自指针*dev。如果我使用dev=pci\u get\u设备(供应商ID,设备ID,dev);它起作用了。现在我想知道在第一个例子中我做错了什么?我需要初始化或类似的东西吗?意思是你的.probe(device_init)函数调用吗?要检查它,请将printk置于if条件之上。然后您可以确定问题发生的位置。
static int pci_drv_init (void)
{
    if(register_chrdev(drvMajor, drvName, &pci_fops) == 0) {
         if (pci_register_driver(&pci_drv) == 0) {
              printk("Nach pci_register_driver \n");
              return 0;
         }
         printk("register_chrdev failed!\n");
    }
    return -EIO;
}