2011-10-23 99 views
2

我需要在啓動時分配一些內存。我需要它的物理地址,而不是虛擬地址。另外,我不希望它來自DMA區域,那不是我的目的。獲取啓動時分配的內存

我試過alloc_bootmem(),alloc_bootmem_pages()但他們返回虛擬地址。 我也看着alloc_low_page()...沒有按預期工作。

事情是,我需要某種RAM中的保留區域..不必由內核映射..我將嘗試自己管理該區域。我需要在每次啓動時都使用相同的物理區域。

我也嘗試在init/main.c中分配一些內存:start_kernel(),但是也沒有工作。

現在停留在哪裏/尋找什麼。

我寧願回答作爲指向正確的方向,而不是告訴do_it_here_in_this_way。

謝謝:)

回答

2

AFAIK的記憶又回到買bootmem分配器是contigious是物理內存,所以你可以叫alloc_bootmem(),並使用virt_to_phys獲得的物理地址。

無法保證在每次啓動時都獲得相同的地址,但只要您不會更改內核,分配將始終以相同的順序(和大小)進行,以便您期望得到什麼。

+0

好的,我用virt_to_phys,它證實我在每次啓動時都得到相同的物理位置。仍然有一個問題..不那麼相關,但不能說無關的類型。將與它戰鬥,讓你知道。謝謝:) – Omie

+0

仍在尋找其他問題,但我可以關閉這一個。並使用alloc_bootmem似乎是正確的方式。 virt_to_phys幫助確認了這一點。 – Omie