为什么它是不可能使用的ioremap然后remap_pfn_range? [英] why it is not possible to use ioremap then remap_pfn_range?

查看:1951
本文介绍了为什么它是不可能使用的ioremap然后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:


  1. 内核虚拟地址

  2. 的kmalloc返回内核虚拟的,但保证了连续的内存<一个href=\"http://stackoverflow.com/questions/116343/what-is-the-difference-between-vmalloc-and-kmalloc\">See问题116343

  3. 您可以做到这一点,如果你叫 virt_to_phys()第一,内核虚拟地址转换成物理。但跳过的一个步骤,如果你实际上并不需要内核访问该内存范围

  4. 物理地址,通过降档PAGE_SHIFT产生PFN

  1. kernel virtual address
  2. kmalloc returns kernel virtual, but guarantees contiguous memory See question 116343
  3. 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
  4. physical address, downshifted by PAGE_SHIFT to produce a pfn

这篇关于为什么它是不可能使用的ioremap然后remap_pfn_range?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