PCIE扫描过程

PCI-E 基础知识 一、PCI-E/PCI拓扑结构 PCI-E点对点结构 PCI总线结构 二、PCI-E总线特性 协议支持258个bus、每条bus最多支持32个device,每个device最多支持8个function 由BDF构成了每个PCI-E设备几点的身份证,用于PCI-E地址空间寻址。 三、PCI-E一般拓扑图 CPU --> RC --> SWITCH --> ENDPOINT --... 阅读详情
本文转载自 https://blog.youkuaiyun.com/Best_Ccc/article/details/78903642

1. PCIE扫描过程

从按下PC的电源按钮开始,BIOS就接管系统控制权开始工作,它会先进行一些内存和设备的初始化工作(当然,也包括PCI设备),由于商业上的原因,Phoenix等厂商的BIOS代码需要授权协议,下面以另外一款开源BIOS(openbios)为例,来剖析BIOS中,PCIe设备是如何被找到以及初始化的。

PCI设备的扫描是基于深度优先搜索算法(DFS:Depth First Search),也就是说,下级分支最多的PCI桥将最先完成其子设备的扫描。下面以图片来具体说明,BIOS是如何一步步完成PCI 设备扫描的。

第一步:PCI Host 主桥扫描Bus 0上的设备(在一个处理器系统中,一般将与HOST主桥直接相连的PCI总线被命名为PCI Bus 0),系统首先会忽略Bus 0上的D1,D2等不会挂接PCI桥的设备,主桥发现Bridge 1后,将Bridge1下面的PCI Bus定为 Bus 1,系统将初始化Bridge 1的配置空间,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成0和1,以表明Bridge1的上游总线是0,下游总线是1,由于还无法确定Bridge1下挂载设备的具体情况,系统先暂时将Subordinate Bus Number设为0xFF。如图 1.1所示:

图 1.1  PCIE扫描第一步

第二步:系统开始扫描Bus 1,将会发现Bridge 2。系统将Bridge 2下面的PCI Bus定为Bus 2,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成1和2,和上一步一样暂时把Bridge 2的Subordinate Bus Number设为0xFF。如图 1.2所示:

图 1.2 PCIE扫描第二步

第三步:

系统继续扫描Bus 2,将会发现Bridge 4。系统将Bridge 4下面的PCI Bus定为Bus 3,并将该桥的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成2和3,此后

系统继续扫描后发现Bus 3下面已经没有任何Bridge了,意味着该PCI总线下已经没有任何挂载下游总线了,因此Bridge 4的Subordinate Bus Number的值已经可以确定为3了。

如图 1.3所示:

图 1.3 PCIE扫描第三步

第四步:

完成Bus 3的扫描后,系统返回到Bus 2继续扫描,发现Bus 2下面已经没有其他Bridge了。此时Bridge 2的Subordinate Bus Number的值也已经可以确定为3了。如图 1.4所示:

图 1.4 PCIE扫描第四步

第五步:

完成Bus 2的扫描后,系统返回到Bus1继续扫描,会发现Bridge 3,系统将Bridge 3下面的PCI Bus定为Bus 4。并将Bridge 4的Primary Bus Number 和 Secondary Bus Number寄存器分别设置成1和4,此后系统继续扫描后发现Bus 4下面已经没有任何Bridge了,意味着该PCI总线下已经没有挂载任何下游总线了,因此Bridge 3的Subordinate Bus Number的值已经可以确定为4了。如图 1.5所示:

图 1.5 PCIE扫描第五步

第六步:

完成Bus 4的扫描后,系统返回到Bus 1继续扫描, 发现Bus 1下面已经没有其他Bridge了。此时Bridge 1的Subordinate Bus Number的值已经可以确定为4,系统返回Bus 0继续扫描(Bus 0下如果有其他它Bridge,将重复上述的步骤进行扫描)。至此,本例中的整个PCI的设备扫描已经完成了。最终的设备和总线的扫描结果如图 1.6所示

图 1.6 PCIE扫描第六步

一般来说,可以通过两个寄存器来访问PCI的配置空间(寄存器CONFIG_ADDRESS与CONFIG_DATA),在x86体系下,这两个寄存器分别对应0xCF8和0xCFC端口,对配置空间的访问都是通过对这两个寄存器的读写来实现先。CONFIG_ADDRESS寄存器的具体位组成如图 1.7所示:

