这两个函数有什么区别:`ioremap_uc()`和`set_memory_uc`?

当我想将内存区域标记为Write Combined(禁用可caching和使用BIU)或者通过设置PAT(页面属性表 – PIT中的7bit)不可caching时,那么我必须使用什么,以及这两个函数之间有什么区别?

  • 驱动程序应该使用ioremap_[uc|wc]访问具有[uc | wc]访问types的PCI BAR: void __iomem * ioremap_wc(resource_size_t phys_addr,unsigned long size)
  • 驱动程序应该使用set_memory_[uc|wc]设置RAM范围的访问types: int set_memory_uc(unsigned long addr,int numpages)

取自: http : //lwn.net/Articles/278994/

为什么我不能使用PCI BAR和RAM范围的单一function?

说明: ioremap_uc()获取物理地址和返回虚拟地址设置不可caching,与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); 

Solutions Collecting From Web of "这两个函数有什么区别:`ioremap_uc()`和`set_memory_uc`?"