2015-02-28 2 views
0

Я работаю с openvswitch на сервере ubuntu 14.04. Я могу легко подключить gdb к любому из своих двоичных файлов для отладки его различных функций, но когда дело доходит до его модуля ядра, я не могу отлаживать его в соответствии с моим требованием. Я использую следующие шаги для присоединения Linux Kernel с GDB: 1. GDB/TMP/vmlinux/Proc/kcore 2. Добавление символа файла в GDB: кд/SYS/модуль/openvswitch/разделы/ Ls -A1 .cat .text .data .bss 3. в БГД - добавление символов файла DataPath/Linux/openvswitch.ko 0xf87a2000 -s .data 0xf87b4000 -s .bss 0xf87b4560 4. б vxlan_udp_encap_recvВключить отладку модуля ядра из пользовательского пространства

, но когда я генерировать пакеты для тестирования модуля ядра ovs и переходить на него, говорит: «Программа не запускается».

Примечание. Я подтвердил все символы модуля, выполнив эту команду: nm root/ovs/_build-gcc/datapath/linux/openvswitch.ko =, который печатает все символы. и lsmod также подтверждает существование модуля ядра ovs.

Я хочу сделать остановку модуля ovs в указанной точке прерывания после того, как он получит сообщение из своего приложения для пользовательского пространства в сокете netlink для его детальной отладки, так же, как это позволяет мне отлаживать процесс пользовательского пространства. Пожалуйста, предложите мне, как мне решить эту проблему или если есть какая-либо альтернатива. Я буду очень благодарен за любую помощь или предложение. Спасибо!

+1

Представьте, если бы вы могли установить точку останова в ядре, используя отладчик на том же компьютере ... тогда gdb приостанавливал ядро ​​при достижении точки останова, а затем ваша машина полностью зависала, потому что ядро ​​приостановлено. – immibis

+0

любое разрешение этой темы? Я встретил ту же проблему. благодаря! –

ответ

0

одна возможность:

Запустите GDB сервер на целевой машине. запустить gdb на другой машине. перекомпилируйте ядро ​​целевой машины с параметром -ggdb в gcc. запустите обе машины с целевой машиной, на которой запущено ядро ​​со всей информацией -ggdb. все источники доступны на обеих машинах. подключиться с тестовой машины к целевой машине. подключите сервер gdb к ядру ....

1

Чтобы отладить ядро, вам необходимо использовать KGDB/KDB.

+0

Мне не нужно отлаживать все ядро, я просто хочу отлаживать поведение конкретного модуля, лежащего внутри ядра. –

+1

@Viciouss: То же самое происходит, потому что модуль ядра - это просто библиотека кода, которая загружается и выполняется внутри ядра. – caf

Смежные вопросы