Linux 下PCI驱动架构是Linux BUS,DEVICE,DRIVER架构。下面所有代码来自linux3.13.
struct pci_dev 是描述device的数据结构。
struct pci_driver是描述driver的数据结构。
struct pci_bus是描述bus的数据结构。
device和driver都是挂 bus上的。
PCI 的 driver和device要做匹配验证的时候,验证的是vendor,id,class信息。
static inline const struct pci_device_id * pci_match_one_device(const struct pci_device_id *id, const struct pci_dev *dev)
{
if ((id->vendor == PCI_ANY_ID || id->vendor == dev->vendor) &&
(id->device == PCI_ANY_ID || id->device == dev->device) &&
(id->subvendor == PCI_ANY_ID || id->subvendor == dev->subsystem_vendor) &&
(id->subdevice == PCI_ANY_ID || id->subdevice == dev->subsystem_device) &&
!((id->class ^ dev->class) & id->class_mask))
return id;
return NULL;
}
这个函数就是