在我的驱动程序中,我试图映射从返回的地址ioremap
到用户空间地址。
- 返回什么样的地址
ioremap
?
- 它与一个有什么不同
kmalloc
地址 ?
- 如何映射从返回的地址
ioremap
?
- 应插入哪个地址
remap_pfn_range
?
你不需要ioremap()
如果你正在使用remap_pfn_range()
. ioremap()
将物理地址映射到内核虚拟地址。remap_pfn_range()
将物理地址直接映射到用户空间。只需将您的物理地址(通过 PAGE_SHIFT 下移以生成 pfn)直接传递到remap_pfn_range()
。您的问题按顺序排列:
- 内核虚拟地址
- kmalloc 返回内核虚拟,但保证连续内存参见问题116343 https://stackoverflow.com/questions/116343/what-is-the-difference-between-vmalloc-and-kmalloc
- 如果你打电话你可以这样做
virt_to_phys()
首先,将内核虚拟地址转换为物理地址。但如果您实际上不需要内核访问此内存范围,请跳过这一步
- 物理地址,通过 PAGE_SHIFT 下移以产生 pfn
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)