Linux内核如何解析vga =参数?

时间:2017-11-22 19:10:17

标签: linux-kernel

我想启动从源代码编译的Linux 3.18.48,分辨率为640x480。所以我传给它一个参数vga = 0x312。出于某种原因,它不起作用。

为了理解发生了什么,我为“vga =”编写了内核源代码,期待一些宏__setup(“vga =”,function_ptr),类似于其他内核cmdline参数(video =,root =等)。 但是,没有这种情况发生。

那么Linux内核如何解析vga = parameter?

1 个答案:

答案 0 :(得分:3)

根据docs

vga=        [BOOT,X86-32] Select a particular video mode
            ...
            This is actually a boot loader parameter; the value is
            passed to the kernel using a special protocol.

所以内核根本不解析这个参数。在我的例子中,它的GRUB 2.02解析这个参数并通过变量gfxpayload传递给内核,如GRUB' linux command中所列。

现在我可以继续调查为什么忽略vga =参数,看看GRUB的来源: - )

修改

vga =仅由legacy BIOS systems上的GRUB解析。

这就是我的机器上忽略了vga =的原因。由于我使用UEFI系统,我需要直接设置gfxpayload变量:

set gfxpayload=640x480

现在它正确设置了分辨率。