严格来说,对于内核空间不能称为内存映射,应为内存重映射才对,例如将pci设备的内存空间映射到处理器的地址空间,其处理步骤如下:
request_mem_region(start,n,name)
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
/**
* __request_region - create a new busy resource region
* @parent: parent resource descriptor
* @start: resource start address
* @n: resource region size
* @name: reserving caller's ID string
*/
struct resource * __request_region(struct resource *parent,
resource_size_t start, resource_size_t n,
const char *name)
先获取物理空间的访问权限,接着建立重映射的页表
ioremap_nocache
用户空间的映射调用mmap,其实质是调用 remap_pfn_range
两者之间的差别是映射的线性地址空间不同,一个映射到内核空间,供驱动使用,另一个映射到用户空间,供应用进程使用