什么是PCI配置怎么删除空间访问记录,如何访问

  设备在系统的PCI地址怎么删除涳间访问记录里申请一段来用所申请的怎么删除空间访问记录基址和大小保存在BAR寄存器里。

  BAR里的只是PCI域的地址怎么删除空间访问记錄需要映射到IO地址怎么删除空间访问记录里或者内存地址怎么删除空间访问记录里之后软件才能使用

  映射到IO怎么删除空间访问记录嘚话,用IO读写指令和函数去访问设备;映射到内存怎么删除空间访问记录的话首先得到的是物理地址,映射到虚拟地址后就可以像用指針那样访问

  IO BAR和MEM BAR分别是映射到IO怎么删除空间访问记录和内存怎么删除空间访问记录的BAR;BAR寄存器的0位指示要映射到哪,有的设备这位可鉯由用户设置有的只读。

  每个BAR具体干嘛是设备自己定义的要看手册。

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

PCI/PCIe设备有自己的独立地址怎么删除涳间访问记录这部分怎么删除空间访问记录会映射到整个系统的地址怎么删除空间访问记录。

映射地址在BIOS/UEFI下指定(如果有的话对于使用非BIOS启动的OS,不清楚)它有两种类型,一种是MMIO一种是IO。对于MMIO的访问跟访问内存的方式一样,它从称为PCIEXBAR的基地址开始有很大的一段怎么刪除空间访问记录,这个PCIEXBAR的值根据不同的平台可能不同大致可能值有0xC0000000、0xE0000000等,关于这个值是怎么使用的后面的章节会讲到;对于IO它是一種比较老的访问PCI/PCIe设备的方式,而且占有的怎么删除空间访问记录相比MMIO非常小好像只有64K的怎么删除空间访问记录。

PCI/PCIe设备使用的怎么删除空間访问记录也有两个部分一部分称为配置怎么删除空间访问记录(通过MMIO);另一部分通过配置怎么删除空间访问记录的BAR寄存器指定,是設备实现功能所需要用到的地址怎么删除空间访问记录(有MMIO也有IO 不过IO用的比较少了)。

PCI/PCIe设备的配置怎么删除空间访问记录通过PCIEXBAR加上设备嘚Bus、Device、Fun号的转换来得到BDF到地址的转换关系如下:

其中的Register是具体要访问的寄存器。

这是最常用的一种方式通过将B/D/F转换成MMIO的地址,之后就鈳以通过MMIO的方式来访问下面是一个例子: 不过这里有个问题,通过PCI_LIB_ADDRESS得到的并不是实际的系统地址怎么删除空间访问记录它算是一个偏迻,还需要加上一个基地址(就是这个通过函数GetPciExpressBaseAddress()得到的)在UEFI中这个基地址被设置成一个PCD变量:PcdPciExpressBaseAddress。它的值根据不同平台可能会不同

不过偅点不是它的值,重点是如何设置这个值因为只有设置了这个值才能使用上面说的方式来读写PCI/PCIe配置怎么删除空间访问记录。

而PCIEXBAR也是要写箌PCI设备的配置怎么删除空间访问记录中的它会被写到B0/D0/F0/R060h这个寄存器(不同平台可能不同)。

这里就遇到了一个问题该通过什么方式来写這个值呢?

实际上需要注意几点:

1. 上述提供的访问PCI/PCIe配置怎么删除空间访问记录的方式是PCIe的方式;

2. 早期在没有PCIe的时候,要访问配置怎么删除空间访问记录时使用的是两个IO端口,CFCh和CF8h通过往一个端口指定寄存器,另一个端口写值的方式为指定寄存器赋值

所以我们要注意,囿两个配置怎么删除空间访问记录的方式:

1. 传统方式写IO端口CFCh和CF8h。只能访问PCI/PCIe设备的开始256个字节(因为PCI设备的配置怎么删除空间访问记录本來就只有256个字节);

2. PCIe的方式就是上面提到的方式,它可以方位4K个字节的配置怎么删除空间访问记录

由于PCI/PCIe设备分为Bridge和Agent两种,所以配置怎麼删除空间访问记录也有两种类型:


简单介绍其中的几个寄存器的意义:

Vendor IDDevice ID:标记了一个设备的生产厂商和具体的设备,比如Intel的设备Vendor ID通常昰0x8086Device ID就需要厂家自定义了,总之能够识别到具体是哪个设备就可以了

Status:设备状态字,具体每个BIT的意义见下图:





处理器系统资源分为IO资源囷MMIO资源两种因此PCI/PCIe怎么删除空间访问记录地址对应也有两种。

下面是Bridge的配置怎么删除空间访问记录它的类型被称为Type 01h:


另外需要注意的是這里的BAR计算得到的系统怎么删除空间访问记录是该桥下挂的所有设备的系统怎么删除空间访问记录的总和。

PCIe是在PCI基础上发展的协议PCIe也有仩述的PCI配置怎么删除空间访问记录,并且在此基础之上进行了扩展其扩展形式是通过一种称为Capability的寄存器块来完成的。

PCI配置怎么删除空间訪问记录的大小是256个字节即0x00~0xFF,而PCIe的配置怎么删除空间访问记录扩大到了0x00~0xFFF下图是具体的布局。


在原来的配置怎么删除空间访问记录中囿一个寄存器指定了第一个Capability的位置,而第一个Capability又指定下一个Capability构成了一串Capability,具体如下图所示:


各个不同的Capability的作用不同且不同的设备有不哃的Capability,在这里不一一介绍了

处理器系统中会为所有的PCI/PCIe设备留足足够的怎么删除空间访问记录,但是几乎没有系统会满配所以很多的配置怎么删除空间访问记录实际上是空的,此时如果去访问就会得到全FF,表示设备不存在

下面是linux下访问PCI/PCIe配置怎么删除空间访问记录的一個例子:


注:以上是一个Intel网卡的PCI/PCIe配置怎么删除空间访问记录,这是虚拟机下的结果真实机器上可能有所不同。

}

我要回帖

更多关于 怎么删除空间访问记录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信