什么是i/o端口,i/o端口地址?那个地址是RAM的一部分吗?

Usr*_*sr1 1 linux device linux-device-driver linux-kernel

什么是i/o端口,i/o端口地址?当驱动程序想要与硬件通信时,例如并行端口(0x378).那个端口地址(0x378)是RAM地址还是别的?

Chr*_*ton 11

这最终取决于系统的体系结构.

x86处理器和它们下载的8080(最终是8008)使用一种方案I/O mapping,其中来自处理器的特殊控制信号指示访问I/O端口而不是常规存储器位置.必须使用相应的特殊指令进行此类访问.

许多其他处理器 - 尤其是当今移动和嵌入式设备中如此普遍的ARM内核 - 遵循不同的设计传统,其中I/O端口memory mapped与普通存储器位于同一统一地址空间内.这意味着它们显示为常规内存位置(在特殊的保留地址区域中),并使用相当正常的指令进行访问.但需要注意的是,有时只允许特定的宽度访问 - 例如,32位嵌入式ARM芯片可能需要使用16位存储器访问指令访问特定端口,即使保留了完整的32位总线字为了它.

最终,有关特定处理器的信息可在其数据表或程序员手册中找到.具有连接片外外设的总线的系统 - 尤其是桥接总线 - 可能会增加额外的限制.