DXE Driver trong EDK II là gì?
Quicknote giải thích DXE Driver trong EDK II.
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.
DXE dispatcher gọi driver
DEPEX thỏa, driver nằm trong FV.
Consume protocol
LocateProtocol/HandleProtocol để tìm service/device.
Publish protocol
InstallProtocolInterface để module khác dùng.
Boot flow consume kết quả
Boot manager dùng device path/protocol/variable đã chuẩn bị.
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
- Protocol trong UEFI là gì?
- Handle Database là gì?
- UEFI Driver Model là gì?
- BDS là gì?
- Supported() trong UEFI Driver Model là gì?
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.
DEPEX là gì?
Quicknote giải thích Dependency Expression trong EDK II/UEFI.
DXE Dispatcher là gì?
DXE Dispatcher load và chạy DXE driver theo DEPEX, dựa trên protocol dependency trong handle database. Hiểu dispatch loop giúp debug driver không chạy dù build pass.
DXE Dispatcher là gì?
Giải thích DXE Dispatcher, DEPEX và cách debug khi DXE driver được build nhưng không chạy.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.