2011-10-23 3 views
2

起動時に割り当てられるメモリが必要です。仮想アドレスではなく物理アドレスが必要です。また、私はDMA地域からは望んでいません。それは私の目的ではありません。起動時にメモリが割り当てられる

私はalloc_bootmem()、alloc_bootmem_pages()を試しましたが、仮想アドレスを返します。 私はalloc_low_page()も見ましたが...期待通りに動作しませんでした。

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

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

ここではどこを探しているのかが分かりました。

私はdo_it_here_in_this_wayを知らせるのではなく、正しい方向へのポインタとして答えたいと思っています。メモリ私の知る限り

答えて

2

おかげで:)あなただけの(alloc_bootmem呼びます)と物理アドレスを取得するためにvirt_to_physを使用できるように物理メモリがあるbootmemアロケータがcontigiousで買う戻りました。

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

+0

私はvirt_to_physを使用していて、毎回同じ物理的な場所が得られることを確認しました。依然として問題はまだありません。まだ関係がないので、無関係なタイプは言えません。それと戦い、あなたに知らせるでしょう。ありがとう:) – Omie

+0

まだ他の問題を見ているが、私はこれを閉じることができます。 alloc_bootmemの使用は正しい方法と思われます。 virt_to_physはそれを確認するのを助けました。 – Omie

関連する問題