Linux kernel ioremap_nocache and ioremap function
这两天都源码时,总是看到ioremap_nocache和ioremap这两个函数,本文就介绍总结一下吧。
1. 背景知识
1.1 物理地址空间
内容源于《系统虚拟化:原理与实现》2.2.1章节。


1.2 CPU cache
如果对CPU Cache概念有遗忘,可以参考此文。
本文中,读者只需明白一点:内核可以让部分物理地址空间的内存不使用cpu cache。
ps:读者若想了解细节,可以参考SDM11.3METHODS OF CACHING AVAILABLE章节。
2. 函数说明
有了背景知识后,理解这些函数就变得简单了。
首先看下内核中ioremap_nocache函数。
1 | /** |
就比如图2-1,当我们需要映射512MB的I/O地址时,调用ioremap_nocache(3GB, 512MB)即可。
ioremap和ioremap_nocache的区别从名称中就可以看出区别:ioremap映射的物理地址空间使用CPU cache,而ioremap_nocache映射的物理地址空间不使用CPU cache。
知道函数的作用后,就可以去慢慢啃内核了。
参考资料:
- 《系统虚拟化:原理与实现》
- LINUX kernel