062、PCIE ID路由:Bus、Device、Function从一次诡异的设备丢失说起上个月在调一块自定义的PCIE板卡,系统启动后lspci死活看不到设备。查了半天硬件信号,时钟和复位都正常,LTSSM状态机也跑起来了,但就是枚举不出来。后来用调试器抓配置空间,发现Type1头里的Bus号被写成了0xFF——问题找到了:RC(Root Complex)在分配Bus号时冲突了,导致整个设备树错乱。这种问题不碰一次根本不会想到,ID路由这玩意儿平时感觉不到,一出事就是大事。PCIE世界里没有MAC地址也没有IP地址,每个功能(Function)靠BDF(Bus, Device, Function)这个三元组定位。今天咱们就掰开揉碎讲清楚,这套ID路由机制到底怎么玩的。BDF:硬件的“门牌号”BDF三个字段都在配置空间里摆着:Bus Number:8位,范围0-255。系统枚举时动态分配,RC所在Bus固定为0。Device Number:5位,范围0-31。物理封装决定,通常由ID引脚电平决定。Function Number:3位,范围0-7。多功能设备内部区分。一个完整BDF写成十六进制格式:BB:DD.