图 1.7 x86配置寄存器

Bus Number : 总线号(8 bit),范围0--255。

Device Number: 设备号(5 bit),范围0--31。

Function Number: 功能号(3 bit),范围0--7。

Register Number: 寄存器号(6 bit),范围0--63(配置空间一共256个字节,分割成64个4字节的寄存器,从0--63编号)。

每个PCI设备可根据上图所示的四个信息:Bus Number, Device Number, Function Number,Register Number来进行具体设备的定位并对其配置空间访问。当访问PCI设备的配置空间时,先根据以上格式设置CONFIG_ADDRESS寄存器,然后再读取CONFIG_DATA寄存器即可得到相应的配置空间寄存器的值。通过以上这些步骤,BIOS就完成了所有PCI设备的扫描,并且为每个设备分配好了系统资源。

2.2.2 PCIe控制器——事务层——总线传输事务 PCIe中有多种总线传输类型,以下根据不同类型来详述。 阅读详情

相关推荐

PCIE那些事之linux枚举流程

包含枚举流程的原理和linux 枚举简要分析

xwb1040885790的博客 1876

PCI控制器扫描PCI总线过程解析

I/O空间和存储空间的区别:操作I/O地址空间,数据是未知的,操作存储空间,结果是已知的。如果是存储空间,写进去是1那读出来应该也是1;但是I/O地址,状态可能是由I/O外部决定的,去读I/O端口,这个端口是1还是0,由外部决定;

weixin_42031299的博客 1239

pcie 的function_PCIE扫描过程

