What is BootOrder?
Quick note explaining BootOrder for BIOS/UEFI and embedded firmware readers.
BootOrder is a UEFI variable that stores the default order in which Boot Manager tries Boot#### options. It does not contain the boot file path directly. It only stores option numbers such as 0001, 0000, and 0003; each number refers to a variable named Boot0001, Boot0000, or Boot0003.
How BootOrder points to Boot####
Example:
Boot0000 = Windows Boot Manager
Boot0001 = UEFI USB SanDisk
Boot0003 = UEFI PXE IPv4
BootOrder = 0001,0000,0003
Firmware will try:
Boot0001 → try USB
Boot0000 → if USB fails, try Windows Boot Manager
Boot0003 → if that also fails, try PXE
Each Boot#### usually contains an EFI_LOAD_OPTION:
| Field | Meaning |
|---|---|
| Attributes | Whether the option is active, hidden, etc. |
| FilePathListLength | Length of the device path/file path data |
| Description | Display name in the boot menu |
| FilePathList | Device Path to the partition and .efi file |
| OptionalData | Extra data for the loader, if present |
So boot debugging cannot stop at BootOrder; you must inspect the referenced Boot#### entry as well.
Quick checklist
Practical failure example
You select USB boot in BIOS setup, but the machine still boots Windows. One possible state is:
BootNext = not set
BootOrder = 0000,0001
Boot0000 = Windows Boot Manager
Boot0001 = UEFI USB SanDisk
Firmware tries Windows first. If Windows boots successfully, it never reaches the USB option. The fix may be to change BootOrder to 0001,0000, or use a one-shot boot menu that sets BootNext=0001.
Another case:
BootOrder = 0001,0000
Boot0001 = UEFI USB SanDisk, but its device path is stale
Here the order is correct, but the option content is wrong. Firmware tries Boot0001, cannot open the referenced device or file, and falls back to Boot0000. From the outside it looks like “BootOrder does not work”, but the real issue is inside Boot0001.
Takeaway
BootOrder is a list of option numbers. Boot#### contains the real boot target description. Always inspect both.
Related notes
Public references
- UEFI Specification 2.11 - Boot Manager
- EDK II - UefiBootManagerLib/BmBoot.c
- EDK II - UefiBootManagerLib.h
Found this useful?
Save it or share it with someone learning firmware, BIOS/UEFI, and embedded systems.
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.
Boot Failure Playbook
A firmware engineer playbook for debugging missing boot options, invalid BootOrder, broken Device Paths, and BDS boot failures.
bcfg Deep Dive
How to use UEFI Shell bcfg to inspect, add, remove, and debug UEFI boot options from the firmware side.
dmpstore Deep Dive
How to use UEFI Shell dmpstore to inspect boot variables, Secure Boot variables, setup variables, and NVRAM state during firmware debug.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.