-
UEFI自体のブートプロセスが これ (ArchWiki)
-
- システムのスイッチが入る - POST (Power On Self Test) プロセス
-
- UEFI ファームウェアがロードされます。ファームウェアは起動に必要なハードウェアを初期化します
-
- 次にファームウェアはブートマネージャのデータを読み込みどの UEFI アプリケーションをどこから (つまりどのディスク・パーティションから) 起動するか決定します
-
- ファームウェアのブートマネージャのブートエントリに定義されているように UEFI アプリケーションをファームウェアが起動します
-
- 起動した UEFI アプリケーションは設定によって他のアプリケーション (UEFI シェルや rEFInd の場合) やカーネルと initramfs (GRUB などのブートローダの場合) を起動します
-
-
MBR:先頭セクタの末尾が55 aaだったら0x7c00にコピーして実行
- 1セクタあたり512バイトだが、後半の方は予約領域やパーティションのテーブルエントリを指定する領域となっているため、コードは440バイトしか書けない
- コード512バイト、スタック等のデータ領域512バイトを32KiB (0xFFFF) から引く (0xFFFF - 1024byte) と 0x7c00となり、これによってMBRとデータ領域がメモリの末尾にロードされることになる、というのがこのアドレスである理由
-
EFI:EFIパーティションを読み込み、どのパーティションもしくはアプリケーションを読み込むかを決定して実行(ここよくわかってない)(EFIシステムパーティションの、/EFI/BOOT/BOOTX64.EFI が読まれる?)
-
結局GRUB起動すれば変わらない?
-
大まかな起動処理:Linuxがブートするまで
-
GRUBはそのOSのカーネル
vmlinuz-*とRAMディスクinitramfs-*.imgをメモリ上にロードし、カーネルの先頭アドレスにジャンプし、その役目を終える -
ブートローダから起動されたカーネルの実行バイナリ
vmlinuzは、低レベルな初期化処理を実行した後、カーネルの本体を自己解凍し、メモリにロードする。次に、カーネルの本体の先頭アドレスにジャンプした後、さらに様々な初期化処理を実行する> -
カーネルは全ての初期化処理を終えると、初期RAMディスク (initrd) を展開し、仮のルートファイルシステムとしてマウントする。初期RAMディスクには、本番のルートファイルシステムが置いてあるディスクをマウントするために必要なドライバや、各種ユーティリティが含まれている
-
initrdには、主にinitrdとinitramfsの2形式があり、現在では後者が使われることが多い
-
GRUB起動→vmlinux展開→initramfs展開→init(systemdとか)がよしなに ということかな
-
VPS(Arch Linux)で/bootを見ると、initramfs-linux.img と vmlinuz-linux があった
-
initramfsは見ただけでは全くわからんけど、mkinitcpioとかあるしcpio形式?
- cpioのマジックナンバーは0x070707らしいけど、見た感じちがうっぽい
-
$ od -Ax -tx2z /boot/initramfs-linux.img
-
000000 b528 fd2f 5804 ca8c ee05 885a 1e05 1052
-
…
-
- fileコマンドの存在忘れてた
Zstandard compressed dataらしい- マジックナンバーは0x28b52ffd!
- 検索した時、Googleが Wikipedia から Zstandard dictionary のマジックナンバーを出してきて焦った
- cpioのマジックナンバーは0x070707らしいけど、見た感じちがうっぽい
-
vmlinuxはMZ形式?
- fileコマンドによれば、
Linux kernel x86 boot executable bzImageらしいです
- fileコマンドによれば、
-
initramfsをいい感じにコピーして展開してみようか
zstd -d initramfs-linux.img -o initramfs-linuxとして解凍、file initramfs-linuxの結果はcpioとなった- cpioコマンドは標準入力から受け取るらしい
cpio -idv < initramfs-linuxとすると、見慣れたusrやetcなどのディレクトリが!!- sysやdevはからっぽ
-
ここで死ぬほどわかりやすい記事を見つけた
- initramfsについて - Qiita
- grubが何をしているのか等
- Linux Kernel 2.4 Internals
- 網羅されてる感がある
- SLED 15 SP5 | 管理指南 | 開機過程簡介
- 中国語だけど(
cha-bootという文字列がURLに含まれる、中国語で書かれたドキュメントをいくつか見つけた)
- 中国語だけど(
- initramfsについて - Qiita