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 的可互换性

4

1 回答 1

0

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

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

除非您正在编写模块或依赖于 SLAB 的东西(这极不可能),否则您可能不想包含linux/slab.h标头。

于 2013-01-07T20:19:47.143 回答