6

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

  1. 从什么样的地址返回ioremap
  2. 它与kmalloc地址有何不同?
  3. 如何映射从返回的地址ioremap
  4. 应该插入哪个地址remap_pfn_range
4

2 回答 2

9

如果您ioremap()正在使用remap_pfn_range(). ioremap()将物理地址映射到内核虚拟地址。 remap_pfn_range()将物理地址直接映射到用户空间。只需将您的物理地址(通过 PAGE_SHIFT 降档以生成 pfn)直接传递给remap_pfn_range(). 您的问题按顺序排列:

  1. 内核虚拟地址
  2. kmalloc 返回内核虚拟,但保证连续内存参见问题 116343
  3. 如果你virt_to_phys()先调用,你可以这样做,将内核虚拟地址转换为物理地址。但是,如果您实际上不需要内核访问此内存范围,请跳过一步
  4. 物理地址,由 PAGE_SHIFT 下移以产生 pfn
于 2013-06-24T14:41:40.077 回答
0

ioremap()返回内核空间虚拟地址。这不能直接从用户空间访问。有一种称为 mmap() 的机制,请参阅此处将物理地址映射到虚拟地址 linux以获取工作示例。

于 2013-06-24T12:19:41.727 回答