LINUX.ORG.RU

Отладка ядра с KGDB через Ethernet

 ,


0

1

Собрал ядро с KGDB, вроде бы никаких опций не пропустил. Попробовал отладку с параметром ядра «kgdboc=ttyS0,115200». Останавливаю ядро в отладчике «echo g > /proc/sysrq-trigger», на хосте запускаю gdb, «target remote /dev/ttyUSB0». Все работает. Пробовал и из под Eclipse, тоже ОК, почти ОК...

Проблема в том, что ооочень мееееедленно, каждую команду на выполнение одной инструкции «si» gdb выполняет секунд по 20. Понятно, что со скоростью 115200 бод, гоняется содержимое регистров, памяти. Но не так же долго, не десятки килобайт же! Это просто несъедобно!

Вопросы.

1) Можно ли этот процесс ускорить? Вроде бы некоторые COM-порты могли до 960 КБод.

2) Попробовал ядро запустить с параметром «kdbgoe=@10.3.2.95/,@10.3.2.96». На sysrq-trigger не останавливается. Если разрешить тест KGDB на загрузке, то ядро виснет. Это вообще рабочий вариант, через ethernet запустить отладку? При старте, понятное дело, IP еще неизвестен, но потом то да.

Ответ на: комментарий от hateyoufeel

Спасибо. Но кажется kgdboe вообще не работает. kgdboc хоть что-то оставляет в dmesg после запуска, kgdboe упоминается в логе только в строчке ядра.

А в тормозах, так поразмыслив, может быть виноват Eclipse, и то, что я за каким то поставил LXDE на target машину. В итоге там крутится процессов 100 и ниток 300 в них, а Eclips на каждый чих хочет перечитать состояние всего этого. Буду заниматься фитнесом с системой))), глушить sddm->lxde, демонов, даже консолей 8 не надо.

bugs-bunny
() автор топика
Ответ на: комментарий от bugs-bunny

А что именно ты дебажишь? Есть вариант, что может быть гораздо проще запустить ведро в qemu. Там есть gdb сервер прямо в эмуляторе.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Нужно посмотреть кое-что в модуле ядра на x86_64. Драйвер железки, эмулятор не подойдет.

Зачем для этого использовать QEMU? Он же эмулирует по инструкциям не родные процы типа ARM-а. И в итоге адские тормоза. Диски виртуальные еще для него готовить, конфиг сложный. Очень специфическая вещь.

bugs-bunny
() автор топика
Ответ на: комментарий от bugs-bunny

Зачем для этого использовать QEMU? Он же эмулирует по инструкциям не родные процы типа ARM-а. И в итоге адские тормоза. Диски виртуальные еще для него готовить, конфиг сложный. Очень специфическая вещь.

Да нет, ты вполне можешь kvm использовать. Будет работать с почти нативной скоростью всё. Диск готовить тоже не нужно, если у тебя всё включено в ядро/initrd. Просто даёшь их qemu параметрами и он их сразу загружает. Ну либо можешь простейший образ с ext2 разметить и кинуть туда модули и busybox в корень.

hateyoufeel ★★★★★
()
Ответ на: комментарий от bugs-bunny

Нужно посмотреть кое-что в модуле ядра

Зависит от того, что вы хотите посмотреть. Очень часто отладчик не нужен, многое можно сделать с помощью динамической трассировки: SystemTap, bcc/bpftrace.

i586 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.