内核模块参数的字符串长度限制 [英] String length limit for a kernel module parameter
本文介绍了内核模块参数的字符串长度限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在加载内核模块时将字符串作为参数传递. 当字符串> 1024个字符时,modprobe会导致错误:
I am passing a string as parameter when loading a kernel module. When the string is > 1024 chars, modprobe results in an error:
FATAL: Error inserting mymodule (/lib/modules..): No space left on device
dmesg输出:
mystr: string parameter too long
模块参数是否限制为1024个字符字符串?
Are module parameters limited to 1024 char strings?
推荐答案
我认为不仅模块,而且所有Linux命令内核参数都限制为1024个字符.来自 Linux源代码,文件kernel/params.c
:
I think not only module but also all linux command kernel parameters are limited to 1024 char. From linux source code, file 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个字符的参数.
So the answer, you can not pass parameter which bigger than 1024 chars.
这篇关于内核模块参数的字符串长度限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文