HII/VFR要素のチートシート
VFR/HIIの主要要素を、FormSet、Form、Question、OneOf、CheckBox、VarStore、DefaultStore、SuppressIf、GrayOutIfから整理する。
.vfrファイルを開くと、formset、form、varstore、oneof、checkbox、numeric、suppressif、grayoutif、defaultstore、label、gotoのようなkeywordが並んでいます。これらを辞書のように一つずつ覚えると混乱しやすいです。実際には、BIOS Setup pipelineの中でどの役割を持つかで整理した方が読みやすくなります。
このノートは、debug時にVFR/HIIを読むためのcheat sheetです。どのelementがpageを作るのか、どれがcontrolを作るのか、どれがvalueを保存するのか、どれがvisibilityを制御するのか、どれがcallback、default、saveに関係するのかを整理します。
全体マップ
FormSet setup pageの最上位group
Form FormSet内の具体的なpage
Question 表示または操作されるcontrol
OneOf 一つのvalueを選ぶdropdown/list
CheckBox boolean/toggle question
Numeric numeric inputまたはrange
String text input
VarStore questionのstorage mapping
DefaultStore default group
Default questionのdefault value
SuppressIf itemまたはblockを隠す
GrayOutIf 表示したまま編集不可にする
InconsistentIf 不正なvalueをvalidateする
Label dynamic HiiUpdateForm用のanchor
Goto 別formへのnavigation
Action button/action question
ConfigAccess ExtractConfig/RouteConfig/Callbackのbackend
画面上のsetup optionで不具合が出た場合、VFR sourceからIFR dump、HII Database、Setup Browser、ConfigAccess、実際のstorageまでたどる必要があります。
Pageとnavigation
formsetはformの最上位groupを定義します。formは具体的なpageです。gotoは別formへのnavigationを作ります。menuが表示されない場合は、FormSetGuid、class GUID、FormId、goto target、Browser policy filterを確認します。
title textだけに頼らない方が安全です。titleはString Package由来であり、重複したりlanguageの影響を受けたりします。navigationのdebugではGUIDとIDを見る方が確実です。
Controlとvalue
oneof、checkbox、numeric、string、orderedlistはいずれもquestionです。QuestionId、prompt/help token、VarStore mapping、flags、defaultを持ち、callbackを持つこともあります。
よくある不具合は、UI textは正しいのに保存されるvalueが違うケースです。OneOfではuserに見えるtextとfirmwareが保存するnumeric valueは別です。CheckBoxではbool widthやdefaultがずれることがあります。Numericではrangeとsizeが実際のfieldと合っている必要があります。
Storageとdefault
varstoreはquestionとbackend dataをつなぎます。VarStoreの不具合は、違うfieldへ保存する、隣のfieldを壊す、reboot後に値が消える、といった症状につながります。
defaultstoreとdefaultはLoad Defaultsの挙動を決めます。defaultが違う場合は、DefaultStoreId、question default、IFR dump、migrationまたはplatform override codeを確認します。
Visibilityとeditability
SuppressIfはitemやblockを完全に隠します。GrayOutIfは表示したまま編集不可にします。どちらもUI controlであり、security boundaryではありません。
optionが消える場合はSuppressIfを確認します。optionがgrayになる場合はGrayOutIf、question flags、policy lock、Browser refreshを見ます。conditionのscopeは想像より広いことがあるため、IFR dumpで確認するのが重要です。
Dynamic updateとcallback
labelはHiiUpdateFormのanchorとして使われることが多いです。actionやquestion callbackは、dynamic UI update、input validation、reset requestなどに使われます。
ただしcallbackはSaveではありません。Saveは通常RouteConfig()を通ります。callbackは走っているのにreboot後に値が消える場合は、RouteConfigとSetVariableを確認します。
Symptom別debug
Pageが出ない FormSetGuid, class GUID, package publish, SuppressIf
Textが違う/??? UNI, string token, String Package, language
Optionがgray GrayOutIf, flags, policy lock, refresh
Callbackがない QuestionId, flags, ConfigAccess install, action type
Save後に消える VarStore, RouteConfig, SetVariable, NVRAM, migration
Defaultが違う DefaultStoreId, question default, IFR dump, override code
Navigationが違う FormId, goto target, duplicate title, class policy
Sourceを読むときのチェックポイント
VFR/HII reading checklist
symptomから原因layerへ戻るための確認項目。
早見メモ
表示されない FormSet/Form/publish/SuppressIfを疑う
表示されるがgray GrayOutIf/flags/policyを疑う
Textが違う UNI/String Package/tokenを疑う
Saveが違う VarStore/RouteConfig/NVRAMを疑う
Defaultが違う DefaultStore/default/migrationを疑う
Callbackが違う QuestionId/action/ConfigAccessを疑う
このcheat sheetはIFR dumpの代わりではありません。BIOS Setupの多くのbugでは、Browserが実際に何を見ているかを示すIFR dumpが最も強い証拠になります。
関連ノート
この記事が役に立ったら
ファームウェア、BIOS/UEFI、組み込みシステムを学んでいる人に共有したり、作者を応援したりできます。
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.
UEFI HII Architecture Overview
HIIの全体像: driver、package list、HII Database、Setup Browser、ConfigAccess、variable storageを整理します。
BIOS Setupとは: クラシックな青い画面からHIIと現代のNVRAMまで
現代のBIOS SetupはHII上に構築されている: VFR、VarStore、NVRAM。structの途中にフィールドを追加するとなぜシステムが壊れるのか、そして保存されない設定のデバッグ方法。
HIIのSave、Callback、Resetの流れ
UEFI HIIのSave flowを、browser state、callback action、RouteConfig、SetVariable、ActionRequest、reset処理から整理する。
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.