Kernel/gdb/hasher: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
Нет описания правки
Строка 7: Строка 7:
   <span style="color:blue">~$</span> '''hsh-install''' gdb tmux rpm-build-vm kernel-image-un-def-debuginfo
   <span style="color:blue">~$</span> '''hsh-install''' gdb tmux rpm-build-vm kernel-image-un-def-debuginfo
   <span style="color:blue">~$</span> '''hsh-shell''' --mountpoints=/proc,/dev/kvm
   <span style="color:blue">~$</span> '''hsh-shell''' --mountpoints=/proc,/dev/kvm
   <span style="color:brown">builder@i586:/.in$</span> '''tmux'''
   <span style="color:brown">builder@i586:~$</span> '''tmux'''
   <span style="color:brown">builder@i586:/.in$</span> '''tmux''' split
   <span style="color:brown">builder@i586:~$</span> '''tmux''' split
{{Note|В <code>tmux</code> переключение между окнами нажатиями <code>^B</code> + <code>↑</code>, <code>^B</code> + <code>↓</code>.}}
{{Note|В <code>tmux</code> переключение между окнами нажатиями <code>^B</code> + <code>↑</code>, <code>^B</code> + <code>↓</code>.}}


'''В одном окне запускаем:'''
'''В одном окне запускаем:'''
   <span style="color:brown">builder@i586:/.in$</span> '''vm-run''' --qemu='-S -s'
   <span style="color:brown">builder@i586:~$</span> '''vm-run''' --qemu='-S -s'
Благодаря опции <code>-S</code> qemu ждет подключения gdb (потребуется нажать <code>c</code>), а <code>-s</code> запускает gdbserver на порту 1234.
Благодаря опции <code>-S</code> qemu ждет подключения gdb (потребуется нажать <code>c</code>), а <code>-s</code> запускает gdbserver на порту 1234.


'''В другом окне:'''
'''В другом окне:'''
* Находим путь к файлу <code>vmlinux</code>:
* Находим путь к файлу <code>vmlinux</code>:
   <span style="color:brown">builder@i586:/.in$</span> '''rpm''' -ql kernel-image-un-def-debuginfo | '''grep''' /vmlinux$
   <span style="color:brown">builder@i586:~$</span> '''rpm''' -ql kernel-image-un-def-debuginfo | '''grep''' /vmlinux$
   /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
   /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
* Запускаем <code>gdb</code>:
* Запускаем <code>gdb</code>:
   <span style="color:brown">builder@i586:/.in$</span> '''gdb''' -q /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
   <span style="color:brown">builder@i586:~$</span> '''gdb''' -q /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
   <span style="color:gray">Reading symbols from /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux...
   <span style="color:gray">Reading symbols from /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux...
   Reading symbols from /usr/lib/debug/usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux.debug...</span>
   Reading symbols from /usr/lib/debug/usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux.debug...</span>

Версия от 06:19, 27 ноября 2022

Отладка ядра Linux в GDB в окружении Hasher

Данный способ позволяет отлаживать именно ядро, а не QEMU.

  • В sources.list Hasherа должен быть разрешен компонент debuginfo.
  • Для Hasher должен быть настроен проброс /dev/kvm.
 ~$ hsh --ini
 ~$ hsh-install gdb tmux rpm-build-vm kernel-image-un-def-debuginfo
 ~$ hsh-shell --mountpoints=/proc,/dev/kvm
 builder@i586:~$ tmux
 builder@i586:~$ tmux split
Примечание: В tmux переключение между окнами нажатиями ^B + , ^B + .


В одном окне запускаем:

 builder@i586:~$ vm-run --qemu='-S -s'

Благодаря опции -S qemu ждет подключения gdb (потребуется нажать c), а -s запускает gdbserver на порту 1234.

В другом окне:

  • Находим путь к файлу vmlinux:
 builder@i586:~$ rpm -ql kernel-image-un-def-debuginfo | grep /vmlinux$
 /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
  • Запускаем gdb:
 builder@i586:~$ gdb -q /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux
 Reading symbols from /usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux...
 Reading symbols from /usr/lib/debug/usr/lib/debug/lib/modules/6.0.10-un-def-alt1/vmlinux.debug...
 (gdb) target remote :1234
 Remote debugging using :1234
 0x0000fff0 in ?? ()
 (gdb) hbreak start_kernel
 Hardware assisted breakpoint 1 at 0xc2474b29: file init/main.c, line 930.
 (gdb) c
 Continuing.
 
 Thread 1 hit Breakpoint 1, start_kernel () at init/main.c:930
 930     {
 (gdb)


Полезные ссылки