Linux PCI pci_dev 的创建

本文探讨Linux PCI驱动架构,详细解释struct pci_dev如何描述设备,以及PCI设备和驱动的匹配原理。在系统初始化时,PCI设备被创建,通过pci_scan_device()函数扫描PCI总线并为每个设备创建struct pci_dev对象。对于热插拔设备,插入后也会创建相应的设备。了解这些细节有助于深入理解PCI驱动的工作机制。
摘要由CSDN通过智能技术生成

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;
}

这个函数就是

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值