我多早可以在arm linux内核中调用kalloc?

时间:2010-03-27 00:34:58

标签: linux arm boot

我想从arm linux内核中的machine_init函数动态分配内存。但是,我的测试表明,调用kalloc有时会导致系统完全无法启动。

我的调试工具非常有限,所以我无法提供有关失败的更多信息。

简单地说,从ARM linux中的kalloc函数调用machine_init是否合法,如果没有,是否有其他选择?

据我所知,在大多数情况下,在启动过程的早期分配内存是错误的(这种工作应该由设备驱动程序完成);但是,我确信我的特定项目需要它。

2 个答案:

答案 0 :(得分:3)

我无法看到调用machine_init的位置,但我不禁想到你正在尝试做错事。

设备驱动程序和其他子系统有自己的初始化时间,尝试很早就做的事情通常是一个错误(因为尚未启动所需的东西)。你可以在初始化设备驱动程序时调用kmalloc(至少,大多数。也许控制台驱动程序是不同的。)

在任何情况下,您的ARM都表明它是一个嵌入式系统,因此您不太可能需要处理许多不同的硬件。你不能只是静态地分配一个尽可能多的元素的数组(如果超过它就给出一个错误)?

答案 1 :(得分:0)

Kmalloc是顶级slab / slob / slub内存框架工作的内核API。一旦这些框架(内核使用的框架)中的任何一个被初始化,kmalloc就可以正常工作。在slab / slob / slub初始化之后确保你的电话

欢呼声