Fork me on GitHub
侧边栏

ioremap_np和ioremap的作用及区别

ioremap_npioremap 都是用于将物理地址映射到内核虚拟地址空间的函数,但它们有一些关键区别:

作用

  • ioremap: 用于将设备的物理地址映射到内核虚拟地址空间,使得驱动程序可以通过虚拟地址访问设备寄存器。它通常用于内存映射I/O(MMIO) [1] [2].
  • ioremap_np: 类似于 ioremap,但它显式请求非发布的写入语义(non-posted write semantics)。这意味着在某些架构和总线上,写入操作不会被发布,确保写入操作在数据实际到达目标设备之前不会被认为已经完成 [3].

区别

  • 发布写入语义:
    • ioremap: 映射的地址可能具有发布写入语义,这意味着从CPU的角度来看,写入操作可能在数据实际到达设备之前被认为已经完成 [1].
    • ioremap_np: 映射的地址具有非发布写入语义,确保写入操作在数据实际到达设备之前不会被认为已经完成 [3].
  • 使用场景:
    • ioremap: 通常用于一般的设备寄存器映射,适用于大多数内存映射I/O场景 [1].
    • ioremap_np: 适用于需要严格写入顺序保证的场景,避免写入操作被发布 [3].

References

[1] Bus-Independent Device Accesses — The Linux Kernel documentation

[2] Linux 下关于 ioremap 系列接口 - CSDN博客

[3] 独立于总线的设备访问 - 知乎 - 知乎专栏

posted @ 2025-06-11 14:14  yooooooo  阅读(85)  评论(0)    收藏  举报