1

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

谢谢

4

3 回答 3

2

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

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

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

于 2012-04-11T05:21:03.720 回答
1

我认为OP混淆了三件事:

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

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

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

于 2012-04-11T10:24:15.817 回答
0

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

于 2012-04-11T10:06:13.720 回答