eCryptfs 是一个符合 POSIX 标准的加密文件系统,自 2.6.19 版本以来一直是主线 Linux 内核的一部分。
当我尝试插入模块 (ecryptfs.ko) 时,出现以下错误:
insmod: error inserting 'ecryptfs.ko': -1 Cannot allocate memory
有人能帮帮我吗?
下面是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
最佳答案
从您在 dmesg 中看到的错误开始:
kmem_cache_create: duplicate cache ecryptfs_auth_tok_list_item
ecryptfs
模块加载后,它做的第一件事就是为自己创建一堆内存缓存。该错误表明已经存在同名缓存。
您可以通过查看 sysfs 来检查缓存是否已经存在:
$ ls -ld /sys/kernel/slab/ecryptfs*
注意。由于 slab 合并,它可能不会出现在 /proc/slabinfo
中。
如果您看到任何 ecryptfs slab 表明 ecryptfs 模块已经加载,或者它已经内置到您的内核中。
通常模块加载器不会让你加载同一个模块两次,但也许你做了一些奇怪的事情来混淆它。
关于memory-management - 在 Linux 中插入模块时出错 -- 1 无法分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262510/