BIOS Setup Variable là gì?
Quicknote BIOS Setup Variable là gì?
BIOS Setup Variable là dữ liệu phía sau các lựa chọn trong BIOS Setup menu. Người dùng nhìn thấy checkbox, dropdown hoặc menu boot; firmware thì nhìn thấy variable, varstore, offset, default value và policy áp dụng trong PEI/DXE/BDS.
Ví dụ UI có dòng “USB Boot: Enabled”. Ở sau nó có thể là một field trong setup variable, được HII setup browser ghi xuống NVRAM. BDS hoặc driver policy sẽ đọc field đó để quyết định có enumerate USB boot option hay không.
Người dùng đổi setup
Ví dụ đổi SATA mode, bật TPM, tắt USB boot.
Setup browser map field
Question trong form map tới varstore/offset.
Giá trị được lưu
Variable hoặc buffer setup được ghi xuống variable store.
Driver đọc policy
PEI/DXE/BDS đọc lại để cấu hình silicon, boot, security.
Ví dụ layout setup variable
Một platform có thể gom nhiều setting vào một struct:
typedef struct {
UINT8 UsbBootEnable; // 0 = Disabled, 1 = Enabled
UINT8 SataMode; // 0 = AHCI, 1 = RAID
UINT8 SecureBootUiState; // UI state, không nhất thiết là SecureBoot variable chuẩn
UINT8 TpmDevice; // 0 = Hidden/Disabled, 1 = Enabled
UINT16 BootTimeout;
} PLATFORM_SETUP_DATA;
Khi UI thay đổi SataMode, firmware không chỉ lưu số 1. Nó còn có thể dùng giá trị này rất sớm ở PEI để cấu hình storage controller. Vì vậy một setup variable sai có thể làm máy không thấy ổ boot, dù boot loader hoàn toàn không hỏng.
Đọc setup variable
PLATFORM_SETUP_DATA Setup;
UINTN Size = sizeof(Setup);
UINT32 Attr;
Status = gRT->GetVariable(
L"Setup",
&gPlatformSetupVariableGuid,
&Attr,
&Size,
&Setup
);
if (!EFI_ERROR(Status) && Setup.UsbBootEnable == 0) {
// BDS có thể bỏ qua USB boot policy.
}
Tên variable và GUID là platform-specific. Vì vậy khi debug, đừng đoán mọi máy đều có cùng Setup variable.
| Mục | Giá trị | Ghi chú |
|---|---|---|
| Setup UI | Checkbox/dropdown | Thứ người dùng nhìn thấy. |
| HII question | QuestionId / VarStoreInfo | Cầu nối giữa UI và dữ liệu. |
| Setup variable | Struct/buffer trong NVRAM | Nơi lưu giá trị. |
| Policy driver | PEI/DXE/BDS consumer | Nơi biến setup thành hành vi thật. |
Khi debug BIOS Setup
Nếu khách hàng nói “tôi đã disable USB boot nhưng máy vẫn boot USB”, có ba lớp cần kiểm tra:
- UI có thật sự ghi variable không?
- Variable sau reboot có giữ giá trị không?
- BDS có đọc đúng field để filter USB boot option không?
Checklist setup variable
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.
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.