Variable Attribute là gì?
Quicknote Variable Attribute là gì?
Variable Attribute là tập cờ cho biết một UEFI variable được lưu ở đâu và được phép truy cập vào giai đoạn nào. Khi debug BIOS, attribute sai có thể làm variable đọc được trong DXE nhưng mất sau reboot, hoặc đọc được trước ExitBootServices nhưng không đọc được ở runtime.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| EFI_VARIABLE_NON_VOLATILE | NV | Variable được lưu non-volatile, còn sau reboot/power cycle. |
| EFI_VARIABLE_BOOTSERVICE_ACCESS | BS | Có thể truy cập trong boot services phase. |
| EFI_VARIABLE_RUNTIME_ACCESS | RT | Có thể truy cập sau ExitBootServices từ OS runtime. |
| EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS | Auth | Ghi cần authenticated payload, thường gặp trong Secure Boot variables. |
| EFI_VARIABLE_APPEND_WRITE | Append | Ghi kiểu append thay vì replace toàn bộ data, tuỳ variable hỗ trợ. |
Ví dụ đọc attribute
UINT32 Attributes = 0;
UINTN DataSize = 0;
Status = gRT->GetVariable(
L"BootOrder",
&gEfiGlobalVariableGuid,
&Attributes,
&DataSize,
NULL
);
if (Status == EFI_BUFFER_TOO_SMALL) {
// Attributes đã có thể cho biết BootOrder là NV + BS + RT.
}
Với BootOrder, attribute thường là:
EFI_VARIABLE_NON_VOLATILE
EFI_VARIABLE_BOOTSERVICE_ACCESS
EFI_VARIABLE_RUNTIME_ACCESS
Nghĩa là nó được lưu bền, firmware dùng được trong boot phase, và OS/tool runtime cũng có thể đọc/cập nhật theo quyền phù hợp.
Vì sao attribute quan trọng?
Boot Services còn sống
Variable có BS access có thể được driver đọc.
Boot Manager đọc NVRAM
BootOrder/Boot#### phải tồn tại đúng để chọn boot option.
ExitBootServices
Boot services mất hiệu lực, runtime mapping được thiết lập.
Runtime access
Chỉ variable có RT access mới đọc/ghi được qua runtime services.
Lỗi thực tế
Nếu một setup variable đáng ra phải lưu qua reboot nhưng thiếu NON_VOLATILE, bạn có thể thấy UI đổi thành công trong phiên hiện tại nhưng reboot xong lại quay về default. Ngược lại, nếu variable không cần runtime mà lại set RT bừa bãi, surface runtime tăng lên không cần thiết.
Với Secure Boot variables như PK, KEK, db, dbx, vấn đề còn nghiêm hơn: ghi sai attribute/authentication có thể làm update bị từ chối, hoặc trạng thái Secure Boot không đúng như UI hiển thị.
Checklist attribute
Bài liên quan
- NVRAM là gì?
- UEFI Variable Store là gì?
- Variable Attribute là gì?
- Variable Store Full là gì?
- CMOS khác NVRAM như thế nào?
Nguồn tham khảo public
- UEFI Specification 2.11 - Runtime Services
- UEFI Specification 2.11 - Boot Manager
- EDK II VariableRuntimeDxe
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.
Variable Store Full là gì?
Quicknote Variable Store Full là gì?
Runtime sau ExitBootServices là gì?
Giải thích firmware còn lại gì sau khi OS gọi ExitBootServices và vì sao Runtime Services vẫn quan trọng.
Runtime phase là gì?
Giải thích giai đoạn runtime sau ExitBootServices và vì sao UEFI Runtime Services vẫn còn quan trọng khi OS đã 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.