在Linux中插入模块时出错 - 1无法分配内存

时间:2012-04-21 19:59:48

标签: memory-management filesystems linux-kernel

eCryptfs是一个符合POSIX标准的加密文件系统,自2.6.19版以来一直是主线Linux内核的一部分。

当我尝试插入模块(ecryptfs.ko)时,出现以下错误:

  

insmod:插入'ecryptfs.ko'时出错:-1无法分配内存

有人可以帮助我吗?

下面的

dmesg

Failed to allocate one or more kmem_cache objects

kmem_cache_create: duplicate cache ecryptfs_auth_tok_list_item

Pid: 3332, comm: insmod Tainted: G           O 3.2.2+ #1

Call Trace:

[<c102bfe0>] ? printk+0x15/0x17

[<c10878b6>] kmem_cache_create+0x41c/0x458

[<d0ebd038>] ecryptfs_init+0x38/0x1b1 [ecryptfs]

[<c1001071>] do_one_initcall+0x71/0x118

[<d0ebd000>] ? 0xd0ebcfff

[<c1055703>] sys_init_module+0x60/0x18c

[<c12db9b0>] sysenter_do_call+0x12/0x36

ecryptfs_init_kmem_caches: ecryptfs_auth_tok_list_item: kmem_cache_create 
failed

 Failed to allocate one or more kmem_cache objects

2 个答案:

答案 0 :(得分:1)

从您在dmesg中看到的错误开始:

kmem_cache_create: duplicate cache ecryptfs_auth_tok_list_item

加载ecryptfs模块时,它首先要为自己创建一堆内存缓存。该错误表明已存在具有该名称的缓存。

您可以通过查看sysfs:

来检查缓存是否已存在
$ ls -ld /sys/kernel/slab/ecryptfs*

NB。由于平板合并,它可能不会显示在/proc/slabinfo中。

如果你看到任何表明已经加载了ecryptfs模块的ecryptfs slab,或者它已经内置在你的内核中。

通常情况下,模块加载器不会让你加载同一个模块两次,但也许你做了一些奇怪的事情来混淆它。

答案 1 :(得分:0)

这种情况发生的可能原因是,如果重新编译并安装内核及其模块,但在安装内核之前忘记挂载/启动。重新启动后,将使用旧内核但新模块运行。无论如何,请检查正在运行的内核是否是最新的,如果有疑问,请重新安装内核和模块:

mount /boot 
cd /usr/src/linux 
make && make install && make modules_install 

我已完成上述步骤并且错误已解决