为什么lscpi的输出相对于BAR不一致



以下是我的lspci -xxxx -vvvv -nn 输出

00:02.0 VGA compatible controller [0300]: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter [80ee:beef] (prog-if 00 [VGA controller])
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin A routed to IRQ 18
    Region 0: Memory at e0000000 (32-bit, prefetchable) [size=64M]
    Expansion ROM at <unassigned> [disabled]
    Kernel driver in use: vboxvideo
00: ee 80 ef be 07 00 00 00 00 00 00 03 00 00 00 00
10: 08 00 00 e0 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

具体来说,我想问一下以下几行:

    Region 0: Memory at e0000000 (32-bit, prefetchable) [size=64M]

10: 08 00 00 e0 00 00 00 00 00 00 00 00 00 00 00 00

基于此(参见第12.1.3节),BAR0的值应该是e0000008而不是e0000000,即最后一个字节应该是08而不是00,就像在Region 0的描述中所说的那样。为什么是这样?我错过了什么?

低4位实际上不是地址的一部分。该特定位(值为0x08的位#3)是将该区域标记为可预取的位。看见https://en.wikipedia.org/wiki/PCI_configuration_space#Bus_enumeration或http://wiki.osdev.org/PCI#Base_Address_Registers或者只需在网上搜索"PCI配置空间头"

最新更新