内核模块参数的字符串长度限制 [英] String length limit for a kernel module parameter

查看:168
本文介绍了内核模块参数的字符串长度限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在加载内核模块时将字符串作为参数传递. 当字符串> 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