Mở menu

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.

Cập nhật 4 phút đọc
BIOS / UEFI cover

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 đó:

PhaseVai trò chính
SECKhởi tạo cực sớm sau reset
PEIKhởi tạo memory và platform cơ bản
DXELoad driver, tạo UEFI services
BDSChọ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.

Đọ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.