Tweet

kgdb を使ってみた - テキスト版

先日,ニコ動にこんな動画を投稿してみたんだけど,「文字が読みにくい」という意見が多かったので,テキストに起こしてみました.

kgdb とは

1.png

ターゲットプログラム内にスタブと呼ばれる gdb の手先を組み込み,別のマシンで gdb を起動しデバッグを行う方法は,ワンチップマイコンのプログラム開発なんかで使われています. この「ターゲットプログラム」が Linux カーネルの場合,「スタブ」に相当するものが kgdb です.

HDL-GXR.jpg

kgdb は x86 ターゲットでも利用できますが,それではつまらないので,今回はターゲットとして ARM マシンである I-O DATA LANDISK HDL-GXR を使ってみました.

menuconfig

まずはビルドするカーネルの設定.

menuconfig-1.png

トップメニューから「Kernnel hacking」メニューに入って

menuconfig-2.png

「Compile the kernel with debug info」を有効にします. これが無くても kgdb 自体は動作するんだけど,vmlinux ファイルにデバッグ情報が埋め込まれなくなるので gdb 上でソースコードが参照できなくなってしまいます.

menuconfig-3.png

もちろん KGDB オプションも有効にします.

menuconfig-4.png

KGDB メニューに入り,「KGDB: use kgdb over the serial console」オプションも有効にします.

カーネルコマンドライン

u-boot.png

kgdb を利用するには,カーネルコマンドラインに

kgdboc=ttyS0,115200

という設定を追加して起動します.

x86 マシンの場合は grub や lilo でこの操作をやりますが,HDL-GXR では u-boot でこの操作を行います.

あと,

console=ttyS0,115200

というパラメータも追加し,シリアルにコンソールを設定してやります. でないと,リモートマシンと通信をすることができません.

kgdb への切り替え

sysrq.png

シリアルコンソールを gdb スタブへ明け渡すには

ブレーク信号 g

を送ってやります.

ブレーク信号(Ctrl+C とは別物)の送り方は,使っているターミナルソフトの説明を読んでください. ここで使っている minicom の場合は

Ctrl+a f

でブレーク信号が送出されます.

この後に続けて「g」を入力すると,シリアルコンソールが gdb スタブへと切り替わります.

gdb の起動

gdb-start.png

ターミナルソフトを終了させて gdb を起動します.

arm-linux-gnueabi-gdb vmlinux -b 115200

gdb のコマンドラインには uImage や bzImage ではなくて,デバッグ情報が格納されている,カーネルソースツリー直下の vmlinux ファイルを指定します. あと,-b 115200 はシリアルのビットレートです.

で,gdb プロンプトで

target remote /dev/ttyS0

と入力すると kgdb と接続されます.

gdb-bt.png

あとは,アプリケーションプログラムのデバッグのときと同様にバックトレースを取ったり

gdb-bp.png

ブレークポイントを設定したり

gdb-step.png

ステップ実行したり,変数を参照したりすることもできます.

まとめ

ざっくりと kgdb を起動するまでを説明しました.

デバッガとは本来,デバッグするための道具です. が,不具合が無い場合でも,単にプログラムの動作を追ってみたり,プログラムの流れを学習したりするのにも使えます. というわけで,kgdb は「Linux のカーネルのソースコードは巨大すぎて,どこから見ていけばいいかわからない」という向きにもオススメできるのかもしれません.

2009/12/17 追記

  • vmlinux の説明がミスリーディングぽかったらしいので,gdb 起動の説明を変更.
  • カーネルコンフィグオプションの説明が間違ってたので修正

koyo_take さん,ご指摘ありがとうございました.


添付ファイル: filegdb-step.png 863件 [詳細] filegdb-bp.png 865件 [詳細] filegdb-bt.png 830件 [詳細] filegdb-start.png 896件 [詳細] filesysrq.png 1041件 [詳細] fileu-boot.png 1060件 [詳細] fileHDL-GXR.jpg 806件 [詳細] file1.png 853件 [詳細] filemenuconfig-4.png 777件 [詳細] filemenuconfig-3.png 921件 [詳細] filemenuconfig-2.png 909件 [詳細] filemenuconfig-1.png 886件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-12-17 (木) 15:56:32 (3593d)