我为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(有关详细信息,请参阅答案中的第一条评论)。
剩下的问题在一个新的,更具体的主题中处理:
答案 0 :(得分:0)
所以你需要告诉我们内核版本。但是查找linux内核版本和内存分配器,看起来默认主线内核从SLAB切换到SLUB。
默认情况下,Linux内核使用SLAB分配系统直到版本 2.6.23,当SLUB分配成为默认值时。
除非您正在编写依赖于SLAB的模块或某些东西(非常不可能),否则您可能不希望包含linux/slab.h
标题。