Kernel/gdb/hasher: различия между версиями
< Kernel
Vt (обсуждение | вклад) мНет описания правки |
Vt (обсуждение | вклад) |
||
(не показано 5 промежуточных версий этого же участника) | |||
Строка 3: | Строка 3: | ||
* В sources.list Hasherа должен быть разрешен компонент [[Debuginfo|debuginfo]]. | * В sources.list Hasherа должен быть разрешен компонент [[Debuginfo|debuginfo]]. | ||
* Для Hasher должен быть настроен [[Hasher/vm-run|проброс <code>/dev/kvm</code>]]. | * Для Hasher должен быть настроен [[Hasher/vm-run|проброс <code>/dev/kvm</code>]] и [[Hasher/tmux|tmux (проброс <code>/dev/pts</code>)]]. | ||
<span style="color:blue">~$</span> '''hsh''' --ini | <span style="color:blue">~$</span> '''hsh''' --ini | ||
<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,/dev/pts | ||
<span style="color:brown"> | <span style="color:brown">builder@i586:~$</span> '''tmux''' | ||
<span style="color:brown"> | <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: | <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: | <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: | <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> | ||
Строка 37: | Строка 37: | ||
= Полезные ссылки = | = Полезные ссылки = | ||
* https://qemu.readthedocs.io/en/ | * https://qemu.readthedocs.io/en/master/system/gdb.html | ||
* https://docs.kernel.org/dev-tools/gdb-kernel-debugging.html | * https://docs.kernel.org/dev-tools/gdb-kernel-debugging.html |
Текущая версия от 02:16, 26 октября 2024
Отладка ядра 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)