C 为什么不能使用ioremap然后重新映射pfn范围?
在我的驱动程序中,我试图将从C 为什么不能使用ioremap然后重新映射pfn范围?,c,linux,linux-kernel,kernel,C,Linux,Linux Kernel,Kernel,在我的驱动程序中,我试图将从ioremap返回的地址映射到用户空间地址 从ioremap返回什么类型的地址 它与kmalloc地址有何不同 如何映射从ioremap返回的地址 应将哪个地址插入到重新映射pfn范围中 ioremap()返回内核空间虚拟地址。无法直接从用户空间访问此文件。有一种称为mmap()的机制,请参阅和以了解工作示例。如果使用的是remap\u pfn\u range(),则不需要ioremap()ioremap()将物理地址映射到内核虚拟地址remap_pfn_range(
ioremap
返回的地址映射到用户空间地址
ioremap
返回什么类型的地址kmalloc
地址有何不同ioremap
返回的地址ioremap()
返回内核空间虚拟地址。无法直接从用户空间访问此文件。有一种称为mmap()的机制,请参阅和以了解工作示例。如果使用的是remap\u pfn\u range()
,则不需要ioremap()ioremap()
将物理地址映射到内核虚拟地址remap_pfn_range()
将物理地址直接映射到用户空间。只需将您的物理地址直接传递到remap\u pfn\u range()
。请依次提问:
内核虚拟地址
kmalloc返回内核虚拟内存,但保证连续内存
如果首先调用virt\u to\u phys()
,将内核虚拟地址转换为物理地址,则可以执行此操作。但是,如果您实际上不需要内核访问此内存范围,请跳过一步
物理地址,通过PAGE_SHIFT降档以生成pfn
请看原始帖子中的第4条