010、PCIE枚举过程:系统如何发现设备

010、PCIE枚举过程:系统如何发现设备

上周调一块新板子,系统启动后死活认不到PCIE设备。查了半天,发现是RC配置空间的一个BAR设置有问题。这种问题在PCIE开发里太典型了——你以为硬件连好了,软件也跑了,但设备就是不出来。今天咱们就掰开揉碎讲讲,系统到底是怎么把PCIE设备一个个“揪”出来的。

从一次真实的调试说起

当时的情况是这样的:板子能正常启动到系统,lspci命令却只显示主机桥,下游设备全无。用示波器抓REFCLK和PERST#信号都正常,链路训练看起来也成功了。问题出在哪?最后发现是BIOS里RC的配置空间没正确映射内存窗口,导致后续枚举根本进行不下去。这个坑让我意识到,不理解枚举的全过程,调这类问题就是盲人摸象。

PCIE枚举本质上是个“探路”过程。系统不知道下游挂了什么设备,有多少设备,这些设备需要多少地址空间。它得像探险家一样,沿着总线一棵树一棵树地摸索,给每个设备分配唯一的“门牌号”(BDF),再根据它们的需求划拨地址空间。

配置空间:设备的身份证

每个PCIE设备(包括RC、Switch和Endpoint)都有个配置空间,这玩意儿就像设备的身份证加需求清单。头256字节是标准化的,其中头64字节特别关键。Type 0头用于Endpoint,Type 1头用于Bridge(比如Switch里的端口)。

配置空间最开头是Vendor ID和Device ID,这俩值硬件固化,系统靠它们识别设备类型。后面的BAR(Base Address Register)才是重头戏——设备通过BAR告诉系统:“我需要多少内存空间或者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值