2010-03-27 32 views
1

我想在arm linux內核的machine_init函數中動態分配內存。但是,我的測試表明,調用kalloc有時會導致系統啓動失敗。我可以在arm linux內核中多久可以調用kalloc?

我的調試工具非常有限,所以我無法提供更多關於故障的信息。

簡而言之,從ARM Linux的machine_init函數中調用kalloc是否合法,如果沒有,是否有其他選擇?

我知道在大多數情況下,在引導過程中儘早分配內存是錯誤的(這種工作應該由設備驅動程序來完成)。但是,我確信我的特定項目需要它。

回答

3

我看不到machine_init是從哪裏調用的,但我不禁想着你在嘗試做錯誤的事情。

設備驅動程序和其他子系統有它們自己的init時間,試圖很早就做事情通常是一個錯誤(因爲所需的東西還沒有開始)。你可以在初始化設備驅動的時候調用kmalloc(至少,大多數,也許控制檯驅動是不同的)。

在任何情況下,您在ARM上表明它是嵌入式系統,因此您不太可能需要處理大量不同的硬件。難道你不能靜態地分配一個數組儘可能多的元素(如果超過的話會發出錯誤)?

0

Kmalloc是頂層slab/slb/slub內存框架上的內核API。一旦這些框架(內核使用的那個)被初始化,kmalloc就可以正常工作。在slab/slob/slub初始化後確保您的通話

歡呼聲

相關問題