UEFI Framework Debugging Overview UEFI Framework として一般的に知られる Unified Extensible Firmware Interface (UEFI) のための Intel Platform Innovation Framework は ソフトウェア インターフェースの設定を定義し 従来の PC に見られるレガシー BIOS を取り替える新しいファームウェア アーキテクチャ標準です このフレームワークは 従来の BIOS で以前は利用できなかったモジュール方式 柔軟性 拡張性を提供します UEFI では BIOS 開発者は すべてのコードをアセンブリ言語ではなく C で書くことができます Intel サイト http://www.intel.com/technology/framework や UEFI Framework のさらなる情報のための http://www.tianocore.org を参照してください この新しいファームウェア アーキテクチャやそれを実装する C コードと一緒にソースレベル デバッグに対する要求がやってきます Intel 及び AMD プロセッサのための SourcePoint(version7.0 以降 ) は UEFI フレームワーク プラットフォームのためのネイティブ デバッグ サポートを提供します ユーザは ブレークポイント設定 シングルステップ 変数参照 コールスタック参照が行え SourcePoint が標準的に提供する特徴的で豊富な機能性のすべてにアクセスすることができます これは UEFI の PEI DXE OS ブート フェーズ間のソースレベル デバッグを含みます 以下は UEFI フレームワークをデバッグする SourcePoint セットアップのための指示の設定です UEFI Macros ------------------------------------------------------------------------------------------------------------------------------- 注意 : 以下に述べられるマクロは SourcePoint インストール パスの Macro UEFI サブフォルダにインストールされます UEFI マクロ ファイルのいくつかは 他のマクロ ファイルへのディレクトリ パスを含みます もし マクロ ファイルを移動したり SourcePoint(cwd コマンド経由 ) で現在のワーキング ディレクトリを変更したら 新しいロケーションでマクロ ファイルをアップデートする必要があります -------------------------------------------------------------------------------------------------------------------------------- EFI.mac SourcePoint のインストール後 Macro UEFI ディレクトリに置かれた EFI.mac マクロ ファイルを実行してください 6つのカスタム ツールバー ボタンが生成され 各々対応する UEFI proc に関連付けられます StartPEI アイコンは ターゲットをリセットし PeiMain を実行し PEI シンボルをロードします PEIM(Pre-UEF Initialization module) アイコンは ターゲット メモリで見つけられた PEI American Arium Application Note -- Page 1
モジュールのためのシンボルファイルをロードします DXE(Driver Execution Environments) アイコンは ターゲット メモリで見つけられた DXE モジュールのためのシンボルファイルをロードします HOB (Hand-Off Blocks) アイコンは ターゲット メモリで見つけられた UEFI HOB のリストを表示します SysConfigTable アイコンは UEFI システム コンフィグレーション テーブルの内容を表示します DumpMemMap アイコンは UEFI メモリ マップを表示します EFI.mac toolbar buttons PEI Debugging PEI 環境は SourcePoint の特殊化されたコンフィグレーションを必要とします PEI は ターゲット リセットからすぐに制御を得ます PEI モジュールは キャッシュ RAM がシステム メモリへマップされ スタックが初期化された後 ディスパッチされ 実行されます この早期にスタックを持つことは C 言語コードの実行を許しますが 特殊なメモリ マップは それを利用するためにコンフィグレーションされなければなりません PEI コードのソースレベル デバッグのために SourcePoint を構成すること 以下がこれらのステップ です 1. オプション : メニューから Options Target Configuration Memory Map を選択し 以下のよ うに設定してください ( システムによりメモリ マップは 異なるかもしれません ) テーブルの最初の登録は システム メモリの最初の 1MB を明示します 中間の登録は システ ム メモリへマップされるキャッシュ RAM の位置を明示します 3 番目の登録は ファームウェ ア ROM を明示します 2. StartPEI ボタンは ターゲットをリセットし プロセッサがプロテクトモードに入るまで 1 命 令ずつステップします それから PEI モジュール シンボルをロードし PeiMain まで実行 します 3. 二者択一的に プロセッサがプロテクトモードにいる時 いつでも PEI マクロ ボタンを使用 できます American Arium Application Note -- Page 2
Command window after running PEIMs macro function Symbols window after loading PEIM modules Code window after loading PEIM modules DXE Debugging 一度システム RAM が初期化され PEI フェーズが完了すると DXE 環境が登録されます これは PEI ほど特殊ではありません ; それにもかかわらず いくつかの SourcePoint パラメータの設定が必要とされます DXE コードのソースレベル デバッグのために SourcePoint を構成すること 以下がこれらのステッ プです American Arium Application Note -- Page 3
1. UEFI シェルか DXE に入るまでターゲットを実行してください 2. ターゲットを停止してください 3. DXE シンボルをロードするために DXE ツールバー アイコンをクリックしてください 4. Symbols window を使ってソース コードファイルをブラウズし コードへブレークポイントを設定してください 5. ターゲットをリセットし ブレークポイントへヒットするまで実行してください DXE Code window HOBs Command window を開き ターゲットのハンドオフ ブロックを表示するために HOBs ツールバー アイコンをクリックしてください Example of HOB display American Arium Application Note -- Page 4
System Configuration Table Command window を開き ターゲットで UEFI システム コンフィグレーション テーブルの内容を 表示するために SysConfigTable ツールバー アイコンをクリックしてください Example of System Configuration Table UEFI System Memory Map Command window を開き UEFI メモリ マップの内容を表示するために DumpMemMap ツールバ ー アイコンをクリックしてください Example of UEFI System Memory Map Notes 1. DXE デバッグのヒント ターゲットを停止し DXE モジュールがディスパッチされる直前にシンボルをロードし Symbols window を開いて Globals タブを選んで下へ貫きます program: DXEMAIN.UEFI module: image (image.c) function: CoreStartImage() CoreStartImage で右クリックし ポップアップ メニューから Open Code Window を選びます Image->EntryPoint() がコールされる CoreStartImage() 内にプロセッサブレークポイントを設定 します 各々の DXE モジュールがディスパッチされる前にこれがヒットしますが 後にそれ自身 American Arium Application Note -- Page 5
のエントリーがテーブルに置かれます このブレークポイントにヒットするたびに DXE シンボルをロードするために DXE ツールバー アイコンをクリックしてください UEFI シェルへの実行 それからシンボル ロード それからターゲット リセット それからブレークポイントへの実行されるのではなく DXE モジュールが実行する直前にシンボルをロードすることができます 2. Intel プラットフォームでのウォッチドッグ タイマー Intel プロセッサを持ついくつかのマザーボードはエミュレータと独立した RESET をアサートする TCO タイマーを持ちます 詳細のためにタイトルが "Disabling the TCO Timer in an Intel I/O Controller Hub" である American Arium のアプリケーション ノートを参照してください SourcePoint からターゲットをリセットすることは タイマーがリセットをアサートし エミュレータを混乱させるので ターゲット状態に不確定なエラー メッセージ出現させることを引き起こします この問題の解決法は すべてのターゲット リセットで走らせるための ICH_TCO_Timer_Disable.mac マクロを構成することです 3. ターゲットの UEFI ファームウェアは ハードディスク上のプログラム シンボルファイルへのパスをもつストリングスを含みます SourcePoint マクロはターゲット メモリを読み これらのストリングスを見つけ それからこれらのパスで指定されているシンボルファイルをロードします シンボルファイルは UEFI ファームウェアで指定されているパスになければなりません たとえば このような 1 つのパス : "Z: Platform IntelSsg D845GRG Build IA32 DxeMain.EFI" Intel によって定義されたこのアーキテクチャは UEFI デバッグのための要求として公開されます ターゲットのファームウェアで指定された同じディレクトリでホスト コンピュータ上に UEFI シンボルファイルを持たなければなりません SourcPoint を実行している同じホストで UEFI ファームウェアをビルドするなら これは問題ではありません もし ドライブ名やパスが正確にマッチしないなら 要求されるパスへドライブ名をマッピング するために Windows のコマンド プロンプトから subst コマンドを使用することができます ( 例 : subst d: c: working EFI ) American Arium Application Note -- Page 6