【问题标题】:How does device mmap work in contrast to I/O address ports?与 I/O 地址端口相比,设备 mmap 是如何工作的?
【发布时间】:2012-04-23 09:53:46
【问题描述】:

我想知道,与通过 I/O 端口读取/写入设备相比,Linux 是否发现将 mmap 映射到外围设备内存之间存在差异。根据我在汇编课上学到的知识,我们几乎以与内存寻址相同的方式看待 I/O 端口寻址。所以我想我想知道我是否要 rw 到我的设备所连接的端口的 I/O,映射到该设备的内存是不是同样的事情?

谢谢

【问题讨论】:

  • 这里的描述非常好:lwn.net/images/pdf/LDD3/ch09.pdf
  • 谢谢,我目前正在阅读那本书/pdf。我实际上是在匆忙浏览材料,但我已经完成了第 15 章,这就是我正在做的。我一定是跳过了第 9 章的一部分,我应该更彻底地阅读它,谢谢!

标签: linux memory-management assembly linux-kernel kernel


【解决方案1】:

I/O 端口不是内存。一些硬件(例如图形卡)通过内存总线连接,而不仅仅是通过 I/O 端口总线。

对于具有内存接口的硬件(即,被视为 CPU 的内存范围),您可以使用mmap

X11 服务器Xorg 经常映射图形卡。

【讨论】:

  • 好的,连接到ram的内存总线也被显卡等设备内存共享......如果我理解正确的话。所以这些设备有独立的 i/o 端口和内存总线。
【解决方案2】:

我认为 OP 混淆了三件事:

  • mmap() 是应用程序对页寄存器和/或 MMU 执行某些操作的一种方式。

  • 内存映射 I/O 是一个硬件架构概念:不是为 I/O 提供单独的总线和操作,而是地址空间的某些区域专用于 I/O 操作。 (68K 处理器系列使用内存映射 I/O,以及 IBM 的 AIX,IIRC)。

  • DMA 意味着不仅 CPU,而且 I/O 设备都可以读取和写入(部分)物理内存。

【讨论】:

    【解决方案3】:

    vm_area_struct 包含 vm_flags 字段。在特殊映射的情况下,它包含VM_PFNMAPVM_IO 标志。请参阅 LXR 中的结构 vm_area_structVM_PFNMAPVM_IO 定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2023-03-22
      • 2013-01-04
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多