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

在arm linux内核中,我可以多早调用kalloc?,linux,arm,boot,Linux,Arm,Boot,我想从arm linux内核中的machine_init函数动态分配内存。然而,我的测试表明,调用kalloc有时会导致系统完全无法启动 我的调试工具非常有限,因此无法提供更多有关故障的信息 简单地说,在ARM linux中从machine\u init函数调用kalloc合法吗?如果不合法,还有其他选择吗 我知道在大多数情况下,在引导过程的早期分配内存是错误的(这种工作应该由设备驱动程序来完成);但是,我确信我的特定项目需要它。我看不出machine\u init是从哪里调用的,但我不禁认为您

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

我的调试工具非常有限,因此无法提供更多有关故障的信息

简单地说,在ARM linux中从
machine\u init
函数调用
kalloc
合法吗?如果不合法,还有其他选择吗


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

我看不出machine\u init是从哪里调用的,但我不禁认为您在尝试做错误的事情

设备驱动程序和其他子系统都有自己的初始化时间,很早就尝试执行操作通常是错误的(因为所需的某些操作尚未启动)。在初始化设备驱动程序的过程中,您完全可以调用kmalloc(至少,大多数情况下,可能控制台驱动程序是不同的)


在任何情况下,事实上,你的手臂表明,这是一个嵌入式系统,所以你不太可能需要处理许多不同的硬件。你不能静态地分配一个数组,其中包含尽可能多的元素(如果超过了,请给出一个错误)?

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

干杯