SEC Phase とは何か

UEFI の SEC phase、temporary RAM、cache-as-RAM、SEC から PEI への handoff と debug 観点を整理します。

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

SEC Phase は、reset vector の後に来る PI/UEFI firmware の最初の phase です。SEC は Security の略ですが、実際には security だけを行う phase ではありません。主な役割は、PEI に入るための最小限の実行環境を作ることです。

短く言うと、SEC は DRAM や Boot Services が存在する前に、最初の実行基盤を作る phase です。

流れは次のようになります。

Reset Vector
  -> SEC entry
  -> temporary RAM / CAR
  -> temporary stack
  -> SEC to PEI handoff
  -> PEI Core

SEC は制限が多い環境で動く

SEC の時点では、system はまだ十分な実行環境を持っていません。DRAM は普通まだ init されておらず、通常の heap、protocol database、Boot Services もありません。そのため SEC code は小さく、依存が少なく、hardware に近い処理になります。

SEC が準備するものは主に次の通りです。

最小限の CPU state
temporary RAM または cache-as-RAM
temporary stack
最初の firmware volume 情報
PEI Core への handoff 情報
platform が必要とする early measurement / verification

Temporary RAM と cache-as-RAM

DRAM が使える前でも、firmware は function call のための stack と一時領域が必要です。多くの platform では cache-as-RAM を使い、CPU cache を一時的な RAM として扱います。

重要なのは、この領域は一時的だという点です。PEI が本物の DRAM を init した後、必要な data は安定した memory に移すか、作り直す必要があります。Temporary RAM への pointer を長く保持すると、後の phase で原因が分かりにくい bug になります。

SEC to PEI handoff

SEC は memory init 全体を自分で行うわけではありません。PEI Core を呼ぶために必要な情報を準備します。Handoff には、firmware volume、temporary RAM、stack、boot mode、platform data などが含まれます。

この handoff が間違っていると、PEI が動かない、または PEI が動いても必要な PEIM を見つけられないことがあります。

よくある症状は次の通りです。

reset log はあるが PEI Core log がない
PEI Core が動いてすぐ assert する
PEIM を含む firmware volume が見つからない
early PEI で stack corruption が起きる
boot mode の判定が間違う

SEC と PEI の違い

SEC は最小限の実行環境を作ります。PEI はその環境を使って DRAM を init し、PEIM を dispatch し、DXE のための HOB list を作ります。つまり SEC は、生の reset code から最初の firmware infrastructure へつなぐ橋です。

SEC: temporary execution environment を作る
PEI: memory init、PEIM dispatch、HOB 作成
DXE: driver load、protocol publish

SEC debug の注意点

SEC は log が安定していないため debug が難しいです。すべての debug print が安全に使えるとは限りません。早すぎる log 追加は timing を変えたり、まだ準備できていない resource に触ったりします。

確認する点は次の通りです。

Reset vector は SEC entry へ jump しているか?
Temporary RAM/CAR は成功しているか?
Stack pointer は有効な一時領域にあるか?
Firmware volume base は正しいか?
SEC は正しい PEI Core entry を呼んでいるか?
Handoff data の size や alignment は正しいか?

Source-reading checklist

SEC source を読む時は、次の順番で確認します。

1. Reset stub はどの SEC entry へ jump するか?
2. SEC はどの temporary memory を使うか?
3. Stack はどこに置かれるか?
4. 最初の firmware volume はどう locate されるか?
5. SEC は PEI Core に何を渡すか?
6. PEI 前に verification / measurement があるか?
7. 本物の DRAM が使える後、一時 data はどう扱うか?
8. 最初の log は temporary RAM の前か後か?

まとめ

SEC Phase は UEFI firmware flow の最初の土台です。PEI log がない、非常に早い reset loop がある、memory init が始まらない場合は、高い phase を見る前に reset vector、SEC entry、temporary RAM、SEC to PEI handoff を確認します。

この記事が役に立ったら

ファームウェア、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.