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

Linux kernel Linux内核如何解析vga=参数?,linux-kernel,Linux Kernel,我想启动从源代码编译的分辨率为640x480的Linux 3.18.48。我给它传递了一个参数vga=0x312。由于某种原因,它不起作用 为了了解发生了什么,我在内核源代码中添加了“vga=”,希望有一些宏设置(“vga=”,function_ptr),类似于其他内核cmdline参数(video=,root=,等等)。 然而,没有这种情况发生 那么Linux内核如何解析vga=参数呢?根据: 因此内核根本不解析这个参数。在我的例子中,是GRUB2.02解析这个参数并通过变量gfxpayloa

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

为了了解发生了什么,我在内核源代码中添加了“vga=”,希望有一些宏设置(“vga=”,function_ptr),类似于其他内核cmdline参数(video=,root=,等等)。 然而,没有这种情况发生

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

根据:

因此内核根本不解析这个参数。在我的例子中,是GRUB2.02解析这个参数并通过变量
gfxpayload
传递给内核,如GRUB的

现在我可以继续研究为什么vga=参数被忽略,查看GRUB的源代码:-)

编辑

vga=仅由GRUB在上解析

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

set gfxpayload=640x480

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

您是如何得出“vga=0x312”的值的?AFAICT没有VESA BIOS模式0x212。您是否尝试了一个内核参数
vga=ask
,以获取菜单?@sawdust我读过这篇文章后怀疑它是正确的值:。vga=ask根本没有显示菜单。嗨,你把
set gfxpayload=640x480
语句放在哪里了?在grub.cfg中,@ChanKimok我明天会试试。今天我尝试了GFXPAYLOAD\u LINNUX=1920x1080x32,但没有成功。在我的例子中,英特尔图形芯片(CPU内部)没有驱动程序,所以我想它也不会工作。我相信它是区分大小写的。另外,我不确定是否有这样的带有'\u LINNUX'后缀的选项。如果什么都不管用,我相信它值得提出一个新问题。
set gfxpayload=640x480