GRUB
PC の場合は GRUB を使うことが一般的。
非UEFI BIOS の場合:
- BIOSが起動
- ブートメディアのブートローダー(ハードディスクなどの場合は最初のセクタ)から GRUB ステージ1として boot.img を起動
- 必要に応じ、GRUB ステージ1.5としてcore.img を起動
- ファイルシステムから /boot/grub などの中にある GRUB ステージ 2 を起動
- カーネルを起動
UEFIの場合:
- UEFI が起動
- ブートメディアの UEFI システムパーティション 中のEFIアプリケーションとして grub.efi や grubx64.efi などを起動
- カーネルを起動
カーネルを起動したあと
- カーネルとして vmlinuz を起動(bzImage形式の自己解凍ファイル)
- 初期 RAM ディスクとして initrd ないし initramfs を展開し初期ルートファイルシステムとしてマウント
- RAMディスク内の /linuxrc ないし /init を起動し、ストレージ内の本番ルートファイルシステムを初期ルートファイルシステムに代わってマウント
- 本番ルートファイルシステム内の /sbin/init を実行
U-boot
組込みシステムの場合は U-boot を使うことが一般的
※ 調査中
- マイコンの内蔵メモリからブートコードがステージ1として起動
- ブートコードにより、U-boot が起動
- uImage 形式のイメージを参照
- uImage ヘッダから展開先アドレスなどを取得、uImage ペイロードを検証
- uImage ペイロードを必要に応じ解凍、指定アドレスに展開
- 展開したカーネルを起動
uImage 基礎知識
U-boot で読み込める形式は2つ
- zImage 形式
- FIT 形式
FIT形式は署名などが付けられます