2018の24日目の記事として書かれました。皆さん、どうも数日ぶり。プロのTSG新入生のJP3BGYです。Linux環境の構築の仕方の続きっぽいもの(中身は独立してる)でこの記事を書くに至るまでに手にしてしまった(不本意)OVMF本体のソースでバッグをする方法です。上の記事の知識を得るまで紆余曲折ありまして、最初kakinotane氏が書いた方法でビルドしたKernelをそのままOVMFに投げたら何故か起動しなくて、その原因を探るためにudk-debuggerを用いてOVMFをひたすらソースデバッグしまくりまして、それでも原因がわからずQEMUをソースデバッグして、やっぱりわからずOVMFをデバッグしてようやく原因がKernelオプションにあるんだということに気が付きまして。Runを繰り返してようやく手に入れた情報というわけです。結局OVMFをソースでバッグをする必要はまったくなくてKernelが原因だったわけなんですが、誠に不本意ながらデバッグする能力を身に着けてしまったので供養の意味も込めて今後使うことのないであろうOVMFのソースでバッグの方法について書きます。これ本当にどこに需要があるんだろうか・・・・・・。IIにはソースデバッグを可能にするライブラリが中に存在しています。IIが動くハードウェアであればどれであってもつないでソースでバッグをすることができるのですが少々UEFI環境は特殊なのでGDBやWinDBGにそのことを教えないといけません。Debuggerをインストールしてください。インストール方法は同梱してあるPDFにも書かれているのでここでは省略、インストールしたディレクトリは適当にメモっといてください。PIPEを用いた方法を使うのでインストールするときはその設定を間違わないようにしてください。/tmp/ovmf.out#/tmpディレクトリは再起動すると消えるので継続的にデバッグをしたい人はどっか他のディレクトリを指定しましょう#またこの場合udk-debuggerインストール時に設定するPIPEは/tmp/ovmfです、inやoutはつけないよう注意してくださいなお、この子はWindows,Linux両対応しているわけですが今回はLinux環境を想定しています。Windowsで同じことがしたい人は同梱されているPDFをよく熟読してください。OVMFのビルドし直し次にOVMFのビルドです。前の記事に書いたとおりにビルドするとソースデバッグする機能がOFFになっておりデバッグすることができません。ソースデバッグ用にビルドし直しましょう。SOURCE_DEBUG_ENABLEGDBのビルド次はGDBのビルドです。普通のGDBだとudk-debuggerの一部の機能が使えないので以下のコマンドでGDBをビルドしましょう。インストールするかどうかは自身で判断してください。--target=x86_64-w64-mingw32makeconfigureのオプションは上に書いてあるものは必ず入れて、これらを打ち消すオプションは絶対に入れないでください。ココがないとうまく動きません。後はDebugを開始するだけです。はじめに/path/to/udk-debugger/bin/udk-gdbserverを起動します。すると/tmp/ovmf{.in,.out}とつながって待機状態になるので、次にOVMFを起動します。pipe:/tmp/ovmfオプションをつけてつなぎましょう。いつも使う-sオプションは要らないです。最後に自前のgdbでudk-gdbserverに接続します。gdbをオプション無しで起動して以下のコマンドを叩きます。ポート番号はudk-gdbserverを起動したターミナルに表示されたものを使いましょう(大体1234のはずだけど)。~みたいな文言がでたらそれはgdbのビルドに失敗しているか他のgdbを使っています。今一度確かめてください。デバッグするときに注意してほしいのはライブラリがロードされる前にbreakを挿入してそのままcontinueをしてしまうとなんでかbreakで引っかかってくれません。ライブラリをロードされた後gdb側に制御を一旦渡さないと正しくbreakが挿入されないっぽいので注意してください。終わりにこんな技能二度と使わないだろうに一体何で身につけてしまったんだろうなぁ。ちなみにOVMFで自作のUEFIアプリケーションをデバッグするときはこの機能は全く必要ないです。このリンクを参考にして頑張りましょう。IIの開発者のためのものなので多くの人にとってはほぼ無価値です。注意してください(遅い注意書き)。明日はアドベントカレンダー最終日、博多市によるSECCONを巡るもう一つの戦いの話です。LabJP3BGYjp3bgyPC廃人の実験レポート。