在我的驱动程序中,我正在尝试将从ioremap
返回的地址映射到用户空间地址。
ioremap
kmalloc
地址有什么不同?ioremap
返回的地址?remap_pfn_range
?答案 0 :(得分:7)
如果您使用ioremap()
,则不需要remap_pfn_range()
。 ioremap()
将物理地址映射到内核虚拟地址。 remap_pfn_range()
将物理地址直接映射到用户空间。只需将您的物理地址(由PAGE_SHIFT降档以产生pfn)直接传递给remap_pfn_range()
。您的问题依次为:
virt_to_phys()
,将内核虚拟地址转换为物理地址,则可以执行此操作。但如果您实际上不需要内核访问此内存范围,则跳过一步答案 1 :(得分:0)
ioremap()
返回内核空间虚拟地址。无法直接从用户空间访问此内容。有一种称为mmap()的机制,请参考here和Mapping physical addresses to virtual address linux作为工作样本。