1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windows + Visual Studio 2019 で EDK2 の OVMF をビルドする【4.WinDBGでデバッグ】

Posted at

#【目標】
『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」
 開いて、次の通り入力します

EDK2ビルド用コマンドプロンプト
 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」
 次の通り入力します

デバッガー設定を有効にする64bit版OVMF(OvmfPkg)のビルド
 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」
  で[変更]をクリックします
  WinDBG画像0.png
 - 「Maintain for your Windows Software Development Kit (略)」
  では「Change」を選択して[Next]をクリックします
  WinDBG画像1.png
 - 「Select the features you want to change」では
  「Debugging tools for Windows」にチェックを付けて
  [Change]をクリックします
  WinDBG画像2.png
・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"
  にあると思います
  UEFI Debbuger画像1.png
 - 「Configure Debug Port」では、接続方法で TCP接続 を設定します
  Debug Port Channel : TCP
  Server : localhost
  Port : 20716
  UEFI Debbuger画像2.png
 - UEFIデバッグ用ドライバのインストールが必要です
  UEFI Debbuger画像3.png

引き続き、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で保存するのが良いと思います

DbgWin.cmd
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 をビルドする」
をテーマとした記事は以上をもって終了となります。
ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?