我想从arm linux内核中的machine_init函数动态分配内存。但是,我的测试表明,调用kalloc有时会导致系统完全无法启动。
我的调试工具非常有限,所以我无法提供有关失败的更多信息。
简单地说,从ARM linux中的kalloc
函数调用machine_init
是否合法,如果没有,是否有其他选择?
据我所知,在大多数情况下,在启动过程的早期分配内存是错误的(这种工作应该由设备驱动程序完成);但是,我确信我的特定项目需要它。
答案 0 :(得分:3)
我无法看到调用machine_init的位置,但我不禁想到你正在尝试做错事。
设备驱动程序和其他子系统有自己的初始化时间,尝试很早就做的事情通常是一个错误(因为尚未启动所需的东西)。你可以在初始化设备驱动程序时调用kmalloc(至少,大多数。也许控制台驱动程序是不同的。)
在任何情况下,您的ARM都表明它是一个嵌入式系统,因此您不太可能需要处理许多不同的硬件。你不能只是静态地分配一个尽可能多的元素的数组(如果超过它就给出一个错误)?
答案 1 :(得分:0)
Kmalloc是顶级slab / slob / slub内存框架工作的内核API。一旦这些框架(内核使用的框架)中的任何一个被初始化,kmalloc就可以正常工作。在slab / slob / slub初始化之后确保你的电话
欢呼声