BootOrderとは?
BIOS/UEFIおよびembedded firmware学習者向けにBootOrderを説明するクイックノート。
BootOrder は、Boot Manager が通常 boot 時に試す Boot#### option の順番を保持する UEFI variable です。BootOrder 自体は boot file の path を持ちません。0001、0000、0003 のような option 番号だけを持ち、それぞれ Boot0001、Boot0000、Boot0003 という variable を参照します。
BootOrder が Boot#### を参照する仕組み
例:
Boot0000 = Windows Boot Manager
Boot0001 = UEFI USB SanDisk
Boot0003 = UEFI PXE IPv4
BootOrder = 0001,0000,0003
Firmware は次の順番で試します。
Boot0001 → USB を試す
Boot0000 → USB が失敗したら Windows Boot Manager
Boot0003 → それも失敗したら PXE
各 Boot#### は通常 EFI_LOAD_OPTION を含みます。
| Field | 意味 |
|---|---|
| Attributes | option が active か、hidden かなど |
| FilePathListLength | device path/file path data の長さ |
| Description | boot menu に表示される名前 |
| FilePathList | partition と .efi file への Device Path |
| OptionalData | loader 用の追加 data |
そのため、boot debug では BootOrder だけを見ても不十分です。参照先の Boot#### まで読む必要があります。
クイックチェックリスト
実例
BIOS setup で USB boot を選んだのに Windows が起動する場合、次のような状態かもしれません。
BootNext = 未設定
BootOrder = 0000,0001
Boot0000 = Windows Boot Manager
Boot0001 = UEFI USB SanDisk
この場合 firmware は Windows を先に試します。Windows が正常に boot できれば、USB option まで進みません。修正方法は BootOrder を 0001,0000 に変えるか、one-shot boot menu で BootNext=0001 を設定することです。
別の例:
BootOrder = 0001,0000
Boot0001 = UEFI USB SanDisk だが device path が古い
この場合、順番は正しいですが option の中身が間違っています。Firmware は Boot0001 を試し、参照先 device/file を開けず、Boot0000 に fallback します。外から見ると「BootOrder が効いていない」ように見えますが、実際の原因は Boot0001 の中にあります。
覚えておくポイント
BootOrder は option 番号のリストです。実際の boot target の説明は Boot#### にあります。Debug では必ず両方を確認します。
関連ノート
公開参考資料
- UEFI Specification 2.11 - Boot Manager
- EDK II - UefiBootManagerLib/BmBoot.c
- EDK II - UefiBootManagerLib.h
この記事は役に立ちましたか?
ファームウェア、BIOS/UEFI、組み込みシステムを学んでいる人に共有できます。
Nội dung liên quan
Một số bài viết, ghi chú hoặc project có liên quan đến nội dung bạn vừa đọc.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.