我知道有MMIO,当我读/写MMIO地址时,我不访问系统内存而是访问HW“内存”。我的问题是MMIO是如何建立的? CPU如何知道地址0x1234的访问必须发送到HW(以及哪个HW?)而不是内存?在cpu中的某个地方是否有HW寄存器进行映射?谁初始化这些寄存器?像Das U-Boot这样的固件?或者有总线控制器的预定义地址吗?像“i2c总线控制器总是在这个处理器的地址0x1000”这样的东西可能会在功能规范中定义吗?
CPU的哪个部分负责MMIO? IIUC MMU用于虚拟内存,不适用于MMIO。
谁(EFI?u-boot?)以及如何告诉CPU必须将地址0x1234的内存访问转发给(例如)PCI设备N?
您是否也可以为现代手臂(或x86)架构提供示例?
我认为CPU的方式有两种状态:一种是在CPU复位后立即CPU不知道硬件,第二种是CPU很清楚MMIO以及转发每个MMIO访问的位置。如何从第一个州过渡到第二个州?
抱歉这是一个纠结的问题。我很困惑。
谢谢。