为什么ififd的pci linux实现使用“ platform_driver”而不是“ pci_driver”?

时间:2018-09-26 13:08:46

标签: c linux linux-kernel can-bus pci

linux主线内核(link)的PCI-IFIFD CAN实现(drivers / net / can)使用platform_driver结构而不是pci_driver结构。
我在区分这两种结构时遇到了一些麻烦。因此,我通知自己:
-platform driver vs normal device driver
-platform_driver
-pci_driver

根据第一个消息来源:

  

与PCI或USB设备不同,I2C设备不是在硬件级别(运行时)枚举的。相反,软件必须(在编译时)知道每个I2C总线段上连接了哪些设备。 因此USB和PCI不是平台设备

如果是这种情况,为什么要使用platform_driver结构进行PCI ififd实现?
另外,有人如何使用ififd将此驱动程序用于pci卡?

1 个答案:

答案 0 :(得分:2)

您必须区分platform_driver是总线(控制器)驱动程序,而pci_driver是PCI设备驱动程序(总线上的客户端)。

这是CAN总线驱动程序CAN bus driver for IFI CANFD controller

总线控制器(适配器)注册为platform_devices的内核

PCI驱动程序提供挂钩(回调)和结构以将PCI设备注册到内核 PCI层并将其绑定到设备。

pci_register_driver()用于在pci_driver表中定义的PCI总线上为具有类,供应商和设备ID的现有PCI设备注册struct pci_device_id xxx_pci_tbl[]结构,以与设备匹配。

struct pci_driver xxx_driver = {
    .name           = DRV_NAME,
    .probe          = xxx_pci_probe,
    .remove         = xxx_pci_remove,
    .id_table       = xxx_pci_tbl

/Documentation/PCI/pci.txt