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



我已经为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(有关更多细节,请参阅回答中的第一条注释)。

其余的问题在一个新的、更具体的主题中处理:

编译后lkm的互换性

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

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

除非您正在编写一个模块或依赖于SLAB的东西(这是非常不可能的),那么您可能不想包括linux/slab.h头。

相关内容

最新更新