这可能是一个非常基本的问题,但我试图理解ioremap_page_range()和vmap_page_range()之间的区别。两者似乎都将物理地址映射到虚拟地址(在新分配的虚拟机区域中)。
两个函数都有4个参数,其中3个是相同的。ioremap_page_range采用phys_addr_t,vmap_page_range采用页(帧)指针数组。
我的问题是这些函数是否可以互换使用(假设我处理第四个不同的参数),或者这些函数将实现的功能有什么不同吗?
任何指向解释这些函数的文本或链接的特定指针都将非常有用。

最佳答案

实现是完全相同的,理论上可以使用两者创建内存映射。
但是,ioremap用于映射一个IO资源,它不是linux内核中的物理页,vmap_page_range应该用于映射页池中存在的物理内存(RAM region)。顺便说一下,映射属性值在使用时通常是不同的。(例如,缓存或未缓存…)

关于c - ioremap_page_range和vmap_page_range之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22212904/

10-16 09:39