1. PCIE扫描过程从按下PC的电源按钮开始,BIOS就接管系统控制权开始工作,它会先进行一些内存和设备的初始化工作(当然,也包括PCI设备),由于商业上的原因,Phoenix等厂商的BIOS代码需要授权协议,下面以另外一款开源BIOS(openbios)为例,来剖析BIOS中,PCIe设备是如何被找到以及初始化的。PCI设备的扫描是基于深度优先搜索算法(DFS:Depth First Sear...

weixin_39674190的博客 672

PCIE设备的扫描过程

PCIE设备的扫描过程

phmatthaus的专栏 2204

PCIe 枚举过程3

转自:原来PCIe这么简单,一定要看!_Bus 硬盘是大家都很熟悉的设备,一路走来,从HDD到SSD,从SATA到NVMe,作为NVMe SSD的前端接口,PCIe再次进入我们的视野。作为x86体系关键的一环,PCIe标准历经PCI,PCI-X和PCIe,走过近30年时光。其中Host发现与查找设备的方式却一脉沿袭,今天我们先来聊一聊PCIe设备在一个系统中是如何发现与访问的。 首先我们来看一下在x86系统中,PCIe是什么样的一个体系架构。下图是一个PCIe的拓扑结构示例,PCIe协议支持256个Bu

wmzjzwlzs的专栏 3057

【DSP开发】【VS开发】PCIE设备扫描过程

初步了解完PCI总线标准之后,我们接下来正式开始PCIe设备的漫游之旅。从我们按下PC的电源按钮开始,BIOS就接管系统控制权开始工作,它会先进行一些内存和设备的初始化工作(当然,也包括我们的PCI设备),由于商业上的原因,Phoenix等厂商的BIOS代码需要授权协议,在此,我们以另外一个款开源BIOS(openbios)为例,来剖析BIOS中,我们的PCIe设备是如何被找到以及初始化的。

ZhangPY的专栏 817

PCIE扫描过程 - 转载

1. PCIE扫描过程 从按下PC的电源按钮开始,BIOS就接管系统控制权开始工作,它会先进行一些内存和设备的初始化工作(当然,也包括PCI设备),由于商业上的原因,Phoenix等厂商的BIOS代码需要授权协议,下面以另外一款开源BIOS(openbios)为例,来剖析BIOS中,PCIe设备是如何被找到以及初始化的。 PCI设备的扫描是基于深度优先搜索算法(DFS:Depth First Search),也就是说,下级...

zhuifeng1005的博客 484

【PCIe 总线及设备入门学习专栏 1.3 -- 访问 PCIe 设备过程】

由于A是一个桥,所以需要进行一个深度优先的配置,看看A 桥下面有哪些设备,结果发现A设备下面是一个C设备,然后就去配置C设备,接着就要去读C设备的配置寄存器,发现它仍然是一个桥,既然是一个桥,那么又需要去配置它的三个总线号,C设备的上游总线号是1,它自己的总线号加1,也即为2,它下游所有桥的最大总线号暂时设置为255,这时把C桥配置好了;那么对于终端的设备呢?Bus0 在发送数据的时候,发送的时串行数据包,那么我们需要了解下它的数据包是什么样子的,这里我们就需要先了解 PCIe 设备的层次结构。

CodingCos的博客 381

PCIE 设备扫描的过程

 转自http://blog.163.com/huang_bp/blog/static/1231198372012724103437743/  初步了解完PCI总线标准之后,我们接下来正式开始PCIe设备的漫游之旅。从我们按下PC的电源按钮开始,BIOS就接管系统控制权开始工作,它会先进行一些内存和设备的初始化工作(当然,也包括我们的PCI设备),由于商业上的原因,Phoenix等厂商的B

或许 2126

手把手教你学pcie--计算机主机通过PCIe链接GPU场景下:系统初始化过程

当主机通过PCIe链接了一个GPU时,初始化过程是一个复杂而精细的操作,它确保了GPU能够被系统正确识别、配置和使用。

MHD0815的博客 1208

YOLOv8剪枝实战:基于torch_pruning的模型优化与性能提升指南

本文详细介绍了如何使用torch_pruning工具对YOLOv8模型进行结构化剪枝,以实现模型轻量化与性能提升。通过实战步骤解析,包括环境搭建、依赖图分析、迭代剪枝与微调策略,帮助开发者有效减少模型参数量和计算量,提升在边缘设备上的推理速度,同时保持检测(detect)与分割(segment)任务的精度。

water的专栏 1122

[转]PCIE 设备扫描的过程

注:本文为转载文章(简单明了说明了PCI总线bus号分配的原则)。尊重原著版权,分享只为个人学习和交流目的,如有侵权请原作者联系后可随时删除,谢谢!目前看到的原出处为http://blog.163.com/huang_bp/blog/static/1231198372012724103437743/,如有错误敬请指正!PCIE 设备扫描的过程  2012-08-24 22:34:37|  分类: ...

wxchbhd的博客 726

ESD放电模式以及电源箝位 (power clamp )电路

由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工由于ESD电压具有很快的上升速度(其ESD脉冲上升时间约在10ns左右),Vrc端的电压因为RC延迟效应无法跟得上VDD端的ESD电压上升速度,Vrc端的为低电位导致反相器工作将输出端Vout电压上拉到高电位。从而Vg端的高电位触发导通了NMOS元件(Mesd)的晶体管,因而ESD电流便经由Mesd而泄放掉。由于晶体管Mesd的栅极导通

DOG_BITE_DOG的博客 2万+

内核下PCIE的扫描流程

在PCI Express (PCIe) 架构中,域(Domain)和总线号(Bus Number)是用来唯一标识和组织PCIe设备的两个关键概念,它们帮助系统识别和寻址连接在PCIe拓扑中的各个设备。例如,一个典型的使用场景是在内核引导时通过命令行传递一个特定的参数来改变内存初始化的行为,或者配置一些底层硬件设置,这些操作需要在内核的其他部分开始运行之前完成。这段代码是Linux内核中用于扫描PCI或PCI Express (PCIe) 总线上的设备的函数,特别是针对给定的总线(

Mxdon_on的博客 2106

国产Flash替代方案:手把手教你用XSCT烧写ZYNQ7045的BOOT.BIN(附完整命令解析)

本文详细介绍了国产Flash替代方案在ZYNQ7045上的应用,通过XSCT工具链实现BOOT.BIN的精准烧写。内容涵盖国产Flash兼容性检查、PetaLinux环境搭建、XSCT烧写全流程及故障排查,帮助开发者高效完成国产化替代,提升硬件开发效率。

weixin_33670786的博客 427

保姆级教程:Unity编辑器汉化全流程(从下载到配置避坑指南)

本文提供Unity编辑器汉化的保姆级教程,涵盖从下载中文语言包到配置避坑的全流程。详细解析版本适配、文件系统交互及编辑器底层配置逻辑,帮助开发者高效完成汉化,解决常见报错问题,提升工作效率。

weixin_30825581的博客 155
下一篇: pcie SRIOV linux 调用流程
Runner_Linux
博客等级 码龄6年 17粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值