我想启动从源代码编译的 Linux 3.18.48,分辨率为 640x480。所以我向它传递一个参数 vga=0x312。由于某种原因,它不起作用。
为了了解发生了什么,我 grep 了“vga=”的内核源代码,期望一些宏 __setup(“vga=”, function_ptr),类似于其他内核命令行参数(video=、root= 等)。 然而,并没有这种情况发生。
那么Linux内核是如何解析vga=参数的呢?
最佳答案
根据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
现在它可以正确设置分辨率。
关于linux-kernel - Linux内核如何解析vga=参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442204/