我写了一个 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,
};
在这里,我将调用 device_init()fct:
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;
}
我没有得到任何错误输出或类似的东西,但是我的驱动程序当然不起作用,因为从未调用过 device_init(...)。