从内核更改命令行参数

时间:2018-03-12 19:03:56

标签: linux-kernel

我遇到的问题是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,内核挂起。

command_line声明如下。

static char __initdata command_line[COMMAND_LINE_SIZE];

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

1 个答案:

答案 0 :(得分:0)

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

console=ttyS0,9600

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