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

标签 linux-kernel

我想启动从源代码编译的 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/

相关文章:

linux-kernel - 使用 populate_sdk 包含内核头文件

linux - Linux Kernel OOPS 可以由用户进程引起吗?

linux - 虚拟内存中0x400000以下是什么?

linux-kernel - iptables 和 libpcap

linux-kernel - vmware 工作站中的自定义 Linux 内核构建失败

c - Linux Char 设备驱动程序如果作为外部模块构建则无法工作,但如果针对运行的内核进行构建则可以正常工作。但是为什么呢?

c - 在c程序中,当主线程终止时,整个进程是否终止?

c - 为什么要定义一个宏而不是直接使用?(请看我想要什么的描述)

linux - 如何将多个结构 BIO 组合成一个结构请求?

linux - 如何调试在引导期间卡住的 Linux 内核?