为什么不可能同时使用ioremap和remap_pfn_range?(涉及IT技术)

6
在我的驱动程序中,我正在尝试将从ioremap返回的地址映射到用户空间地址。
以下是需要回答的问题:
  1. ioremap返回什么类型的地址?
  2. 它与kmalloc地址有何不同?
  3. 如何映射从ioremap返回的地址?
  4. 应该插入哪个地址到remap_pfn_range中?
2个回答

10
如果你使用remap_pfn_range(),就不需要使用ioremap()ioremap()会将物理地址映射到内核虚拟地址。而remap_pfn_range()直接将物理地址映射到用户空间。只需将你的物理地址(通过PAGE_SHIFT向下转移以生成PFN)直接传递给remap_pfn_range()即可。以下是你提出的问题及回答:
  1. 内核虚拟地址
  2. kmalloc返回内核虚拟地址,但保证连续的内存。查看问题116343
  3. 如果你不需要访问内核中这块内存,你可以先调用virt_to_phys()将内核虚拟地址转换为物理地址。但减少一步操作。
  4. 物理地址通过PAGE_SHIFT向下转移以生成PFN

0

1
查看原帖中的第4点。 - shd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接