PEI to DXE Handoff とは何か
PEI から DXE への handoff、HOB list、DXE IPL、discovered memory、DXE が開始しない時の見方を整理します。
PEI to DXE handoff は、firmware が PEI phase から DXE phase へ移るポイントです。この時点で、PEI は DXE Core が動くために必要な memory と HOB list を準備しています。
短く言うと、PEI to DXE handoff は、PEI が最初の system map を DXE に渡す場所です。
流れは次のようになります。
SEC
-> PEI Core
-> PEIM dispatch
-> Memory discovered
-> HOB list built
-> DXE IPL
-> DXE Core
PEI は DXE のために何を準備するか
PEI は DRAM を init するだけではありません。Platform 情報を集め、HOB としてまとめます。DXE は HOB list を使って、memory layout、firmware volume、boot mode、resource、ACPI/NVS region、platform data などを理解します。
重要な HOB には次のようなものがあります。
Memory allocation HOB
Resource descriptor HOB
Firmware volume HOB
CPU HOB
Boot mode HOB
Platform data 用の GUID HOB
HOB が間違っていたり不足していたりすると、DXE 自体は動いても後の動作が壊れることがあります。Driver が FV を見つけられない、memory type が間違う、BDS が必要な resource を見つけられない、といった形で現れます。
DXE IPL とは何か
DXE IPL は、DXE Core を見つけて control を渡す PEIM です。PEI の最後から DXE へ進むための橋です。DXE IPL が DXE Core を見つけられない、または DXE Core を含む firmware volume が間違っている場合、DXE は開始しません。
よくある失敗は次の通りです。
DXE Core が期待した FV に入っていない
FV HOB が作られていない
HOB list が壊れている
memory が足りない、または memory type が間違っている
DXE IPL が dispatch されていない
DXE Core への jump に失敗する
ExitBootServices とは違う
PEI to DXE handoff は firmware のかなり早い段階で起きます。BDS より前、OS loader より前です。ExitBootServices() はもっと後で、OS loader がすでに動いていて、firmware の Boot Services を終了したい時に呼ばれます。
PEI to DXE: PEI が DXE Core に control を渡す
ExitBootServices: OS loader が Boot Services を終了する
この 2 つを同じ意味で使ってはいけません。
DXE に入らない時の debug
Log が PEI の最後で止まる場合は、次の順番で確認します。
PEI memory initialization は成功したか?
HOB list は作られたか?
DXE Core を含む FV HOB はあるか?
DXE IPL は dispatch されたか?
DXE IPL は DXE Core をどう見つけるか?
DXE へ jump する時の stack/memory は有効か?
DXE Core がすでに動いているなら、問題は DXE dispatcher、DEPEX、driver placement 側にある可能性が高く、handoff そのものではないかもしれません。
Source-reading checklist
PEI to DXE handoff の source を読む時は、次を確認します。
1. Memory discovered はどこで行われ、どの HOB が作られるか?
2. Resource descriptor HOB は正しいか?
3. DXE Core を含む firmware volume はどう記述されているか?
4. DXE IPL PEIM は firmware image に入っているか?
5. どの DEPEX で DXE IPL が dispatch されるか?
6. DXE IPL は DXE Core をどう locate するか?
7. DXE に渡す HOB list pointer は有効か?
8. 最初の DXE Core log はどこに出るか?
まとめ
PEI to DXE handoff は、PEI の memory init と HOB creation を DXE の driver world につなぐ重要な mốcです。PEI log はあるのに DXE log がない場合は、driver や BDS を見る前に、discovered memory、HOB list、FV HOB、DXE IPL を確認します。
この記事が役に立ったら
ファームウェア、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.
Firmware Execution Flow とは何か
UEFI firmware の実行フローを reset vector, SEC, PEI, DXE, BDS, TSL, runtime まで実務目線で整理します。
Reset Vector とは何か
Reset vector の意味、reset 後に CPU がどこから実行を始めるか、early boot debug の見方を整理します。
SEC Phase とは何か
UEFI の SEC phase、temporary RAM、cache-as-RAM、SEC から PEI への handoff と debug 観点を整理します。
Biến note thành bài viết hoàn chỉnh
Notes là nơi ghi nhanh khái niệm.