我想启动从源代码编译的Linux 3.18.48,分辨率为640x480。所以我传给它一个参数vga = 0x312。出于某种原因,它不起作用。
为了理解发生了什么,我为“vga =”编写了内核源代码,期待一些宏__setup(“vga =”,function_ptr),类似于其他内核cmdline参数(video =,root =等)。 但是,没有这种情况发生。
那么Linux内核如何解析vga = parameter?
答案 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
现在它正确设置了分辨率。