0

http://lxr.free-electrons.com/source/include/linux/vmalloc.h?v=3.4;a=arm#L11

vm_structin にはたくさんのフラグがありますvmalloc.c。を理解できます。これは、 が呼び出しによって構築されるVM_ALLOCことを意味します。vm_structvmalloc()

しかし、他のフラグは何を意味するのでしょうか? 特にVM_IOREMAP. Android バインダー ドライバーで使用されます。

http://lxr.free-electrons.com/source/drivers/staging/android/binder.c?v=3.4;a=arm#L2819

4

1 に答える 1

3

define VM_IOREMAP 0x00000001 /* ioremap() とその仲間 */

VM_IOREMAP は、この仮想メモリ領域が ioremap() によって作成されることを意味します。 * 通常は * (ただし * に限定されません)、ハードウェア デバイス (PCI デバイスなど) の I/O メモリ領域 (物理アドレスで特徴付けられます) をカーネルの仮想アドレス範囲なので、単純な読み取り/書き込みで I/O メモリにアクセスできます。

ドライバーの詳細にはあまり触れませんが、あなたが言及したAndroidバインダードライバーでは、ドライバーはそれを使用してmmap()システムコールを実装しているようです。これは、ドライバー間で一連のRAMページ(デバイスI / Oメモリ領域ではない)を共有するためのものですおよびユーザー空間コード。したがって、ユーザー空間コード mmap() の後、ドライバー char デバイス ファイルは、カーネル ユーザー レベルの移行を行わずに、ユーザー レベルからこれらの RAM ページに直接アクセスできます。このコーディング トリックの一般的な使用法 (他のドライバーのケースで覚えている限り) は、ドライバーがカーネル レベルでこれらの RAM ページにデータ コンテンツを生成し、ユーザー レベル コードがこれらの RAM ページのデータ コンテンツをユーザー レベルから直接読み取ることです。

于 2014-02-21T09:53:49.817 に答える