【发布时间】:2013-06-20 22:07:46
【问题描述】:
在我的驱动程序中,我试图将从ioremap 返回的地址映射到用户空间地址。
-
ioremap返回什么样的地址? - 它与
kmalloc地址有何不同? - 如何映射从
ioremap返回的地址? - 应该将哪个地址插入
remap_pfn_range?
【问题讨论】:
标签: c linux linux-kernel kernel
在我的驱动程序中,我试图将从ioremap 返回的地址映射到用户空间地址。
ioremap返回什么样的地址?kmalloc 地址有何不同?ioremap 返回的地址?remap_pfn_range?【问题讨论】:
标签: c linux linux-kernel kernel
如果您使用的是remap_pfn_range(),则不需要ioremap()。 ioremap() 将物理地址映射到内核虚拟地址。 remap_pfn_range() 将物理地址直接映射到用户空间。只需将您的物理地址(通过 PAGE_SHIFT 降档以生成 pfn)直接传递给remap_pfn_range()。您的问题按顺序排列:
virt_to_phys(),你可以这样做,将内核虚拟地址转换为物理地址。但如果您实际上不需要内核访问此内存范围,请跳过一步【讨论】:
ioremap() 返回内核空间虚拟地址。这不能直接从用户空间访问。有一个叫做 mmap() 的机制,参考here 和Mapping physical addresses to virtual address linux 的工作示例。
【讨论】: