在我的驱动程序中,我试图将ioremap返回的地址映射到用户空间地址。

  • ioremap返回什么样的地址?
  • kmalloc地址有什么不同?
  • 如何映射从ioremap返回的地址?
  • 应该在remap_pfn_range中插入哪个地址?
  • 最佳答案

    如果使用ioremap(),则不需要remap_pfn_range()ioremap()将物理地址映射到内核虚拟地址。 remap_pfn_range()将物理地址直接映射到用户空间。只需将您的物理地址(向下移位PAGE_SHIFT以产生pfn)直接传递给remap_pfn_range()即可。您的问题顺序如下:

  • 内核虚拟地址
  • kmalloc返回虚拟的内核,但保证连续内存See question 116343
  • 如果您先调用virt_to_phys()可以将内核虚拟地址转换为物理地址,则可以执行此操作。但是,如果您实际上不需要内核访问此内存范围
  • ,请跳过此步骤
  • 物理地址,由PAGE_SHIFT向下移位以生成pfn
  • 09-10 03:45