0

メモリマップドI/Oを使用するデバイスがある、つまり、このデバイスに割り当てられた物理メモリの特定の範囲があると想定します。

仮想メモリシステムが使用されていない場合、対応する物理アドレスを使用して実行される読み取り/書き込み操作を通じてデバイスを操作するのは非常に簡単です。

仮想メモリシステムがある場合はどうなりますか?

デバイスドライバは、そのデバイスに割り当てられた物理メモリの特定の範囲を認識する必要がありますが、物理ではなく仮想アドレスを使用する必要がある場合、どのようにそのアドレス範囲にアクセスしますか?

4

2 に答える 2

1

メモリマップドIOデバイスの場合、そのデバイスによって共有される任意の物理アドレスは、ioremap()API[1]を使用してカーネル仮想メモリにマップできます。

したがって、あなたの場合、ioremap()を使用して物理アドレス0x1234をマップし、カーネル仮想アドレスを取得して、このアドレスへのデータの書き込みを開始できます。

[1] http://lxr.gwbnsh.net.cn/linux/arch/cris/mm/ioremap.c

于 2012-08-16T04:52:09.983 に答える
0

私がそれを行ってから長い時間が経ちましたが、私の記憶では、物理メモリのブロックをマップすると、ユーザースペースのアドレスがその物理メモリに対応します。ユーザースペースアドレスへの書き込みは、物理メモリへの書き込みです。

于 2012-08-15T23:29:16.507 に答える