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卡?
答案 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