【问题标题】:Change command line argument from kernel itself从内核本身更改命令行参数
【发布时间】:2018-03-12 19:03:56
【问题描述】:

我面临一个问题,即 BIOS 总是忽略我为 cmdline 设置的任何内容。它仅使用硬编码的 cmdline 发送错误的参数。 IN "console=ttys0" "S" 是小写的。我没有 BIOS 源代码,因此无法更改。我试图从内核本身将较低的“s”更改为上的“S”。但是到目前为止我还没有成功。这是我尝试过的。

void __init setup_arch(char **cmdline_p)
{

     *cmdline_p = command_line; /* Tried to change command_line before this line */
}

进行了如下更改。

void __init setup_arch(char **cmdline_p)
{
    {
        char *ptr=NULL;
        ptr=strstr(command_line,"ttys0");
        if(ptr)
            ptr[3]='S'; 
    }
    *cmdline_p = command_line;   
}

当我尝试使用此更改启动时,内核似乎挂起。看起来我尝试修改命令行的那一刻,内核挂起。

command_line 声明如下。

static char __initdata command_line[COMMAND_LINE_SIZE];

__initdata 是否有任何限制? 任何建议我怎样才能实现我想要做的事情?

【问题讨论】:

  • 我认为我的代码更改有效。但是,随着此更改终端日志记录停止。因此它看起来像挂起。

标签: linux-kernel


【解决方案1】:

更改内核代码不是一个可行的选择。您可以通过在引导加载程序中设置命令行来更改控制台。

console=ttyS0,9600

如果您的系统有 ACPI,您还可以将自定义 ACPI 表编译到您的内核映像中,这些表会覆盖 BIOS 中的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多