EFI_INVALID_PARAMETER là gì?

Quicknote EFI_INVALID_PARAMETER là gì?

3 phút đọc
Đọc bằng Tiếng Việt English 日本語
Debug / Shell / Driver Terms cover

EFI_INVALID_PARAMETER báo rằng caller truyền tham số không hợp lệ. Đây là status rất thực dụng: nó thường không nói firmware thiếu gì, mà nói người gọi API đang gọi sai hợp đồng.

Trong debug firmware, status này nên khiến bạn nhìn ngay vào input: pointer có NULL không, size có đúng không, GUID có đúng không, attribute có hợp lệ không, buffer có alignment đúng không.

Ví dụ dễ gặp

Status = gBS->OpenProtocol (
                ControllerHandle,
                &gEfiPciIoProtocolGuid,
                (VOID **)&PciIo,
                ImageHandle,
                NULL,
                EFI_OPEN_PROTOCOL_BY_DRIVER
                );

Nếu ControllerHandle sai, PciIo là NULL pointer không hợp lệ, hoặc agent/controller handle không đúng ngữ cảnh Driver Binding, API có thể trả EFI_INVALID_PARAMETER.

Mục Giá trị Ghi chú
NULL pointer Output/Input pointer sai Hay gặp khi quên allocate hoặc truyền nhầm địa chỉ.
Size = 0 Kích thước không hợp lệ Đặc biệt với buffer hoặc structure có header.
GUID sai Sai namespace Ví dụ variable name đúng nhưng GUID khác.
Attribute sai SetVariable fail Runtime/BootService/NonVolatile không khớp policy.
Handle sai Sai owner/context Hay gặp trong Driver Binding/OpenProtocol.

Debug Diary: lỗi do GUID đúng tên nhưng sai namespace

Một case khá khó chịu:

GetVariable(MySetting) = EFI_INVALID_PARAMETER hoặc EFI_NOT_FOUND

Bạn nhìn tên variable thấy đúng, nhưng GUID lại khác. Trong UEFI, variable không chỉ được định danh bằng name. Nó là cặp:

VariableName + VendorGuid

Vì vậy log tốt nên luôn in cả name và GUID.

01 API

Xác định API

GetVariable, SetVariable, OpenProtocol, InstallProtocolInterface...

02 INPUT

Kiểm tra input

Pointer, size, GUID, handle, attribute.

03 CONTRACT

Đọc lại hợp đồng API

API yêu cầu điều kiện gì trước khi gọi?

04 LOG

Log context

In đủ name/GUID/size/handle để tránh đoán mò.

Khi gặp EFI_INVALID_PARAMETER, hãy đi ngược từ input thay vì debug logic phía sau.

Firmware Engineer Notes

EFI_INVALID_PARAMETER thường là lỗi gần caller nhất. Đừng vội nghi ngờ firmware core hay hardware. Hãy kiểm tra code mình vừa thêm, đặc biệt là wrapper function, cast pointer, structure packing và macro truyền GUID.

Checklist khi gặp EFI_INVALID_PARAMETER

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.