第六节教材:pci子系统跟网卡由于pci设备在x86架构以.pdfVIP

第六节教材:pci子系统跟网卡由于pci设备在x86架构以.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PCI PCI 第六章:PPCCII子系统与网卡 由于PCI设备在x86架构以及其他架构的系统中都很流行,所以我们会花一些篇幅描述内 核如何管理这些设备,重点描述网络设备。这一章的内容会帮助你理解第八章中有关设备注 册的内容。你也会了解到PCI是如何完成诸如设备探测,电源管理等功能。如果想要更深入 了解PCI,比如有关PCI设备的设计,实现等细节,你可以参考LinuxDeviceDrivers和 UnderstandingtheLinuxKernel或者是PCI规范。 PCI子系统(也可以称作PCI层)提供了内核中不同PCI设备所公用的函数。这个子系统 减轻了不同设备驱动程序员的工作负担,使得PCI驱动可以被组织成一致的风格。当然,这 也使得内核收集和管理设备的信息变得容易了,这些信息包括审计信息和一些计数器。 在本章中,我们将讨论一些在PCI子系统中使用的关键数据结构,以及这些数据结构在一 个典型的PCI设备驱动中如何初始化的。我也会简单的描述一下PCI电源管理以及Wake- On-LAN功能。 6.1 6.1 66..11 本章所要描述的数据结构 下面是一些在PCI子系统中会用到的数据结构。当然,内核中有许多PCI相关的数据结 构,但是下面这些对理解本书中的内容是必须的。第一个数据结构是在 include/linux/mod_devicetable.h中定义的,其他两个在include/linux/pci.h中定义。 pci_device_id 设备标识号。这不是Linux 中定义的ID,而是在PCI标准中定义的ID。在下一节“注册PCI 网卡“中会描述这个ID 的定义,在后面的“注册PCI设备的例子“一节中会展示一个例子。 pci_dev 每个PCI设备都会分配一个pci_dev 实例,就像每个网络设备都会分配一个net_device实 例。内核使用这个数据结构来引用一个PCI设备。 pci_driver 这个数据结构定义了PCI子系统和PCI设备之间的接口。这个数据结构中有很多函数指 针。所有的PCI设备都会用到这个结构。在“ 注册PCI设备的例子”一节中会看到它的定 义,以及它如何初始化的例子。 pci_driver结构定义了一个PCI设备驱动。下面描述了它的主要成员变量,重点是网络设备 相关的变量。相关的函数指针在不同的设备驱动中初始化成相应的函数。 char*name 设备的名称 conststructpci_device_id *id_table 内核用这个ID 数组关联相应的设备。在“ 注册PCI设备的例子”一节中会看到相应的例 子。 int(*probe)(structpci_dev *dev,conststructpci_device_id *id) 当PCI子系统通过PCIId 数组找到相应的PCI设备驱动时会调用这个函数。这个函数使 能相应的硬件,分配net_device结构,初始化并且注册新设备。在驱动中还会分配其他一些 数据结构(比如发送和接收网络报的缓冲区),这些数据结构在设备中会用到。 [*] 第八章会描述网络设备注册。 void(*remove)(structpci_dev *dev) 当从系统中删除一个设备或者热插扒设备被拔下时,PCI子系统会调用这个函数。这个函 数与probe函数相对应,在这个函数中会释放相应的数据结构。 网络设备驱动调用这个函数释放设备初始化时分配的I/O 端口和I/O 内存,释放 net_device结构以及辅助的一些数据结构,这些数据结构通常是在probe函数中分配的。 int(*suspend)(struct pci_dev *dev,pm_message_tstate) int(*resume)(structpci_dev*dev) 这个函数在设备在休眠状态和激活状态之间切换时调用。请参考后面的“电源管理和 Wake-On-LAN”一节的内容。 int(*enable_wake)(struct pci_dev*dev,u32state,intenable) 通过这个函数,设备驱动可以生成电源管理信号来激活或者关闭系统。请参考“电源管理 和Wake-on-LAN“一节。 structpci_dynids dynids 动态id,请看下一节。 在下一节中,有一个pci_driver初始化的例子。

文档评论(0)

karin + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档