Отладчик GNU и ядро ​​Linux - PullRequest
1 голос
/ 27 января 2010

Я скомпилировал свой собственный модуль Kernel и теперь я бы хотел его загрузить в отладчик GNU GDB. Я сделал это один раз, год назад или около того, чтобы посмотреть на макете памяти. Тогда это работало нормально, но, конечно, я был слишком глуп, чтобы запишите отдельные шаги, которые я предпринял, чтобы сделать это ... Может кто-нибудь просветить мне или указать мне хороший учебник?

Большое спасибо

Ответы [ 3 ]

3 голосов
/ 03 февраля 2010

Для ядер> 2.6.26 (т. Е. После мая 2008 г.) предпочтительным способом, вероятно, является использование «kgdb light» (не путать с его предком kgdb, доступным в виде набора патчей для ядра). «kgdb light» теперь является частью ядра (например, по умолчанию в современных ядрах Ubuntu), и его возможности быстро улучшаются (над этим работает Джейсон Вессель - возможно, ключ Google).

Недостаток: вам нужны две машины: одна, которую вы отлаживаете, и машина разработки (хост), на которой работает gdb. В настоящее время эти две машины могут быть связаны только через последовательный канал. Программа kgdb работает на целевой машине, где она обрабатывает точки останова, пошаговое выполнение и т. д., а протокол удаленной отладки используется для связи с машиной разработки. GDB работает на компьютере разработчика, где он обрабатывает пользовательский интерфейс. Адаптер USB-to-serial работает нормально на компьютере разработчика, но в настоящее время вам нужен настоящий UART на целевой машине - и это уже не так часто на современном оборудовании.

Документация (краткая) kgdb находится в исходниках ядра, в Документация / DocBook

Я предлагаю вам поглядеть на "килограмм света" для полной истории. Опять же, не путайте свет килограммов и килограммов, они объединяются в поиске в Google, но в основном это разные животные. В частности, информация с linsyssoft.com относится к «предку» kgdb, поэтому попробуйте выполнить следующие запросы:

kgdb module debugging -"linsyssoft.com" -site:linsyssoft.com

и откажитесь от статей до мая 2008 / 2.6.26 ядра. Наконец, для отладки модуля вам нужно вручную загрузить символы модуля на машине разработчика для всего кода и разделов, которые вас интересуют. Это слишком долго, чтобы здесь обращаться, но некоторые подсказки там , там и там. Суть в том, что kgdb - очень приятное улучшение, но не ожидайте, что эта поездка будет такой же простой, как запуск gdb в режиме пользователя. Еще. :)

2 голосов
/ 27 января 2010

Прошло много времени с тех пор, как я активно разрабатывал драйверы для Linux, поэтому, возможно, мой ответ немного устарел. Я бы сказал, что вы не можете использовать GDB. Если вообще, только для отладки post post в файлах дампа. Для отладки вы должны использовать отладчик ядра. Сборка ядра с включенным отладчиком ядра (есть один готовый отладчик для 2.6, которого не было в то время, когда я был активен). Я использовал патчи ядра для KDB от Sun ftp: //oss.sgi.com/www/projects/kdb/download/, что меня вполне порадовало. Инструмент пространства пользователя не будет очень полезен, если новый gdb не будет каким-либо образом связываться с внутренним отладчиком ядра (который в любом случае вам придется активировать)

Надеюсь, это даст вам хотя бы некоторые подсказки, но не будет подробным ответом. Лучше, чем вообще никакого ответа. Привет.

1 голос
/ 27 января 2010

Я подозреваю, что вы сделали

gdb /boot/vmlinux /proc/kcore

Конечно, вы на самом деле не можете делать никакой отладки, но это, безусловно, достаточно хорошо, чтобы покопаться в ядре.

...