内核空间与用户空间的内存映射

严格来说,对于内核空间不能称为内存映射,应为内存重映射才对,例如将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


两者之间的差别是映射的线性地址空间不同,一个映射到内核空间,供驱动使用,另一个映射到用户空间,供应用进程使用

你可能感兴趣的:(struct,String,Descriptor)