MMIO-内存映射IO
核心概念
Memory-Mapped I/O 是 CPU 与外设通信的标准方式。
- 谎言: 硬件设计者在物理地址空间中挖了一些“洞”。
- 真相: 某些特定的物理地址(如
0x10000000)并不对应 DRAM 内存条,而是直接连线到设备的控制寄存器。
操作方式
- Load (读): 读取设备状态(如“键盘有输入了吗?”“磁盘读完了吗?”)。
- Store (写): 发送控制指令(如“把这个字节发出去!”)。
编程警示
volatile关键字: 编写驱动时,指向 MMIO 地址的指针必须声明为volatile。- 原因: 编译器可能会觉得你再往同一个内存地址写两次是多余的,从而优化掉一次。但对于设备来说,写两次可能意味着“发两个字节”。
- 安全隐患: 如果攻击者能修改页表,将 MMIO 地址映射到用户空间,用户进程就能直接控制硬件(如 DMA 攻击),绕过 OS 的安全检查。