Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxのブートプロセス

 Linuxのブートプロセス

以下動画のテキストです
https://youtu.be/aqiENZbyC8Q

Satoru Takeuchi

March 02, 2025
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. はなすこと • マシンの電源を入れてからLinuxのinitプロセスが起動するまでの流れ ◦ initプロセスは最近のLinuxディストリビューションの場合は大体 systemd • 前提 ◦ アーキテクチャはx86_64

    ◦ ファームウェアはUEFI BIOS ◦ ブートローダはGRUB ◦ 1台のディスクを搭載した物理マシン上に GRUBとLinuxをインストールしている • 以下は省略。別動画で説明するかも ◦ Secure Boot ◦ initramfs 2
  2. 大まかな流れ 1. 人間がマシンの電源を入れる 2. マシン上のUEFI BIOSが起動 3. UEFI BIOSがハードウェアを初期化 4.

    UEFI BIOSがGRUBをロードして実行 5. GRUBがvmlinuzファイルをロード 6. GRUBがカーネル展開コードを実行 7. 展開コードがカーネルをロードして実行 8. カーネルがシステムを初期化してinitプロセスを実行 3
  3. マシン上のUEFI BIOSが起動 • マシンは電源を入れると特定アドレス(0xFFFFFFF0)上に存在するUEFI BIOSプロ グラムを動かすようになっている • UEFI BIOSはマシンの不揮発性メモリ上に存在しており、システム起動時に物理ア ドレス空間の上述のアドレスにマップされている

    ◦ 📝 つまり物理アドレスが物理メモリ以外のデータを指すことがある ◦ 📝 UEFI BIOS以外にも物理アドレス空間にマップされるデータは他にもあるが、本動画では以下 のようなイメージを持っていればいい 4 物理アドレス空間 0 0xFFFFFFF0 不揮発性メモリ上の UEFI BIOS 物理メモリ 物理メモリ
  4. UEFI BIOSがハードウェアを初期化 • CPUの動作確認、初期化 ◦ ブート直後は機能制限されていて、 UEFI BIOSが制限を外すというイメージ • メモリの動作確認、初期化

    ◦ これをする前は物理メモリにアクセスできない! • ディスクなどのその他ハードウェアを初期化 • どこの領域にどんなデータがマップされているかを記録 ◦ 📝 後でカーネルが使う 5
  5. UEFI BIOSがGRUBをロードして実行 1. GPT形式のパーティションテーブルでフォーマットされたディスクを探す 2. BSP(Boot Strap Partition)というGUIDを持つパーティションを見つける a. 📝

    このパーティションは FAT32ファイルシステムでフォーマットされている 3. BSPから「UEFIアプリケーション」と呼ばれる実行ファイルを見つける a. 📝 UEFIアプリケーションを実行するのは LinuxではなくUEFI BIOS 4. UEFI BIOSはUEFIアプリケーションとして存在しているGRUBを実行 a. 通常はGRUBがデフォルトで動作するように設定されている 6 UEFI BIOS 物理アドレス空間 disk (1) GRUBを読み出し GRUB (2) GRUBをロード&実行
  6. GRUBがvmlinuzファイルをロード(前提知識) • BSPはLinux動作時に通常(“/boot/efi/”)にマウントされている ◦ GRUB EFIアプリケーションのファイル名は通常 ”/boot/efi/EFI/BOOT/BOOTX86.EFI” • vmlinuzファイルは通常ブートパーティション(“/boot/”)に存在する ◦

    名前は”vmlinuz-<カーネバージョン>” ◦ 📝 GRUBはLinuxの一部のファイルシステム (e.g. ext4, XFS)を読み出せる ▪ “/boot”はGRUBが読み出せるファイルシステムでなければならない • カーネル圧縮イメージのフォーマット(bzImage形式と呼ばれる): 7 setup header カーネル展開コード カーネル圧縮イメージ カーネル展開コードやカーネルの ロード先メモリアドレス、エントリポイ ントを保持