1

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

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

简而言之,kallocmachine_initARM linux 中的函数调用是否合法,如果不是,是否有替代方法?

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

4

2 回答 2

3

我看不到 machine_init 是从哪里调用的,但我不禁认为您正在尝试做错事。

设备驱动程序和其他子系统有自己的初始化时间,尽早尝试通常是错误的(因为需要的东西还没有开始)。您绝对可以在设备驱动程序的初始化期间调用 kmalloc(至少,大多数。也许控制台驱动程序不同)。

无论如何,你在 ARM 上的事实表明它是一个嵌入式系统,所以你不太可能需要处理很多不同的硬件。您不能只静态分配一个包含尽可能多的元素的数组(如果超出则给出错误)?

于 2010-03-27T23:28:34.247 回答
0

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

干杯

于 2014-09-22T05:07:50.603 回答