Google-code-prettify

2020/11/01

virt-managerでインストールしたPlamo Linuxのカーネルデバッグ

自分が忘れないようにメモ程度です。

以下のサイトを参考にしました。


まずはvirt-managerでゲストOSとしてPlamo Linuxをインストールします。

ゲストのカーネルをKGDB関連を有効にしたものに変更します。
私は下記のようにしました。

# CONFIG_RANDOMIZE_BASE is not set

CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
CONFIG_KGDB_TESTS=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_LOW_LEVEL_TRAP=y
CONFIG_KGDB_KDB=y
CONFIG_KDB_DEFAULT_ENABLE=0x1
# CONFIG_KDB_KEYBOARD is not set
CONFIG_KDB_CONTINUE_CATASTROPHIC=0


ホストの側で下記のコマンドを実行します。

$ sudo virsh edit ゲストの名前

ドメインタグの
<domain type='kvm'>
の部分を下記のように変更します。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <qemu:commandline>
    <qemu:arg value='-s'/>
  </qemu:commandline>

Qemuの実行時に-sオプションを追加しています。

-sオプションは-gdb tcp::1234と等価とのことです。
私はcjk_ttyパッチが当たっているカーネル5.4.39とパッチが当たっていない5.9.1を同時に動かしたかったので、片方を下記のように記述しました。

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0>
  <qemu:commandline>
    <qemu:arg value='-gdb'/>
    <qemu:arg value='tcp::4321'/>
  </qemu:commandline>



ゲストのPlamo Linuxを再起動します。


ホスト側でgdbを立ち上げて下記のようにします。

takahiro@plamovaio:~/work/src/kernel/qemu/5.9.1/linux-5.9.1$ gdb vmlinux
GNU gdb (GDB) 8.0
Copyright (C) 2017 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 "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from vmlinux...done.
warning: File "/home/takahiro/work/src/kernel/qemu/5.9.1/linux-5.9.1/scripts/gdb/vmlinux-gdb.py" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".
To enable execution of this file add
        add-auto-load-safe-path /home/takahiro/work/src/kernel/qemu/5.9.1/linux-5.9.1/scripts/gdb/vmlinux-gdb.py
line to your configuration file "/home/takahiro/.gdbinit".
To completely disable this security protection add
        set auto-load safe-path /
line to your configuration file "/home/takahiro/.gdbinit".
For more information about this security protection see the
"Auto-loading safe path" section in the GDB manual.  E.g., run from the shell:
        info "(gdb)Auto-loading safe path"
(gdb) target remote :1234
Remote debugging using :1234
0xffffffff81a3c8be in native_safe_halt () at ./arch/x86/include/asm/irqflags.h:60
60              asm volatile("sti; hlt": : :"memory");


試しにブレークポイントを貼ってみます。


(gdb) break do_con_write
Breakpoint 1 at 0xffffffff8168f1f0: file drivers/tty/vt/vt.c, line 2850.
(gdb) c
Continuing.

Breakpoint 1, do_con_write (tty=0xffff8880748ef800, buf=0xffff88807c073c00 "aogin: velop",
    count=1) at drivers/tty/vt/vt.c:2850
2850    {


do_con_write関数にブレークポイントを貼ったところ、文字入力時にブレークポイントで停止しました。

0 件のコメント: