Firmware Execution Flow Overview

Knowledge map về luồng thực thi firmware từ SEC, PEI, DXE, BDS tới TSL và Runtime.

3 phút đọc
Firmware Execution Flow cover

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:

01 SEC

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.

02 PEI

Memory + HOB + PPI

Init DRAM, publish PPI, tạo HOB để bàn giao cho DXE.

03 DXE

Driver + Protocol

Dispatch driver, build handle database, enumerate thiết bị.

04 BDS

Chọn boot option

Đọc BootOrder/Boot####, parse Device Path và load EFI image.

05 TSL

OS loader

Boot loader chuẩn bị kernel và gọi ExitBootServices().

06 RT

Runtime

OS chạy, chỉ còn Runtime Services và một số đường SMM/variable còn liên quan.

Firmware không chạy như một chương trình thẳng. Nó đi qua nhiều môi trường có service và dữ liệu khác nhau.

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:

1

Có POST code/log tới đâu?

Nếu chưa qua PEI, đừng debug BootOrder.

2

DXE đã publish protocol chưa?

Storage có Block I/O, Simple File System, Device Path không?

3

BDS đọc option nào?

Dump BootOrder, BootNext, BootCurrent và Boot####.

4

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.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.