这可能是一个非常基本的问题,但我正在尝试理解ioremap_page_range()和vmap_page_range()之间的区别。两者似乎都将物理地址映射到虚拟地址(在新分配的VM区域中)。
这两个函数每个都有4个参数,其中3个是相同的。ioremap_page_range接受一个phys_addr_t,vmap_page_range接受一个页面(帧)指针数组。
我的问题是,这些函数可以互换使用(假设我处理了第4个不同的参数),或者这些函数实现的功能有什么不同?
任何指向解释这些功能的文本或链接的特定指针都将非常有帮助。
发布于 2014-03-06 09:33:37
实现是完全相同的,理论上你可以使用两者来创建一个内存映射。但是,ioremap是用来映射IO资源的,它不是linux内核中的物理页面,应该使用vmap_page_range来映射存在于页池中的物理内存(内存区域)。顺便说一下,映射属性值在使用时通常是不同的。(例如,缓存或未缓存...)
https://stackoverflow.com/questions/22212904
复制相似问题