我使用 GRUB 作为自定义操作系统的引导程序。我希望它进入图形模式,这样我就不必在系统中自己执行此操作。但是,在 GRUB 将控制权传递给操作系统之前,视频模式会更改回 80x25 文本模式。我尝试使用,set gfxpayload=keep
但似乎没有任何效果。我选择的模式(使用 set gfxmode=1024x768x24
)在 GRUB 仍处于活动状态时工作正常,但在将控制权传递给操作系统的入口点之前,它会返回文本模式。我做错了什么吗?以下是我的grub.cfg
文件:
set root=(hd0,1)
set gfxmode=1024x768x24
set gfxpayload=keep
insmod vbe
insmod vga
insmod video_cirrus
insmod gfxterm
set menu_color_normal=red/blue
set menu_color_highlight=green/blue
loadfont /boot/grub/fonts/unicode.pf2
terminal_input console
terminal_output gfxterm
set timeout=1
set default=0
menuentry "Trolololo" {
multiboot /kernel
boot
}
答案1
问题解决了。正如 sawdust 所建议的,分析 GRUB 的源代码是一种方法(文件grub_multiboot_set_console
中的函数grub-2.00/grub-core/loader/multiboot.c
)。
问题是我的内核是通过multiboot <filename>
命令加载的,而 Linux (在大多数情况下)是通过命令加载的linux <filename>
。多重引导规范要求在多重引导标头中提供有关首选视频模式的信息。如果没有提供该信息,GRUB 会在启动内核之前切换回文本模式并完全忽略gfxpayload
变量。