为什么它是不可能使用的ioremap然后remap_pfn_range? [英] why it is not possible to use ioremap then remap_pfn_range?
问题描述
在我的司机,我试图映射地址从ioremap的返回给用户空间地址。
从ioremap的返回1.什么样的地址?
2.它是如何从kmalloc的地址不同?
3.如何映射地址从返回的ioremap?
4.该地址应插入remap_pfn_range?
In my driver , i am trying to map address returned from ioremap to userspace address. 1. what kind of address returned from ioremap ? 2. how is it different from kmalloc address ? 3. how can i map address returned from ioremap ? 4. which address should be inserted to remap_pfn_range?
推荐答案
您不需要的ioremap()
如果你使用 remap_pfn_range ()
。 的ioremap()
物理地址映射到内核虚拟地址。 remap_pfn_range()
物理地址直接映射到用户空间。只是通过你的物理地址(由PAGE_SHIFT降档到生产PFN)直接 remap_pfn_range()
。您的问题依次是:
You don't need ioremap()
if you're using remap_pfn_range()
. ioremap()
maps a physical address into a kernel virtual address. remap_pfn_range()
maps physical addresses directly to user space. Just pass your physical address (downshifted by PAGE_SHIFT to produce a pfn) directly to remap_pfn_range()
. Your questions in order:
- 内核虚拟地址
- 的kmalloc返回内核虚拟的,但保证了连续的内存<一个href=\"http://stackoverflow.com/questions/116343/what-is-the-difference-between-vmalloc-and-kmalloc\">See问题116343
- 您可以做到这一点,如果你叫
virt_to_phys()
第一,内核虚拟地址转换成物理。但跳过的一个步骤,如果你实际上并不需要内核访问该内存范围 - 物理地址,通过降档PAGE_SHIFT产生PFN
- kernel virtual address
- kmalloc returns kernel virtual, but guarantees contiguous memory See question 116343
- you could do this if you call
virt_to_phys()
first, to convert kernel virtual address to physical. But skip a step if you don't actually need kernel access to this memory range - physical address, downshifted by PAGE_SHIFT to produce a pfn
这篇关于为什么它是不可能使用的ioremap然后remap_pfn_range?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!