当我浏览第15页的访问I / O和内存空间in the chapter PCI Drivers部分时,我想知道IO位置和内存区域之间到底有什么区别.
这是前两个句子…
A PCI device implements up to six I/O address regions. Each region consists of either
memory or I/O locations.
我想知道内存和I / O位置之间的区别.
解决方法:
通常,区别在于设备的寻址方式.您问题中的“位置”一词通常是指设备映射,即设备是I / O映射还是内存映射.
两者之间的区别在于,I / O映射的I / O使用专用指令和控制信号访问I / O空间,而内存映射的I / O使用与访问存储器相同的指令,其中在这种情况下,数据而不是去(或到达)存储器位置去到设备.
就PCI设备而言,它既可以映射到I / O,也可以映射到内存区域.可以使用lspci -v查看映射.
作为示例输出:
01:0c.2并行控制器:NetMos Technology PCI 9865多I / O控制器(prog-if 03 [IEEE1284])
子系统:设备a000:2000
标志:总线主控,中等开发,延迟0,IRQ 20
ed00处的I / O端口[size = 8]
ec00处的I / O端口[size = 8]
内存为fddfa000(32位,不可预取)[size = 4K]
内存为fddf9000(32位,不可预取)[size = 4K]
功能:
使用的内核驱动程序:parport_pc
内核模块:parport_pc
上面的输出显示了基于PCI的并行端口的输出.在这里,我们可以看到端口既映射到I / O区域,也映射到内存区域.两种机制中的任何一种都可以用来访问设备寄存器.设备可以寻址的六个I / O区域中,它正在使用四个(两个I / O映射和两个内存映射).
标签:memory,io,linux
来源: https://codeday.me/bug/20191121/2051677.html