【问题标题】:PCI BAR memory addressesPCI BAR 内存地址
【发布时间】:2014-06-16 02:47:53
【问题描述】:

快速提问,我正在阅读有关 PCI 的 OSDev Wiki 页面,它说以下 -

“基地址寄存器(或 BAR)可用于保存设备使用的内存地址,或端口地址的偏移量。通常,内存地址 BAR 需要位于物理 RAM 中,而 I/O 空间 BAR 可以驻留在任何内存地址(甚至超出物理内存)。”

我不明白它说内存地址 BAR 需要位于物理内存中的位置? MMIO 的全部意义在于,当它被分配一个内存地址时,它将被路由到设备而不是物理 RAM。它需要位于物理 RAM 中是什么意思?

不管安装多少物理RAM,它不只是3GB - 4GB地址空间之间的地址吗?

这是 OSDev 网站上的错误还是我误解了?

链接-About halfway down, under the heading Base Address Registers

谢谢。

【问题讨论】:

    标签: memory computer-architecture bios pci


    【解决方案1】:

    OSDev 站点正常。他们从 PCI 设备的角度描述内存/IO BARS,而不是从主机的角度。所以 OSDev 所说的内存条可以(但不一定)映射到 PCI 设备上的物理 RAM。虽然 IO BAR 通常是其他东西(寄存器、FIFO 等等)。

    还请注意,不鼓励使用 IO BAR。最好只使用内存条。通常,您会有一个小内存条,用于对所有寄存器进行分组。其他 BAR 会暴露您 PCI 设备的 RAM。

    【讨论】:

    • 感谢您的回答。从 PCI 设备的角度知道它会让我更清楚一点,我仍然有点困惑。内存条不是总是会映射到设备上的物理 RAM 吗?因此,如果我的设备映射 0xE0000000 - 0xEFFFFFFF 内存条将包含此地址范围?
    • 不,内存条可以映射到寄存器。例如,您可以查看 PC 上的任何网卡。它们通常只有一个小 BAR(通常为 256 字节),其中只有一部分是寄存器,其余部分未使用。另一个例子是显示适配器,它通常有一个用于寄存器的小内存 BAR 和一个映射到视频帧缓冲区的大内存 BAR,视频帧缓冲区是 PCI 设备上的一块 RAM。
    • 此外,当主机枚举所有 PCI 设备时,您在 BAR 中看到的值(例如 0xE0000000)由主机设置。该值对主机有意义,对设备无意义。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2016-05-05
    • 2015-04-02
    • 2015-02-09
    • 1970-01-01
    • 2018-07-19
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多