Firmware Execution Flow Overview
Knowledge map về luồng thực thi firmware từ SEC, PEI, DXE, BDS tới TSL và Runtime.
Khi debug BIOS, câu hỏi quan trọng nhất không phải là “lỗi này thuộc file nào?”, mà là máy đang chết ở phase nào. Nếu nhầm phase, bạn sẽ debug sai lớp: lỗi PEI lại đi xem BDS, hoặc lỗi BDS lại nghi storage driver.
Luồng lớn của một UEFI/PI firmware có thể nhìn như thế này:
Reset → môi trường tối thiểu
CPU vừa reset, DRAM chưa sẵn sàng, dựng temporary RAM và gọi PEI.
Memory + HOB + PPI
Init DRAM, publish PPI, tạo HOB để bàn giao cho DXE.
Driver + Protocol
Dispatch driver, build handle database, enumerate thiết bị.
Chọn boot option
Đọc BootOrder/Boot####, parse Device Path và load EFI image.
OS loader
Boot loader chuẩn bị kernel và gọi ExitBootServices().
Runtime
OS chạy, chỉ còn Runtime Services và một số đường SMM/variable còn liên quan.
Vì sao knowledge map này cần tồn tại?
Các note như PPI, HOB, Protocol, BootOrder, Device Path, ExitBootServices() rất dễ bị học rời rạc. Nhưng trong firmware thật, chúng là các mắt xích của cùng một flow.
Ví dụ một lỗi “không boot Windows” có thể bắt đầu từ nhiều nơi:
| Mục | Giá trị | Ghi chú |
|---|---|---|
| PEI | Memory/HOB sai | DXE nhận thông tin nền tảng sai hoặc thiếu. |
| DXE | Driver không dispatch | Không có Block I/O hoặc Simple File System để BDS dùng. |
| BDS | Boot#### sai | Device Path trỏ sai ESP hoặc file EFI. |
| TSL | ExitBootServices fail | Loader lấy memory map rồi allocate thêm làm MapKey cũ. |
| Runtime | Variable update fail | NVRAM full, SMM variable path lỗi hoặc SPI protect. |
Debug diary: máy treo, đừng đoán vội
Một case thực tế: khách hàng nói “máy không boot được”. Nếu chỉ nhìn triệu chứng cuối cùng, rất dễ kết luận nhầm là lỗi Windows Boot Manager. Cách tôi muốn tiếp cận là khoanh vùng theo phase:
Có POST code/log tới đâu?
Nếu chưa qua PEI, đừng debug BootOrder.
DXE đã publish protocol chưa?
Storage có Block I/O, Simple File System, Device Path không?
BDS đọc option nào?
Dump BootOrder, BootNext, BootCurrent và Boot####.
Loader có tới ExitBootServices không?
Nếu StartImage thành công nhưng OS không lên, chuyển sang TSL/memory map.
Map liên kết để viết blog sau này
Firmware execution knowledge map
Firmware Execution Flow
├─ SEC: reset vector, temporary RAM, handoff to PEI
├─ PEI: PEIM, PPI, HOB, memory initialization
├─ DXE: dispatcher, protocol, handle database, driver binding
├─ BDS: BootOrder, Boot####, Device Path, LoadImage/StartImage
├─ TSL: OS loader, GetMemoryMap, ExitBootServices
└─ Runtime: Runtime Services, variable services, reset, SMM path Checklist đọc flow firmware
Bài liên quan
Thấy nội dung này hữu ích?
Lưu lại hoặc chia sẻ cho người cũng đang học firmware, BIOS/UEFI và 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.
UEFI Boot Flow: từ Reset Vector đến ExitBootServices
Không phải học để thuộc tên phase. Học boot flow để biết máy đang chết ở đâu, và debug theo hướng nào: từ SEC đến Runtime.
Boot Failure Checklist
Quicknote checklist debug lỗi boot failure theo phase.
BDS → TSL Handoff là gì?
Giải thích cách BDS chọn boot option, load EFI image và bàn giao cho OS loader trước ExitBootServices.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.