
私はカスタム OS のブートローダーとして GRUB を使用しています。システムで自分でグラフィック モードにしなくても済むように、GRUB が自動的にグラフィック モードに入るようにしたいのですが、GRUB が OS に制御を渡す前に、ビデオ モードが 80x25 テキスト モードに戻されてしまいます。 を使ってみましたset gfxpayload=keep
が、何も起こらないようです。私が選択したモード (set を使用gfxmode=1024x768x24
) は、GRUB がアクティブな間は正常に動作しますが、OS のエントリ ポイントに制御を渡す前に、テキスト モードに戻ります。何か間違っているのでしょうか? 私の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 のソース コードを分析するのが 1 つの方法です (ファイルgrub_multiboot_set_console
内の関数grub-2.00/grub-core/loader/multiboot.c
)。
問題は、カーネルがmultiboot <filename>
コマンドによってロードされ、Linux が (ほとんどの場合)linux <filename>
コマンドによってロードされることです。マルチブート仕様では、優先ビデオ モードに関する情報がマルチブート ヘッダーに提供される必要があります。その情報が提供されない場合、GRUB はカーネルを起動する前にテキスト モードに戻り、gfxpayload
変数を完全に無視します。