天天看点

request_module: runaway loop modprobe binfmt-464c问题解决

在裁剪内核时遇到了这个问题:request_module: runaway loop modprobe binfmt-464c.

在网上搜索到了下面这篇帖子:

Thanks for explaining this. I always thought my kernel supports ELF,
as I see this:

cat .config | grep ELF
CONFIG_ELF_CORE=y
CONFIG_BINFMT_ELF=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set

and in menuconfig

BINFMT_ELF [=y]
ELF_CORE [=y]
CORE_DUMP_DEFAULT_ELF_HEADERS [=n]
BINFMT_ELF_FDPIC [=n]
BINFMT_ELF [=y]
COMPAT_BINFMT_ELF [=n]

For everything expect the last "COMPAT_BINFMT_ELF" I have a
description in menuconfig.
Is this really the problem ?

Best regards

2011/1/10 Denys Vlasenko <vda.linux at googlemail.com>:
> On Monday 10 January 2011 08:08, Arno Steffen wrote:
>> In an embedded system it is recommended to set CONFIG_DESKTOP=n.
>> While busybox is working with CONFIG_DESKTOP=y, I get an error message
>> while booting
>> "request_module: runaway loop modprobe binfmt-464c"
>
> 464c is letters L and F. They come from this kernel code:
>
>                if (retval != -ENOEXEC || bprm->mm == NULL) {
>                        break;
> #ifdef CONFIG_MODULES
>                } else {
> #define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
>                        if (printable(bprm->buf[0]) &&
>                            printable(bprm->buf[1]) &&
>                            printable(bprm->buf[2]) &&
>                            printable(bprm->buf[3]))
>                                break; /* -ENOEXEC */
>                        request_module("binfmt-%04x", *(unsigned short *)(&bprm->buf[2]));
> #endif
>                }
>
> ELF executables start with 0x7f,'E','L','F' bytes - that's where L and F come from.
>
> You have ELF support compiled as a module.
>
> modprobe is started by kernel in order to load it.
> But modprobe is an ELF executable.
> Kernel needs to load ELF support module for it.
> modprobe is started by kernel in order to load it.
> But modprobe is an ELF executable.
> Kernel needs to load ELF support module for it.
> modprobe is started by kernel in order to load it.
> But modprobe is an ELF executable.
> Kernel needs to load ELF support module for it.
> modprobe is started by kernel in order to load it.
> But modprobe is an ELF executable.
> Kernel needs to load ELF support module for it.
> modprobe is started by kernel in order to load it.
> But modprobe is an ELF executable.
> Kernel needs to load ELF support module for it.
> At this point we trigger this:
>
>        max_modprobes = min(max_threads/2, MAX_KMOD_CONCURRENT);
>        atomic_inc(&kmod_concurrent);
>        if (atomic_read(&kmod_concurrent) > max_modprobes) {
>                /* We may be blaming an innocent here, but unlikely */
>                if (kmod_loop_msg++ < 5)
>                        printk(KERN_ERR
>                               "request_module: runaway loop modprobe %s\n",
>                               module_name);
>                atomic_dec(&kmod_concurrent);
>                return -ENOMEM;
>        }
>
>
>> I searched for solution in net, but found only something regarding 32
>> and 64bit OS.
>> Si I have no clue, what's the problem here.
>>
>> Used current busybox 1.18.1, compiled for arm.
>
> Recompile your kernel so that ELF support is built in.
>
> --
> vda
>
通过帖子中的这句:       
464c is letters L and F.      
然后,结合错误提示大概可以知道是可能是内核对二进制elf格式文件不支持, 通过这个提示想起去掉的内核选项: Userspace binary formats  ---> Kernel support for ELF binaries 重新选上该选项,编译, 下载, 运行, 问题得以解决!