码迷,mamicode.com
首页 > 系统相关 > 详细

linux pci

时间:2020-09-12 21:46:09      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:特定   配置寄存器   connect   版本   它的   架构   soft   总线   ice   

概述

PCI(Peripheral Component Interconnect,外围设备互联)的简称,是普遍使用在桌面及更大型的计算机上的外设总线。

PCI 架构被设计为 ISA 标准的替代品,它有三个主要目标:获得在计算机和外设之间传输数据时更好的性能;尽可能的平台无关;简化往系统中添加和删除外设的工作。

PCI寻址

我们先来看一个例子,假设我的电脑装有 1G 的 RAM,1G 以后的物理内存地址空间都是外部设备 IO 在系统内存地址空间上的映射。 /proc/iomem 描述了系统中所有的设备 I/O 在内存地址空间上的映射。我们来看地址从 1G 开始的第一个设备在 /proc/iomem 中是如何描述的:40000000-400003ff : 0000:00:1f.1

这是一个 PCI 设备,40000000-400003ff是它所映射的内存地址空间,占据了内存地址空间的 1024 bytes 的位置,而 0000:00:1f.1则是一个PCI外设的地址,它以冒号和逗号分隔为4个部分,第一个16位表示域,第二个8位表示一个总线编号,第三个5位表示一个设备号,最后是3位,表示功能号。

因为 PCI 规范允许单个系统拥有高达256个总线,所以总线编号是8位。但对于大型系统而言,这是不够的,所以引入了域的概念,每个 PCI 域可以拥有最多256个总线,每个总线上可支持32个设备,所以设备号是5位,而每个设备上最多可有8种功能,所以功能号是3位。由此,我们可以得出上述的PCI设备的地址是0号域0号总线上的31号设备上的1号功能。

lspci

lspci 用于查看 PCI 的挂载设备。

-t 以树状形式展现

-v 查看详细信息

技术图片

lspci没有标明域,但对于一台PC而言,一般只有一个域,即0号域。 在单个系统上,插入多个总线是通过桥(bridge)来完成的,桥是一种用来连接总线 的特殊PCI外设。所以 PCI 系统的整体布局组织为树型。

配置地址空间

每一个 PCI 设备都有它映射的内存地址空间和它的 I/O 区域,这点是比较容易理解的。除此之外,PCI设备还有它的配置寄存器。有了配置寄存器,PCI 的驱动程序就不需要探测就能访问设备。配置寄存器的布局是标准化的,配置空间的4个字节含有一个独一无二的功能 ID,因此驱动程序可通过查询外设的特定 ID来识别其设备。所以,PCI接口标准在ISA之上的主要创新在于配置地址空间。

前文已讲过,PCI驱动程序不需要探测就能访问设备,而这得益于配置地址空间。在系统引导阶段,PCI硬件设备保持未激活状态,但每个 PCI 主板均配备有能够处理 PCI 的固件,固件通过读写 PCI 控制器中的寄存器,提供了对设备配置地址空间的访问。 配置地址空间的前64字节是标准化的,它提供了厂商号,设备号,版本号等信息,唯一标识一个PCI设备。同时,它也提供了最多可多达6个的I/O 地址区域,每个区域可以是内存也可以是I/O地址。这几个 I/O 地址区域是驱动程序找到设备映射到内存和 I/O 空间的具体位置的唯一途径。有了这两点, PCI 驱动程序就完成了相当于探测的功能。关于这64个字节的配置空间的详细情况,可参阅《Linux设备驱动程序第三版》P306 。

lspci 主要扫描 /sys/bus/pci/devices 中的文件,并根据 PCI 设备的 vender 及 device到 /usr/share/hwdata/pci.ids 去做设备名称匹配并输出 。

本文参阅:https://www.bbsmax.com/A/l1dy3Qe9Je/

linux pci

标签:特定   配置寄存器   connect   版本   它的   架构   soft   总线   ice   

原文地址:https://www.cnblogs.com/tongyishu/p/13592662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!