我们先来看下pci_driver结构,它的id_table是一个指向当前驱动所能处理的pci设备的id列表,由于每个pci设备都有一个唯一的标记,因此我们通过pci_device_id结构就可以标记不同的pci设备。
driver则指向下一个pci驱动。
struct pci_driver {
struct list_head node;
char *name;
const struct pci_device_id *id_table; /* must be non-NULL for probe to be called */
int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */
int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
int (*resume_early) (struct pci_dev *dev);
int (*resume) (struct pci_dev *dev); /* Device woken up */
void (*shutdown) (struct pci_dev *dev);
struct pm_ext_ops *pm;
struct pci_error_handlers *err_handler;
struct device_driver driver;
struct pci_dynids dynids;
};
当系统boot时,它会为每一个总线创建一个检测到的设备的链表。我们这里只看pci总线,当boot后,有一个包含所有检测到的pci设备的链表,然后他会load所有的通过pci_register_driver注册的pci驱动(也就是一个驱动链表).此后系统会通过pci_device_id来发现每个pci设备所对应的驱动,当匹配好之后,系统会调用相应的probe函数创建和注册相应的网络设备。
可以看下下面的图:
a图 系统拥有一个设备的列表和一个驱动的列表。
b图 系统通过id_table查找到驱动A所对应的设备dev 1和dev 2
c图 系统查找到驱动B对应的设备dev 3
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0009/3529/f1f42238-7703-30e1-80a2-ad7b5c6cf7b0-thumb.jpg)
- 大小: 15 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0009/3531/c8b71203-8dc7-3ad6-ae37-346508b47c79-thumb.jpg)
- 大小: 20.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0009/3533/3ba50813-68b9-3673-98c2-784820367f86-thumb.jpg)
- 大小: 27.4 KB
分享到:
相关推荐
### PCI设备初始化详解 #### 一、概述 在计算机启动过程中,硬件的初始化是一个至关重要的环节,特别是对于基于PCI(Peripheral Component Interconnect)总线的设备来说更是如此。本文将详细探讨“PCI设备初始化...
PCI设备初始化编程是嵌入式系统中至关重要的一个环节,特别是在PowerPC平台上,因为PowerPC处理器广泛应用于工业控制、通信设备等需要与多种外设交互的领域,而PCI(Peripheral Component Interconnect)总线则是...
根据提供的文件信息,本文将详细解析“PCI设备初始化编程的过程”。PCI(Peripheral Component Interconnect)是一种高速的并行计算机扩展总线标准,用于附加硬件设备到计算机上。本篇文章主要聚焦于PowerPC系统中...
### PCI设备BAR空间的初始化详解 #### 一、引言 在现代计算机系统中,PCI(Peripheral Component Interconnect,外围部件互连)总线是一种重要的高速扩展总线标准,广泛应用于连接各种硬件设备,如显卡、声卡、...
PMON 设备初始化代码是 PMON 设备的核心组件之一,它负责初始化 PMON 设备的各个组件,包括 PCI 设备、内存、时钟频率、异常处理等。下面我们将对 PMON 设备初始化代码进行详细的分析。 1. PCI 设备初始化 PMON ...
2. **PCI设备初始化**:操作系统在加载时,会继续进行PCI设备的枚举。它通过与PCI总线控制器交互,读取每个设备的配置寄存器,获取设备的类代码、子类代码等,以便确定设备类型并分配适当的资源。 3. **资源分配**...
### PMON环境下的PCI设备初始化 #### 一、PMON概述 PMON(Primary Monitor)是一个轻量级的操作系统内核,主要用于嵌入式系统的启动和调试。它提供了基本的硬件初始化、命令行接口等功能,并能够加载和启动其他操作...
Linux内核的PCI设备初始化分为三个阶段:PCI BIOS、PCI修正和PCI设备驱动程序。PCI BIOS提供了一组通用的函数来访问PCI设备。PCI修正部分针对非Intel平台,例如在Alpha AXP系统上。PCI设备驱动程序在系统启动时运行...
主要包括PCI设备初始化、网络协议栈初始化、交换守护进程kswapd的工作机制、日志块设备驱动加载以及设备文件系统(devfs)和伪终端(pty)的配置。 #### PCI设备初始化 在Linux内核启动过程中,PCI(Peripheral ...
#### PCI设备初始化 在内核初始化早期阶段,会有一系列针对硬件设备的检测与配置工作。其中,PCI(Peripheral Component Interconnect)总线设备的初始化尤为关键。文档中的信息显示了内核初始化PCI设备的一部分...
此外,`dmesg`命令可以查看系统启动时的日志,其中包括PCI设备初始化过程中的信息。 总结: 在Linux中,PCI是一个至关重要的系统组件,它为硬件设备提供高效的数据传输路径。通过理解PCI的工作原理和内核对其的支持...
2. **PCI配置空间**:包含设备ID、厂商ID、基址寄存器、中断线路等信息,是PCI设备初始化的关键部分。 3. **菊花链配置**:PCI9052支持的配置方式,可以减少对PCI总线的占用,提高系统效率。 4. **时序和同步**:...
这些信息在PCI设备初始化时由硬件提供,用于系统识别和匹配相应的驱动程序。 接下来,向导会自动生成三个主要的类:驱动程序类、设备类和IRP排队处理类。驱动程序类负责加载、卸载等管理工作,设备类实现具体的功能...
然而,Linux Live USB启动速度一直是亟待解决的技术难题,尤其是其在设备初始化阶段,尤其是PCI设备初始化过程中的耗时问题,严重制约了其实际应用。因此,针对Linux Live USB启动优化的研究具有重要的实际意义和...
文章详细介绍了PCI9052在ISA模式下的应用开发流程与方法,强调了配置EEPROM(Electrically Erasable Programmable Read-Only Memory)的重要性,因为EEPROM存储着PCI设备的配置信息,是PCI设备初始化的关键。...
本文详细描述了在 Linux 中开发 PCI 设备驱动程序的过程,包括 PCI 地址空间、PCI 配置头等相关内容,并提供了对 PCI 设备进行初始化的主要源码和详细解释。 PCI 总线是一种将系统中的外部设备以结构化和可控的方式...
/* 初始化PCI设备 */ dev->pdev = pdev; dev->irq = pci_enable_device(pdev); /* 更多设备配置和操作 */ return 0; } static void __exit my_pci_exit(void) { /* 卸载PCI设备 */ pci_unregister_driver...
- 配置周期是PCI设备初始化和配置的过程,TI-PCI2050B桥接器能处理配置请求,确保设备在PCI或PCIE总线上的正确识别和配置。 3. 特殊周期生成与总线仲裁 - 特殊周期生成功能使得TI-PCI2050B能够处理如中断请求、...