1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntuの起動についてメモ(電源からブートローダまで)

Last updated at Posted at 2024-11-03

ChatGPTに聞いて知った起動の流れ自分用メモ(64bit/x86/Ubuntuマシンでざっくり検証)

  1. 電源ユニットのボタンを押す
  2. 電源ユニットからマザーボードにリクエストが飛ぶ
  3. マザーボードが各種コンポーネント(メモリ、CPU、SSDなど)にリクエストを送って起動する
  4. CPUが起動して、CPUにハードコードされたリセットベクタ(起動時のメモリ空間はマザーボード上のフラッシュメモリ(4MB)のアドレスが主にマッピングされている)から処理が開始する
  5. UEFIプログラムは、SSDの先頭にあるGPT(パーティションやパーティションの情報が書かれている)を見て、GUIDがc12a7328-f81f-11d2-ba4b-00a0c93ec93bのパーティションをESPとして認識する
  6. ESPパーティションはUEFIの場合FAT32ファイルシステムでフォーマットされていることがUEFIレベルで定まっているので、UEFIプログラムは読み込める(UEFIプログラムはFAT32ドライバをもっている)。ESPにはブートローダー(一般にOSを起動するプログラム)が入っていて、FAT32ファイルシステム上で/EFI/Ubuntu/grubx64.efiが典型(Ubuntuだと/boot/efiにESPパーティションはマウントされる)。おそらく、grubx64.efiにext4ファイルシステムのドライバが入っていたりする
  7. GRUBは、UEFIやBIOS経由で起動されるブートローダプログラム。つまり、エントリーポイントがUEFI/BIOSで、そこからGRUBに処理が引き渡される
  8. GRUBが選択されると、GRUBは次のbootパーティションを読み込む。ここはUbuntuだと/bootにマウントされる箇所で、ext4ファイルシステムでフォーマットされていがち。このext4ファイルシステムの/grub/grub.cfg(Ubuntu上だと/boot/grub/grub.cfg)を読み込む。これに基づいて、GRUBは起動するOSを選ばせてくれる(grub.cfgにはGRUBシェルスクリプトが書かれており、OS非依存でGRUB環境のもと動くらしい)
  9. GRUBに処理が引き渡されているので、この中でOSを選べば、自由にOSを起動できる

個人的おもしろポイント

  • CPUファームウェアによってBIOSかUEFIかは決まっている。その上でいくつかブートローダを選べる中で結局GRUBに処理が引き渡される。GRUBはUEFIより便利?なので、BIOSよりUEFIが進化しているとしても、嬉しい
  • Windowsを起動したい場合、UEFIからESPのWindowsブートローダを直接選んでもいいし、GRUBブートローダを選んでGRUBのインターフェースからWindowsブートローダを選んでも良い
  • リセットベクタは、x86だと0xFFFF0、RiscVだとデフォルトで0x00001000、ARMだと0x00000000_80000000など、およそISAごとに決まっているらしい
    スクリーンショット 2024-11-28 14.33.27.png
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?