Kernel/gdb/hasher
< Kernel
Отладка ядра Linux в GDB в окружении Hasher
Данный способ позволяет отлаживать именно ядро, а не QEMU.
- В sources.list Hasherа должен быть разрешен компонент debuginfo.
- Для Hasher должен быть настроен проброс
/dev/kvmи tmux (проброс/dev/pts).
~$ hsh --ini ~$ hsh-install gdb tmux rpm-build-vm kernel-image-un-def-debuginfo ~$ hsh-shell --mountpoints=/proc,/dev/kvm,/dev/pts 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)