从内核本身更改命令行参数



我遇到了一个问题,即BIOS总是忽略我为cmdline设置的任何内容。它仅使用硬编码的 cmdline,其中发送了错误的参数。在"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有什么限制吗?任何建议我如何实现我想要做的事情?

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

console=ttyS0,9600

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

最新更新