八、如何计算 BAR 大小(PCIe 最优雅的设计之一)
这是 PCIe / PCI 里一个非常经典的面试题,也是很多工程师第一次“被震撼”的地方:
系统居然不用问设备,就能知道它要多少地址空间?
答案是:
✅能,而且全靠 BAR 自己“说”。
一、先给结论(必背)
BAR 的大小,是通过“写 1 再读回”的方式探测出来的。
系统往 BAR 写入全 1,再读回来,
看哪些位“被硬件强制拉低为 0”,就能算出需要多大的空间。
📌这是硬件自我描述能力的典范
二、为什么这个方法可行?
BAR 的低位是有特殊含义的:
+--------------------------------------------------+ | 31 ............. n | n-1 ....... 4 | 3 | 2 | 1 | 0 | +--------------------+--------------+---+---+---+---+ | 可写地址位 | 固定 0 | P | T | R | 0 | +----------------