我在加载内核模块时传递一个字符串作为参数。 当字符串是> 1024个字符,modprobe导致错误:
FATAL: Error inserting mymodule (/lib/modules..): No space left on device
dmesg输出:
mystr: string parameter too long
模块参数是否限制为1024个字符串?
答案 0 :(得分:2)
我认为不仅模块而且所有linux命令内核参数都限制为1024个字符。从linux source code开始,归档kernel/params.c
:
int param_set_charp(const char *val, const struct kernel_param *kp)
{
if (strlen(val) > 1024) {
pr_err("%s: string parameter too long\n", kp->name);
return -ENOSPC;
}
maybe_kfree_parameter(*(char **)kp->arg);
/* This is a hack. We can't kmalloc in early boot, and we
* don't need to; this mangled commandline is preserved. */
if (slab_is_available()) {
*(char **)kp->arg = kmalloc_parameter(strlen(val)+1);
if (!*(char **)kp->arg)
return -ENOMEM;
strcpy(*(char **)kp->arg, val);
} else
*(const char **)kp->arg = val;
return 0;
}
所以答案是,你不能传递大于1024个字符的参数。