6

私のドライバーでは、返されたアドレスioremapをユーザー空間アドレスにマップしようとしています。

  1. からどのようなアドレスが返されioremapますか?
  2. kmalloc住所とどう違うの?
  3. から返されたアドレスをマップするにはどうすればよいioremapですか?
  4. どのアドレスを に挿入する必要がありますremap_pfn_rangeか?
4

2 に答える 2

9

ioremap()を使用している場合は必要ありませんremap_pfn_range()ioremap()物理アドレスをカーネル仮想アドレスにマップします。 remap_pfn_range()物理アドレスをユーザー空間に直接マップします。物理アドレス (pfn を生成するために PAGE_SHIFT でシフトダウン) を に直接渡すだけremap_pfn_range()です。質問順:

  1. カーネル仮想アドレス
  2. kmalloc はカーネル仮想を返しますが、連続したメモリを保証します質問 116343 を参照してください
  3. virt_to_phys()最初に呼び出して、カーネルの仮想アドレスを物理アドレスに変換すると、これを行うことができます。ただし、このメモリ範囲へのカーネル アクセスが実際に必要ない場合は、手順をスキップしてください。
  4. pfn を生成するために PAGE_SHIFT によってダウンシフトされた物理アドレス
于 2013-06-24T14:41:40.077 に答える