澄清谁决定内存映射和端口IO映射

时间:2012-03-16 21:37:37

标签: linux-kernel driver device-driver kernel

我研究了一些关于端口映射IO和内存映射IO的问题,我想出了第一个是如何工作的(不是第二个),所以如果你有一些关于如何执行内存映射IO的详细解释(我听说过它是关于操作系统拦截页面错误,将其重新路由到设备上)请告诉我。

无论如何我的问题是:与内部实时时钟(RTS)通信使用I / O端口映射,你需要在0x70端口上使用outb(byte_selected,0x70)和类似的函数..谁决定了0x70端口?我怎么能弄清楚他们在哪里宣布?那么内存映射IO呢?谁决定哪些地址与哪些设备相关联?如果我将自己的设备添加到系统中,它的内存将如何映射?

我对OS-hw通信仍有很多疑惑..

1 个答案:

答案 0 :(得分:1)

内存映射由硬件制造商决定,并在总线上硬连线。它们无法进行任何更改,必须从硬件规范中读取正确的映射。

像PCI这样的可插拔总线通过为自己的设备提供自己的地址空间来工作。他们可以在I / O方面检测设备的存在及其需求,并在这个保留空间内分配它们的范围。然后,CPU可以使用PCI寄存器通过自己的空间访问它,或者通过DMA更有效地访问它。有关详细信息,请参阅此页:http://tldp.org/LDP/tlk/dd/pci.html

请注意,并非所有设备都使用映射I / O - 例如,USB设备不使用内存I / O,只能通过定义良好的USB命令与主机通信。