当我想通过set PAT(Page attribute table - 7bit in PTE)将内存区域标记为Write Combined(禁用缓存并使用BIU)或Uncacheable时,我必须使用什么,这两个函数有什么区别?
- 驱动程序应使用
ioremap_[uc|wc]
[uc|wc] 访问类型访问 PCI BAR:void __iomem *ioremap_wc(resource_size_t phys_addr, unsigned long size) - 驱动程序应该使用
set_memory_[uc|wc]
来设置 RAM 范围的访问类型:int set_memory_uc(unsigned long addr, int numpages)
取自: http: //lwn.net/Articles/278994/
为什么我不能对 PCI BAR 和 RAM 范围使用相同的单一功能?
澄清:
是否ioremap_uc()
通过设置 Uncacheable 获取物理地址并返回虚拟地址,与set_memory_uc()
哪些已经获得虚拟地址并为这些页面设置 Uncacheable?
这些代码是否相等?
void* virt_ptr = ioremap_uc(phys_ptr, size);
和
void* virt_ptr = ioremap(phys_ptr, size);
const int page_size = 4096;
set_memory_uc(virt_ptr, size/page_size);