level3

Linuxには、リモートデパッグという機能がある。gdbのリモートデバッグに関し て調べよ。

これは、二つのコンピュータ(VMwareのような仮想コンピュータでも良い)接続し て、
片方から片方のkernel(などのプログラム)をデバッグする方法である。
これを動作させるためには、Linuxのカーネルを作り直す必要があると思われる。

リモートデパッグオプションを有効にし、実際に、動作させてみよ。

いくつかのsystem callをリモートデパッグのブレークポイントの対象にし、実 際に止めて観察せよ。

1.GDBとは

GDBはGNUデバッガーとも呼ばれる。GNUとは、FSF(Free Software Foundation)が進めているUNIX互換ソフトウェア群の開発プロジェクトの総称 であり、フリーソフトウェアの理念に従った修正・再配布自由なUNIX互換シス テムの構築を目的としている。

 GDBプログラムを、コマンド・ラインまたはDDD(Data Display Debugger)な どのグラフィカル・ツールから実行することによりプログラム中のエラーを探 り出すことができる。

GDBは、通常ユーザー・プログラムのデバッグに使われ るが、リモートデバッグ機能を用いればOSのカーネルのデバッグにも使用する ことができる。



2.リモートデバッグとは

リモートデバッグは通常の方法でGDBを実行させることができないマシン上の プログラムをデバッグする場合に用いられる機能である。

具体的には、OSのカ ーネルのデバッグをする場合や、自身でGDBを十分に動かせるだけの機能を持 たないOSを使用した小規模なシステム上のプログラムのデバッグを行う場合に 用いられる。

リモートデバッグを行う際は、デバッグをしたいマシンとは別にGDBを実行で きる環境を持ったマシンを用意して接続し、GDBを実行できるマシン側からGDB を実行できないマシン側のデバッグをする。

この際の通信はそれぞれのマシン のシリアルポートをシリアルケーブルで接続して行われる。



3.リモートデバッグを行う際の条件

リモートデバッグを実行するためには、次に示す条件を満たす必要がある。
  1. GDBを実行するマシンにデバッグ対象のプログラムを実行する環境が整っ ていること。
  2. 相手のマシンとシリアルポートを通じて通信できる準備をする必要がある。 GDBは通信プロトコルを標準装備しているのでホスト側は特に準備することは ないが、ターゲット側ではデバッグ対象のプログラムに通信用プロトコルを実 装したサブルーチンをリンクする必要がある。このサブルーチンを含むファイ ルをデバッグスタブと呼ぶ。デバッグスタブはターゲット側マシンのアーキテ クチャに固有なのでいくつか種類があり、GDBとともに配布されている。


4.デバッグスタブの機能

デバッグスタブは次の3つのサブルーチンを提供する。デバッグ対象のプログ ラムの先頭付近には次のサブルーチンを記述した行を追加してやる必要がある。



実際に動かしてみる

はじめに、 http://kgdb.linsyssoft.com/quickstart.htm の手順に従いリモートデバッグを試みたが、
項目「Compiling the kernel on the development machine」
の項目3でカーネルコンフィギュレーションを行うために
xconfig、oldconfigを実行したが、コンフィグ画面が表示されず失敗した。

参考ページでは、カーネルのソースをダウンロードしてきてカーネルの イメージを作っていたが、
カーネルハッキングの項目を有効にしたカーネルのイメージを作成できれば ページ通りの手順を踏まなくてもよいだろうと思われる。

そこで、現在使用しているマシンのカーネルハッキングの設定を変更して再構築 したカーネルのイメージを使用することにした。
その結果、カーネルのイメージは作成できたものの、使用しているマシンでは カーネルの再構築の際にgrubではなく
liloを用いるため、項目7のgrubに 関する設定の箇所を飛ばしてカーネルを再構築した。
その結果、成功すれば、ターゲットマシンは接続待ちのメッ セージを出力して停止するはずなのだが、通常通りに起動して失敗した。


課題

カーネルの再構築の際にliloでなくgrubを用いて再起動できるようにgrubにつ いて調べる必要がある

参考リンク

http://www-06.ibm.com/jp/developerworks/linux/021018/j_l-debug.html
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-4.18/gdb_toc.html
GDBとは
リモートデバッグとは
リモートデバッグを行う際の条件
デバッグスタブの機能
実際に動かしてみる
課題
参考リンク

level2 top level4