2

私は Xen ブロック ドライバー バックエンドをハッキングしており、シリアル経由で kgdb を使用してデバッグするのに苦労しています。これが私のセットアップです。ホスト OS として MacOS X を実行しています。2 つの VirtualBox VM があり、dev と test と呼んでいます。VirtualBox は、それぞれに名前付きホスト パイプに接続された COM1 ポートを与えるように構成されています。次にsocat -d -d ./test-com1 ./dev-com1、2 つのポートを接続するために使用します。echo hi > /dev/[ttyS0|hvc0]これを実行した後、 socat を実行または使用して、ある VM から別の VM にプレーン テキストを送信できることを確認しました。また、dev で socat を使用して、起動時にコンソール出力をテストから取得することもできます。

テストカーネルの grub エントリは次のとおりです。

menuentry 'Debian GNU/Linux, with Linux 3.3.6-xen-ljx-g6304e82 and XEN 4.1.2' --class debian --class gnu-linux --class gnu --class os --class xen {
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set 0c98efb4-f40e-4f0e-a2d3-2ed39b0a5070
        echo    'Loading Linux 3.3.6-xen-ljx-g6304e82 ...'
        multiboot       /boot/xen-4.1.2.gz placeholder loglvl=all guest_loglvl=all com1=115200,8n1,0x3f8,4 console=com1,vga 
        module  /boot/vmlinuz-3.3.6-xen-ljx-g6304e82 placeholder root=UUID=0c98efb4-f40e-4f0e-a2d3-2ed39b0a5070 ro console=hvc0 console=tty0 earlyprintk=xen nopat quiet
        echo    'Loading initial ramdisk ...'
        module  /boot/initrd.img-3.3.6-xen-ljx-g6304e82
}

これは開発者からのものです:

user@jimmy:~/workspace/linux-3.3.6$ stty -F /dev/ttyS0 -a
speed 38400 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 10;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

これはテストからのものです:

root@sqtest:~# stty -F /dev/tty0  -a
speed 38400 baud; rows 25; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
root@sqtest:~# stty -F /dev/hvc0  -a
speed 38400 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

開発セッションの例 (echo hvc0,38400 > /sys/module/kgdboc/parameters/kgdboc; echo g > /proc/sysrq-triggerテストを行った後):

user@jimmy:~/workspace/linux-3.3.6$ gdb vmlinux 
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/paton/workspace/linux-3.3.6/vmlinux...done.
(gdb) set remotebaud 38400
(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
Ignoring packet error, continuing...
warning: unrecognized item "timeout" in "qSupported" response
Ignoring packet error, continuing...

上記の hvc0 の代わりに tty0 を使用すると、同じことが起こります。

シリアル TTY の設定は異なりますが、Xen を使用せずにカーネルを使用すると、デバッガーに正常に接続できました。STTY によって報告されたオプションと関係があると感じていますが、それらのことについて詳しく知っている人が問題を指摘してくれることを願っています。

ありがとうございました!

4

1 に答える 1

1

あなたにはそれができないことがわかりました。ただし、次の場所に Linux パッチがあります。

http://lists.xen.org/archives/html/xen-devel/2012-06/msg00326.html

これは 3.2 カーネル用です。同じスレッドに 3.3 用のものを投稿しました。このパッチは、hvc を介した kgdb のデバッグを有効にします。

于 2012-06-13T17:29:42.803 に答える