可加载内核模块:未知符号malloc_sizes(错误0)

时间:2013-01-07 20:13:09

标签: android android-ndk malloc kernel-module

我为Android开发了一个可加载内核模块(LKM)。

我使用kzalloc

device = kzalloc(ndevices * sizeof (*device), GFP_KERNEL);

并且它工作了一段时间,但在更新了我的android之后(因为4.1它不再有用),我在insmod上出现了以下错误:

insmod module.ko
insmod: init_module 'module.ko' failed (No such file or directory)

DMESG says:
Unknown symbol malloc_sizes (err 0)

这与inux/slab.h有关,这就是我所知道的。

我用谷歌搜索了几天,我很沮丧,没有找到解决方案来解决这个问题,让LKM重新开始工作。

也许有人可以帮助我吗?

结论:

接受的答案是正确的:尝试删除slab.h并将缺少的方法定义为“extern”。或者在您的内核源代码中,使用“make menuconfig”并将SLAB更改为SLUB(有关详细信息,请参阅答案中的第一条评论)。

剩下的问题在一个新的,更具体的主题中处理:

Interchangeability of compiled LKMs

1 个答案:

答案 0 :(得分:0)

所以你需要告诉我们内核版本。但是查找linux内核版本和内存分配器,看起来默认主线内核从SLAB切换到SLUB。

  

默认情况下,Linux内核使用SLAB分配系统直到版本   2.6.23,当SLUB分配成为默认值时。

除非您正在编写依赖于SLAB的模块或某些东西(非常不可能),否则您可能不希望包含linux/slab.h标题。