gpt4 book ai didi

linux - 来自 lspci -xxxx 的 BAR 值

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:15 24 4
gpt4 key购买 nike

我需要从 lspci -xxxx 的输出中提取 BAR 值。这是我的输出:

00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)
00: 86 80 29 28 07 00 10 00 02 01 06 01 00 40 00 00
10: 41 d2 00 00 49 d2 00 00 51 d2 00 00 59 d2 00 00
20: 61 d2 00 00 00 60 80 f0 00 00 00 00 00 00 00 00
30: 00 00 00 00 70 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: 01 a8 03 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: 40 00 3f 01 80 01 00 78 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 12 00 10 00 28 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

如果我理解PCI spec正确地,我的 BAR 值位于地址 0x100x140x180x1C0x200x24

然而,当我查看 lspci -vvvv

的输出时
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])
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: 64
Interrupt: pin A routed to IRQ 21
Region 0: I/O ports at d240 [size=8]
Region 1: I/O ports at 0000
Region 2: I/O ports at d250 [size=8]
Region 3: I/O ports at 0000
Region 4: I/O ports at d260 [size=16]
Region 5: Memory at f0806000 (32-bit, non-prefetchable) [size=8K]
Capabilities: [70] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [a8] SATA HBA v1.0 BAR4 Offset=00000002
Kernel driver in use: ahci

区域 5 与 lspci -xxxx 的输出中显示的值匹配。例如,地址 0x24 的值匹配 Region 5: Memory at f0806000。为什么区域 0 到区域 4 不匹配? d240 [size=8] 处的 I/O 端口是什么意思

最佳答案

区域 0、2 和 4 实际上匹配。 I/O BAR 的低 2 位是标志位。特别是最低位,指定这些是 I/O 区域而不是内存区域。参见 http://wiki.osdev.org/PCI#Base_Address_Registers .

我无法解释区域 1 和区域 3 发生了什么。在我看来,它们应该显示为:

Region 1: I/O ports at d248
Region 3: I/O ports at d258

几乎可以肯定每个大小也是 8,但这实际上是动态确定的——通过将全 1 写入寄存器然后读回结果,所以不尝试就无法确定。

我想设备可能无法正确处理所有 1 都写入寄存器的情况,但这似乎有些牵强(如果那不起作用,地址已经分配给它们了) .

所以我不知道...可能是 lspci 中的错误?

I/O ports at d240 [size=8] 的含义是设备在“I/O 空间”(与内存空间相对)中支持长度为 8 的区域,并且该区域已分配基地址 0xd240。对于 I/O 空间,您使用“IN”和“OUT”指令而不是普通的内存加载/存储指令通过这些寄存器与设备通信。

关于linux - 来自 lspci -xxxx 的 BAR 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38337659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com