2

BAR を公開する PCI デバイスと、デバイスにアクセスするためのバーのオフセットがいくつかあります。バー オフセットの 1 つで、64KB の割り当てられたメモリをプログラムする必要があります。私の Linux ドライバーでは、kmalloc() を使用して 64KB のメモリを割り当てていますが、これは仮想アドレスを返します。これがオフセットにプログラムされている場合、ハードウェアは同じものを見ることができません。この仮想アドレスを物理アドレスに変換するにはどうすればよいですか? Google で検索すると、virt_to_phys() を指しているリンクがほとんど表示されませんが、これが kmalloc() ではうまく機能しないという回答はほとんどありません。これについてどうすればいいですか?

4

2 に答える 2

0

kmalloc() を使用する代わりに、 alloc_pages() 関数を使用します。

struct page* alloc_pages(gfp_t gfp_mask, 4 );

1 ページは 4K なので、16 * 4K = 64K メモリに等しい 2^4=16 ページを割り当て、物理アドレスを返します。

于 2013-05-21T09:02:15.337 に答える