2010-03-27 34 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初始化后确保您的通话

欢呼声

相关问题