UEFI Boot Flow tổng quan cho người mới
Giải thích luồng khởi động UEFI từ SEC, PEI, DXE đến BDS theo cách dễ hiểu cho người mới học firmware.
1. Vấn đề
Khi mới học BIOS/UEFI, rất nhiều người bị rối vì tài liệu thường nhảy thẳng vào các khái niệm như PEI, DXE, BDS, Protocol, Handle, GUID.
Cách học dễ hơn là xem UEFI như một quá trình khởi động có nhiều giai đoạn. Mỗi giai đoạn có một nhiệm vụ riêng.
2. Bức tranh tổng thể
Một luồng boot UEFI cơ bản có thể hình dung như sau:
Power On
↓
SEC
↓
PEI
↓
DXE
↓
BDS
↓
Boot Loader
↓
Operating System
Trong đó:
| Phase | Vai trò chính |
|---|---|
| SEC | Khởi tạo cực sớm sau reset |
| PEI | Khởi tạo memory và platform cơ bản |
| DXE | Load driver, tạo UEFI services |
| BDS | Chọn thiết bị boot và chạy boot loader |
3. SEC Phase
SEC là viết tắt của Security Phase.
Đây là phase rất sớm sau khi CPU reset. Ở thời điểm này, DRAM thường chưa sẵn sàng, nên firmware phải dùng tài nguyên rất hạn chế.
Nhiệm vụ thường gặp:
- Thiết lập môi trường chạy ban đầu.
- Chuẩn bị temporary memory.
- Chuyển quyền điều khiển sang PEI.
4. PEI Phase
PEI là viết tắt của Pre-EFI Initialization.
PEI chịu trách nhiệm khởi tạo những phần tối thiểu để hệ thống có thể tiếp tục boot, đặc biệt là memory.
Nhiệm vụ thường gặp:
- Khởi tạo DRAM.
- Phát hiện thông tin platform.
- Load các PEIM cần thiết.
- Tạo HOB để truyền thông tin sang DXE.
HOB có thể hiểu đơn giản là các khối thông tin mà PEI để lại cho DXE sử dụng.
5. DXE Phase
DXE là viết tắt của Driver Execution Environment.
Đây là phase rất quan trọng vì nhiều UEFI driver được load và chạy tại đây. Các khái niệm như Handle, Protocol, Boot Services, Runtime Services thường xuất hiện nhiều trong DXE.
Ví dụ một driver trong DXE có thể:
EFI_STATUS
EFIAPI
MyDriverEntryPoint (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
return EFI_SUCCESS;
}
Nhiệm vụ thường gặp:
- Load DXE drivers.
- Publish protocols.
- Tạo handle database.
- Cung cấp Boot Services và Runtime Services.
- Chuẩn bị môi trường cho BDS.
6. BDS Phase
BDS là viết tắt của Boot Device Selection.
Sau khi DXE đã chuẩn bị đủ driver và service, BDS sẽ chọn thiết bị boot theo boot option.
Ví dụ:
- Boot từ SSD/NVMe.
- Boot từ USB.
- Boot từ network.
- Boot vào UEFI Shell.
Nhiệm vụ cuối cùng của BDS là chuyển quyền điều khiển sang boot loader của hệ điều hành.
7. Checklist khi đọc source UEFI
Khi đọc source UEFI, có thể tự hỏi:
- File này thuộc phase nào?
- Driver này publish protocol gì?
- Driver này consume protocol gì?
- Entry point nằm ở đâu?
- Có tạo handle mới không?
- Có liên quan đến boot option không?
- Code này chạy trước hay sau memory initialization?
8. Bài liên quan nên đọc tiếp
Nếu bạn mới học UEFI, nên đọc tiếp các bài sau:
9. Kết luận
UEFI Boot Flow có thể khó ở lần đầu, nhưng nếu chia theo phase thì sẽ dễ hiểu hơn nhiều.
Cách nhớ đơn giản:
SEC: bắt đầu cực sớm
PEI: chuẩn bị memory/platform
DXE: load driver và tạo service
BDS: chọn thiết bị boot
Khi đọc source code BIOS/UEFI, việc đầu tiên không phải là hiểu từng dòng code ngay, mà là xác định đoạn code đó thuộc phase nào và vai trò của nó trong toàn bộ boot flow.
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.
SEC, PEI, DXE, BDS là gì trong UEFI?
Giải thích bốn phase quan trọng trong UEFI boot flow gồm SEC, PEI, DXE và BDS theo cách dễ hiểu cho người mới học firmware.
BIOS là gì? Khác gì với firmware thông thường?
Giải thích BIOS là gì, BIOS khác gì với firmware thông thường, vai trò của BIOS trong quá trình khởi động máy tính và vì sao embedded engineer nên hiểu BIOS/UEFI.
BIOS và UEFI khác nhau như thế nào?
Giải thích sự khác nhau giữa Legacy BIOS và UEFI theo góc nhìn firmware, boot flow và khả năng mở rộng hệ thống.
Đọc thêm về BIOS/UEFI
Khám phá các bài viết về BIOS/UEFI, embedded firmware, debugging và system-level thinking.