c - 为什么 ififd 的 pci linux 实现使用“platform_driver”而不是“pci_driver”?
问题描述
linux主线内核( link)的PCI-IFIFD CAN实现(drivers/net/can)使用的是platform_driver结构而不是pci_driver结构。
我在区分这两种结构时遇到了一些麻烦。因此我告诉自己:
-平台驱动程序与普通设备驱动程序
- platform_driver
- pci_driver
根据第一个来源:
与 PCI 或 USB 设备不同,I2C 设备不在硬件级别(在运行时)枚举。相反,软件必须知道(在编译时)每个 I2C 总线段上连接了哪些设备。所以 USB 和 PCI 不是平台设备。
如果是这种情况,为什么 PCI ififd 实现使用 platform_driver 结构?
此外,有人如何使用 ififd 将此驱动程序用于 pci 卡?
解决方案
您必须区分platform_driver
哪个是总线(控制器)驱动程序,pci_driver
哪个是 PCI 设备驱动程序(总线上的客户端)。
这是IFI CANFD 控制器的 CAN 总线驱动程序 CAN 总线驱动程序
总线控制器(适配器)注册到内核为platform_devices
PCI 驱动程序提供挂钩(回调)和结构来将 PCI 设备注册到内核 PCI 层并将其绑定到设备。
pci_register_driver()
用于在表中定义的 PCI 总线上注册pci_driver
现有 PCI 设备的结构,其中struct pci_device_id xxx_pci_tbl[]
包含类、供应商和设备 ID,以匹配设备。
struct pci_driver xxx_driver = {
.name = DRV_NAME,
.probe = xxx_pci_probe,
.remove = xxx_pci_remove,
.id_table = xxx_pci_tbl
推荐阅读
- java - 通过 testNG 运行课程时自动装配的替代方法是什么?
- c++ - 为什么 CMake 的“ExternalProject_Add”命令不构建这个 autotools 库?
- python - 每次按下按钮时,如何更改 tkinter 代码以随机绘制?
- face-api - 如何使用 face-api.js 检测活人脸而不是照片?
- .net - 使用 XPathCompiler 引用用户定义的 xsl:function
- c# - C# libreoffice 基本连接
- html - 在 Django 中访问模型属性
- python - 使用列表时,Tkinter 按钮只能工作一次
- gnome-shell - 如何通过命令行启动 gnome 的内置屏幕录像机?
- tensorflow - ImportError Keras 后端