У меня возникли проблемы с отладкой моего модифицированного ядра Linux-3.11.0. Для отладки кода, я использую:Удаленная отладка gdb не останавливается на контрольных точках
- GdB 7,6
- QEMU 1.6.5
- ядро Linux 3.11.0
Моя система имеет i7 Intel (R) ядро (TM) -2760QM CPU @ 2.40GHz running Ubuntu 12.10
Я скомпилировал модифицированное ядро с файлом конфигурации, который я создал с помощью команды make menuconfig. (С изменениями в категории «ядра взлома»)
Некоторые из .config файлов линий (которые я нахожу уместным) цитируются здесь:
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_KERNEL=y
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_FS=y
CONFIG_HAVE_HW_BREAKPOINT=y
CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
Я использую QEMU с «-S» вариант в загружается ядро, и с помощью GDB подключить к QEMU и возобновить его выполнение:
(gdb) target remote :1234
(gdb) continue
При установке точки останова, для примера: break schedule
я получаю сообщение, подтверждающее, такие как:
Breakpoint 1 at 0xffffffff81736400: file kernel/sched/core.c, line 2509.
Так что до сих пор все кажется прекрасным!
Проблема в том, что gdb и qemu не останавливаются на контрольных точках! Они оба просто продолжать работать ...
Я попытался установить аппаратные точки останова, как это предлагается в некоторых местах, но я получаю сообщение:
No hardware breakpoint support in the target.
который является странным, потому что у меня есть набор CONFIG_HAVE_HW_BREAKPOINT. не
I также снята с охраны CONFIG_DEBUG_RODATA
как предложено в других местах, но до сих пор не найдено ...
Я пытался возиться с файлом .config, как предложено здесь: gdbserver inside qemu does not stop on breakpoints, но я не мог понять, соответствующие различия между рабочим файлом .config и моим файлом .config ... (Слишком много различий!)
Может ли кто-нибудь мне помочь?
спасибо!
Как вы сообщаете qemu, что запущенное ядро отлаживается? Где вы устанавливаете порт «1234»?. Я раньше не использовал qemu, но, если можно, попробуйте включить KGDB/KDB и запустить ядро по последовательной ссылке. – srd
Я использую флаги -s и -S. Qemu запускается и ждет, пока gdb подключится к порту по умолчанию - 1234. Только когда я нажимаю continue на стороне gdb, Qemu возобновляет выполнение. Таким образом, связь между gdb и Qemu прекрасна ... – Noamiko