在我的驱动程序中,我试图将返回的地址映射ioremap
到用户空间地址。
- 从什么样的地址返回
ioremap
? - 它与
kmalloc
地址有何不同? - 如何映射从返回的地址
ioremap
? - 应该插入哪个地址
remap_pfn_range
?
在我的驱动程序中,我试图将返回的地址映射ioremap
到用户空间地址。
ioremap
?kmalloc
地址有何不同?ioremap
?remap_pfn_range
?如果您ioremap()
正在使用remap_pfn_range()
. ioremap()
将物理地址映射到内核虚拟地址。 remap_pfn_range()
将物理地址直接映射到用户空间。只需将您的物理地址(通过 PAGE_SHIFT 降档以生成 pfn)直接传递给remap_pfn_range()
. 您的问题按顺序排列:
virt_to_phys()
先调用,你可以这样做,将内核虚拟地址转换为物理地址。但是,如果您实际上不需要内核访问此内存范围,请跳过一步ioremap()
返回内核空间虚拟地址。这不能直接从用户空间访问。有一种称为 mmap() 的机制,请参阅此处和将物理地址映射到虚拟地址 linux以获取工作示例。