【问题标题】:IO location vs Memory regionIO 位置与内存区域
【发布时间】:2014-08-01 07:48:17
【问题描述】:

当我浏览 Accessing the I/O and Memory Spaces in the chapter PCI Drivers 部分,第 15 页时,我想知道 IO 位置和内存区域之间到底有什么区别。

这是前两句话...

A PCI device implements up to six I/O address regions. Each region consists of either
memory or I/O locations.

我想知道内存和I/O位置的区别。

【问题讨论】:

    标签: linux memory io


    【解决方案1】:

    区别通常在于设备的寻址方式。您问题中的“位置”一词通常是指设备映射,即设备是 I/O 映射还是内存映射。

    两者的区别在于 I/O 映射 I/O 使用专用指令和控制信号来访问 I/O 空间,而内存映射 I/O 使用与访问内存相同的指令,在这种情况下,数据不是去(或来)到内存位置,而是去到设备。

    就 PCI 设备而言,它能够映射到 I/O 和内存区域。可以使用lspci -v查看映射。

    作为示例输出:

    01:0c.2 Parallel controller: NetMos Technology PCI 9865 Multi-I/O Controller (prog-if 03 [IEEE1284]) Subsystem: Device a000:2000 Flags: bus master, medium devsel, latency 0, IRQ 20 I/O ports at ed00 [size=8] I/O ports at ec00 [size=8] Memory at fddfa000 (32-bit, non-prefetchable) [size=4K] Memory at fddf9000 (32-bit, non-prefetchable) [size=4K] Capabilities: <access denied> Kernel driver in use: parport_pc Kernel modules: parport_pc

    上面的输出显示了基于 PCI 的并行端口的输出。在这里我们可以看到端口映射到 I/O 区域和内存区域。这两种机制中的任何一种都可用于访问设备寄存器。在设备可以寻址的六个 I/O 区域中,它使用了四个(两个 I/O 映射和两个内存映射)。

    【讨论】:

    • 如果“lspci -vv”的输出中缺少内存区域(我的意思是“fddfa000 的内存(32 位,不可预取)[size=4K],fddf9000 的内存(32 -bit, non-prefetchable) [size=4K]'),虽然我的设计中仍然有一个具有不同 BAR 的内存接口生成器,但可能是什么原因?参考我的q:stackoverflow.com/questions/53479150/…
    猜你喜欢
    • 2017-04-22
    • 2019-02-23
    • 1970-01-01
    • 2014-07-30
    • 2011-04-22
    • 2011-06-23
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多