#【目標】
『Windows 10 に EDK2環境 を構築し、Visual Studio Community 2019 を
使って OVMF(OvmfPkg) をビルドする。』
の続きとして『WinDBGでデバッグ』してみます。
#【前回まで】
前回でEDK2環境の構築が完了し、64bit版OVMF(OvmfPkg)のビルドができました。
またQEMUでの動作確認もできました。
目標は前回で達成しましたが、せっかくOVMFがビルドできたのですから、
デバッグ環境が整えばもっといいと思いますよね。
#【今回の目標】
WinDBGを使ってQEMU上の64bit版OVMF(OvmfPkg)をデバッグ(デバッガー接続)
します。
https://github.com/tianocore/tianocore.github.io/wiki/How-to-debug-OVMF-with-QEMU-using-WinDbg
How to debug OVMF with QEMU using WinDbg
ほぼこちらの内容となっています。
#【はじめに】
・前回ビルドした64bit版OVMF(OvmfPkg)ではデバッガー設定が有効になって
おらず、デバッガーとの接続ができません。
デバッガー設定を有効とした64bit版OVMF(OvmfPkg)をビルドします。
・WinDBGはWindows SDKに含まれていますが、今までの手順では有効化
されていません。
WinDBGを有効化します。
・WinDBGだけでもデバッガー接続はできませんので、Intelより提供されて
いる「Intel® UEFI Development Kit Debugger Tool」も
インストールします
・TeraTermもインストールして、QEMUモニタなども動かしてみます。
・QEMUそのものは設定変更する必要はありませんが、起動する仮想PC側の
パラメータ変更が必要となります。
それではデバッガー設定を有効にする64bit版OVMF(OvmfPkg)をビルド
しましょう。
#【EDK2ビルド用コマンドプロンプト】
・スタートメニューより「x64 Native Tools Command Prompt for VS 2019」を
開いて、次の通り入力します
chcp 65001
cd C:\EDK2
edksetup.bat
※使用する文字コードをUTF-8にして以降の日本語文字化けに対処します。
※以下の1つのエラーは気にしないでください
- 「!!! ERROR !!! Binary C tools are missing. They are required to be built from BaseTools Source.」
BaseToolsでsplit.exeを生成しなくなったのにチェックしているようです
※以下の2つのワーニングが出ますが気にしないでください
- 「!!! WARNING !!! CLANG_BIN environment variable is not set」
今後も CLANG は使わないので設定しません
- 「!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!」
今後も CYGWIN は使わないので設定しません
・そのまま【デバッガー設定を有効にする64bit版OVMF(OvmfPkg)のビルド】
へすすみます
・https://github.com/tianocore/tianocore.github.io/wiki/Windows-systems
「Build」に記載の手順となります
#【デバッガー設定を有効にする64bit版OVMF(OvmfPkg)のビルド】
・引き続き「x64 Native Tools Command Prompt for VS 2019」で
次の通り入力します
build -p OvmfPkg/OvmfPkgX64.dsc -a X64 -t VS2019 -b NOOPT -D SOURCE_DEBUG_ENABLE=TRUE -D DEBUG_ON_SERIAL_PORT
・前回との違いは3つあります。
- デバッグ(DEBUG)版ではなく、最適化なし(NOOPT)版です
- ソースコードデバッグを有効にしています
- デバッグシリアルポートを有効にしています
・"Done" が出たらビルドは終了です
・以下のように入力して OVMF.fd が出来ていたら成功です
dir C:\edk2\Build\OvmfX64\NOOPT_VS2019\FV\OVMF.fd
次に、WinDBGを有効化しましょう。
#【WinDBGの有効化】
・WinDBGはWindows SDKのコンポーネントとして提供されています
・前回までのVisual Studio Community 2019のインストールによって
Windows SDKはインストールされていますが、WinDBGはデフォルト
では有効になっていませんでした。
・以下の手順でWindows SDKの設定を変更してWinDBGを有効にします。
- Windowsの設定からアプリを開きます
- アプリと機能の一覧にある
「Windows Software Development Kit - Windows 10.0.19041.685」
で[変更]をクリックします
- 「Maintain for your Windows Software Development Kit (略)」
では「Change」を選択して[Next]をクリックします
- 「Select the features you want to change」では
「Debugging tools for Windows」にチェックを付けて
[Change]をクリックします
・Windows SDKの設定変更が終わると、WinDBGが有効になっています
引き続き、Intel® UEFI Development Kit Debugger Tool を
インストールしましょう。
#【Intel® UEFI Development Kit Debugger Tool のインストール】
・Intel® UEFI Development Kit Debugger Tool はこちらから
ダウンロードしてインストールします。
https://software.intel.com/content/www/us/en/develop/download/intel-uefi-development-kit-intel-udk-debugger-tool-r150-windows.html
・ダウンロードした udk-debugger-tool-v1-5-win.zip には
インストーラー、リリースノート、マニュアルが含まれて
いますので、インストーラーを実行してください。
・Intel® UEFI Development Kit Debugger Toolのインストール
際に設定が必要となるのは以下の3箇所です。
- 「Windows Debugger Folder」では、インストーラーが
WinDBGの格納フォルダを見つけられないので指定します
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86"
にあると思います
- 「Configure Debug Port」では、接続方法で TCP接続 を設定します
Debug Port Channel : TCP
Server : localhost
Port : 20716
- UEFIデバッグ用ドライバのインストールが必要です
引き続き、TeraTerm をインストールしましょう。
#【TeraTerm のインストール】
・TeraTermについてはこちらを参照してください
https://ttssh2.osdn.jp/
・TeraTerm にはインストーラーもあるのですが、ZIP版も
ありましたのでZIP版を使用します
こちらのサイトからZIP版をダウンロードしてください。
https://ja.osdn.net/projects/ttssh2/releases/
・teraterm-4.106.zip をダウンロードして展開します
・展開先は C:\TeraTerm となるようにしてください
C:\TeraTerm\ttermpro.exe があれば展開は成功です
最後に WinDBGでデバッグ してみましょう。
#【WinDBGでデバッグ】
・いきなりですが、テキストエディタを使用して以下のバッチファイルを
C:\EDK2\DbgWin.cmd として作成してください
※メモ帳で作成する場合は、保存する際の文字コードにご注意ください
ANSIで保存するのが良いと思います
start "Monitor" /B "C:\TeraTerm\ttermpro.exe" localhost:20717 /nossh
start "Debugger" /B "C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\eXdi.exe" /LaunchWinDbg
start "Console" /B "C:\TeraTerm\ttermpro.exe" localhost:20715 /nossh
start "QEMU" /B "C:\Program Files\qemu\qemu-system-x86_64.exe" ^
-machine q35,smm=on ^
-m 8G ^
-smp 4 ^
-global ICH9-LPC.disable_s3=1 ^
-drive if=pflash,format=raw,unit=0,file=C:\edk2\Build\OvmfX64\NOOPT_VS2019\FV\OVMF_CODE.fd,readonly=on ^
-drive if=pflash,format=raw,unit=1,file=C:\edk2\Build\OvmfX64\NOOPT_VS2019\FV\OVMF_VARS.fd ^
-monitor tcp:localhost:20717,server ^
-serial tcp:localhost:20716,server ^
-net none
・作成したバッチファイルを実行する前に、
「Intel® UEFI Development Kit Debugger Tool」
のデバッガー設定を1箇所だけ変更します
- スタートメニュー から 「Intel(R) UEFI Development
Kit Debugger Tool」のプログラムグループにある
「Change Configurations」を開いてください
- メモ帳などでデバッガー設定が表示されますので、
1箇所だけ変更してください
[Features]セクションの LoadModuleSymbol = 1 を
1 から 0 にします
- デバッガー設定を保存して閉じてください
※この設定をしないと、OVMFの構成モジュールごとにシンボルの
ロードが行われるため、起動完了までに相当時間がかかって
しまいます
・それでは、作成した C:\EDK2\DbgWin.cmd をコマンドプロンプトで
実行してみましょう
※初回実行時に Windows Defender ファイアウォール 警告が
表示されましたら許可してください
・以下のウィンドウが表示されたのち、WinDBGのウィンドウで
初期ブレークしていると思いますので、WinDBGでgコマンドを
実行してください
- TeraTerm で QEMUモニタ
- TeraTerm で QEMUコンソール
- Intel(R) UEFI Development Kit Debugger Tool コンソールウィンドウホスト
- WinDBG
- QEMU
・TeraTerm の QEMUコンソール に起動ログが出力されたのち、
OVMFの起動が完了します
・具体的なデバッグ方法はWinDBGのコマンドを参照ください
以上の通り、WinDBGでデバッグができることが確認できました。
「Windows + Visual Studio 2019 で EDK2 の OVMF をビルドする」
をテーマとした記事は以上をもって終了となります。
ありがとうございました。