2011/10/15

カーネルをデバッグするためのGRUB2設定

Ubuntu 11.04でカーネルデバッグをしたときの設定です。
VMWare同士でシリアルポートを接続する方法で、baudrate 115200で接続。

* デバッグ対象のOS

- /boot/grub/grub.cfg のデバッグしたいカーネルの menuentry をコピーして、新しい menuentry を追加する。
- 追加した menuentry の "linux" のパラメータに "kgdboc=ttyS0,115200 kgdbwait" を追加する。以下は一例。


menuentry 'Ubuntu, with Linux 2.6.38.8 (debug)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    set gfxpayload=$linux_gfx_mode
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root ba000129-5c3a-403c-9107-3d7649a4d051
    linux    /boot/vmlinuz-2.6.38.8 root=UUID=ba000129-5c3a-403c-9107-3d7649a4d051 ro kgdboc=ttyS0,115200 kgdbwait
    initrd    /boot/initrd.img-2.6.38.8
}



- 再起動時にSHIFTキーを押し続けてブートメニューを表示し、追加した menuentry に対応する項目を選ぶ。

* デバッガを起動するOS

GRUBとは関係ないが、ついでにデバッガ側の作業も記述しておく。
カーネルをビルドしたディレクトリに移動して、gdbを起動。以下のコマンドを入力。.gdbinit に記述しておいても良い。


(gdb) file ./vmlinux
(gdb) set remotebaud 115200
(gdb) target remote /dev/ttyS0



# GRUB2とはバージョン1.9以降を指すそうだ。ややこしい...。

0 件のコメント:

コメントを投稿