HII/VFR要素のチートシート

VFR/HIIの主要要素を、FormSet、Form、Question、OneOf、CheckBox、VarStore、DefaultStore、SuppressIf、GrayOutIfから整理する。

更新 約 4 分
Đọc bằng 日本語 Tiếng Việt English
HII Setup cover

.vfrファイルを開くと、formsetformvarstoreoneofcheckboxnumericsuppressifgrayoutifdefaultstorelabelgotoのような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

oneofcheckboxnumericstringorderedlistはいずれも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後に値が消える、といった症状につながります。

defaultstoredefaultは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

labelHiiUpdateFormの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.

Biến note thành bài viết hoàn chỉnh

Notes là nơi ghi nhanh khái niệm.