2

起動時にメモリを割り当てる必要があります。仮想アドレスではなく、物理アドレスが必要です。また、DMA リージョンからは取得したくありません。それは私の目的ではありません。

alloc_bootmem()、alloc_bootmem_pages() を試しましたが、仮想アドレスが返されます。alloc_low_page() も調べました...期待どおりに機能しませんでした。

つまり、RAM にある種の予約領域が必要です..カーネルによってマップされる必要はありません..私は自分でその領域を管理しようとします。すべての起動で物理領域を同じにする必要があります。

また、 init/main.c : start_kernel() にメモリを割り当てようとしましたが、それも機能しませんでした。

どこで/何を探すべきかとして、今は行き詰まっています。

do_it_here_in_this_way を伝えるよりも、正しい方向へのポインターとして答えたいと思います。

ありがとう :)

4

1 に答える 1

2

私の知る限り、返されたメモリは bootmem アロケータを購入すると物理メモリが連続しているため、 alloc_bootmem() を呼び出して virt_to_phys を使用して物理アドレスを取得できます。

すべてのブートで同じアドレスを取得する保証はありませんが、カーネルを変更しない限り、割り当ては常に同じ順序 (およびサイズ) で行われるため、取得が期待されます。

于 2011-10-23T13:59:56.503 に答える