EFI_NOT_FOUND là gì?
Quicknote EFI_NOT_FOUND là gì?
EFI_NOT_FOUND nghĩa là firmware không tìm thấy thứ được yêu cầu: protocol, variable, file, handle, device path node, boot option hoặc table. Đây là một trong những status hay gặp nhất khi debug BIOS.
Nhưng EFI_NOT_FOUND không tự nói “cái gì hỏng”. Nó chỉ nói rằng tại thời điểm gọi API, object đó không tồn tại trong không gian mà API đang tìm.
Ví dụ 1: protocol chưa được install
Status = gBS->LocateProtocol (
&gEfiSimpleFileSystemProtocolGuid,
NULL,
(VOID **)&SimpleFs
);
Nếu driver storage chưa dispatch, hoặc filesystem protocol chưa được install lên handle, LocateProtocol() có thể trả EFI_NOT_FOUND.
Ví dụ 2: Boot#### tồn tại nhưng file mất
BootOrder: 0001,0000
Boot0001: HD(...)/File(\EFI\ubuntu\shimx64.efi)
LoadImage(Boot0001) = EFI_NOT_FOUND
Ở đây Boot0001 có thể vẫn tồn tại trong NVRAM, nhưng file EFI trên ESP đã bị xóa hoặc device path trỏ sai partition.
BootOrder/Boot####
Boot option có tồn tại không?
Device Path
Đường tới controller, partition và file có đúng không?
Protocol
SimpleFileSystem/BlockIo có được install chưa?
EFI file
File trong ESP có tồn tại và đọc được không?
Debug Diary: LocateProtocol() trả NOT_FOUND
Đừng kết luận ngay protocol “không có”. Hãy hỏi:
- Driver tạo protocol đó đã được đưa vào FDF chưa?
- DEPEX của driver có thỏa chưa?
- Driver có dispatch nhưng
InstallProtocolInterface()fail không? - Bạn đang gọi quá sớm ở PEI/DXE/BDS?
Checklist khi gặp EFI_NOT_FOUND
Firmware Engineer Notes
EFI_NOT_FOUND đôi khi là bình thường. Driver Binding Supported() trả EFI_UNSUPPORTED hoặc một API enumerate trả EFI_NOT_FOUND để báo “hết item” có thể không phải lỗi. Điều cần kiểm tra là caller có kỳ vọng object đó bắt buộc tồn tại ở thời điểm này không.
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.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.