MMIO-内存映射IO

核心概念

Memory-Mapped I/O 是 CPU 与外设通信的标准方式。

  • 谎言: 硬件设计者在物理地址空间中挖了一些“洞”。
  • 真相: 某些特定的物理地址(如 0x10000000)并不对应 DRAM 内存条,而是直接连线到设备的控制寄存器

操作方式

  • Load (读): 读取设备状态(如“键盘有输入了吗?”“磁盘读完了吗?”)。
  • Store (写): 发送控制指令(如“把这个字节发出去!”)。

编程警示

  1. volatile 关键字: 编写驱动时,指向 MMIO 地址的指针必须声明为 volatile
    • 原因: 编译器可能会觉得你再往同一个内存地址写两次是多余的,从而优化掉一次。但对于设备来说,写两次可能意味着“发两个字节”。
  2. 安全隐患: 如果攻击者能修改页表,将 MMIO 地址映射到用户空间,用户进程就能直接控制硬件(如 DMA 攻击),绕过 OS 的安全检查。