Open8
ゼロからのOS自作入門_memo
OS起動までには、いくつかのステップがある。
電源ON
↓
ファームウェア起動(レガシーBIOS、UEFI BIOS)
↓
ブートローダー起動
↓
OS起動
BIOSとは、Basic Input/Output Systemのこと。
レガシー(BIOS)と、UEFI(BIOS)があり、近年はUEFIになっている。
起動順序などを設定できるソフトウェア。
ブートローダというソフトウェアがある。これはOSを起動するために、OSをメインメモリに読み込み、起動するためのソフトウェアである。
UEFIにおいては、ストレージを特定フォーマット(FAT)でフォーマットしたのち、特定パス(/EFI/BOOT/BOOTX64.EFI)に格納したファイルを自動で起動するようになっている。
この本では、UEFIアプリケーションとして、ブートローダを実装しているようだ。
P75の脚注にあったが、Linuxはカーネルファイルの先頭部分を細工してEFIファイルと認識させるようにして、ブートローダなしで起動するための「EFI boot stub」という仕組みがあるようだ。なるほどねぇ。
3章で、ブートローダ(UEFIアプリケーション)を更新して、kernel(となるはずのプログラム)のエントリポイントを実行する変更を加えた。ブートローダはMain.cだけでなく、Loader.infも更新する必要があるのに注意。
bootloaderプログラムを変更してqemuを真っ白にしたところ(これ自体は意図した変更)
↑と類似事象が発生したが、解消↓↓
p85まで稼働した。
↑↑になるまでハマっていた問題