DXE Driver trong EDK II là gì?

Quicknote giải thích DXE Driver trong EDK II.

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
EDK II Terms cover

DXE Driver là module chạy trong DXE phase. Đây là nơi phần lớn initialization ở mức platform/device diễn ra: publish protocol, bind controller, đọc variable, tạo device path, chuẩn bị boot flow cho BDS.

Nếu PEI là giai đoạn dựng nền móng bộ nhớ và handoff, thì DXE là giai đoạn hệ thống bắt đầu có nhiều service đủ mạnh để driver tương tác với nhau bằng Protocol.

01 Dispatch

DXE dispatcher gọi driver

DEPEX thỏa, driver nằm trong FV.

02 Locate

Consume protocol

LocateProtocol/HandleProtocol để tìm service/device.

03 Install

Publish protocol

InstallProtocolInterface để module khác dùng.

04 BDS

Boot flow consume kết quả

Boot manager dùng device path/protocol/variable đã chuẩn bị.

Một DXE driver thường sống trong flow protocol-based của DXE.

Entry point tối giản

EFI_STATUS
EFIAPI
MyDxeEntryPoint (
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  EFI_STATUS Status;

  DEBUG ((DEBUG_INFO, "MyDxe Entry\n"));

  Status = gBS->LocateProtocol (
                  &gEfiLoadedImageProtocolGuid,
                  NULL,
                  (VOID **)&LoadedImage
                  );
  if (EFI_ERROR (Status)) {
    DEBUG ((DEBUG_ERROR, "LocateProtocol failed: %r\n", Status));
    return Status;
  }

  return EFI_SUCCESS;
}

DXE driver không chạy: đừng chỉ sửa C

Mục Giá trị Ghi chú
Không thấy log EntryPoint Chưa dispatch Kiểm tra DSC/FDF/DEPEX/DEBUG level.
EFI_NOT_FOUND Protocol/device path/variable không tồn tại Kiểm tra module nào đáng lẽ publish thứ đó.
EFI_ACCESS_DENIED Protocol/variable bị lock hoặc state không cho phép Hay gặp ở variable/security/late boot.
ASSERT trong LocateProtocol Pointer/GUID/phase sai Đọc call site và dependency trước.

DEPEX của DXE driver

Nếu driver cần protocol khác trước khi chạy, INF có thể có:

[Depex]
  gEfiPciIoProtocolGuid

Điều này có nghĩa: driver chỉ được dispatch sau khi gEfiPciIoProtocolGuid tồn tại. Nếu protocol đó không bao giờ được install, driver cũng không chạy.

Liên hệ với BootOrder và Device Path

Nhiều DXE driver không trực tiếp boot OS, nhưng chúng chuẩn bị dữ liệu để BDS dùng:

  • storage driver publish BlockIo/SimpleFileSystem;
  • device path driver tạo đường dẫn tới thiết bị;
  • variable driver cung cấp GetVariable/SetVariable;
  • BDS đọc BootOrder/Boot#### rồi load file EFI.

Vì vậy khi boot fail, lỗi có thể bắt đầu từ DXE driver rất xa BDS.

Checklist DXE driver

Ghi nhớ nhanh

DXE driver là nơi các module bắt đầu “nói chuyện” với nhau qua Protocol. Khi debug DXE, hãy đọc theo chuỗi: dispatch được chưa → dependency thỏa chưa → consume protocol nào → publish protocol nào → BDS/driver khác dùng kết quả đó ra sao.

Bài liên quan

Nguồn tham khảo public

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.