2013-01-04 2 views
14

Im используя ARMv7 в качестве целевой машины. Я собрал источник Linux 2.6.34.13 для цели.Как использовать kgdb на ARM ??

Цель связана с Host (машиной разработки Linux) через последовательный порт с использованием minicom.

Target загружен новым ядром, а KGDB включен в командной строке.

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger 

Ввод сообщения KGDB ... отображается и ждет команд.

В принимающей стороне,

$arm-none-linux-gnueabi-gdb vmlinux 

    gdb > set remotebaud 115200 
    gdb > set debug remote 1 
    gdb > target remote /dev/ttyS0 

После этого, некоторые команды связи происходит по умолчанию.

  1. qSupported отправлено с Host to Target. Но qSuppoted не поддерживается целью, поэтому возвращается $ # 00. Аналогично команды ?, HC-1 были отправлены, но получили правильный ответ.

  2. Но команда qOffsets не получает никакого ответа от цели.

Я подозреваю, что vmlinux. Потому что, если я дам list в БГД, его не показывает 10 строк кода вместо этого он говорит

arch/arm/kernel/head.S : No such file or directory. 

Примечание :: Компиляция ядра сделано в сервере. поэтому в машине разработки нет источника. Но arm-gdb ищет голову. Кажется.

Я не знаю, какую ошибку им делать. Мне нужны символы для загрузки для всего ядра. Направляй меня в этом отношении.

+0

Я не уверен, но у вас есть ядро, скомпилированное на «хосте», которое используется для отладки? & вы не переместили код где-нибудь еще? – anishsane

+1

Вот почему он не может найти источник? – anishsane

+0

«kgdb» требует, чтобы исходный код был доступен? Возможно, есть опция командной строки, чтобы сказать 'kgdb', чтобы не искать код. – BenjiWiebe

ответ

1

Идентификация конечной точки связи, установленная только для bcos задержки линии. Связь между источником ядра в машинах разработки и тайм-аутом отсутствует.

Для тайм-аута для некоторых команд говорят, что qOffset и qSupported решаются с помощью GtkTerm вместо minicom в качестве средства связи последовательного порта. Разница - это опция «задержки линии» в GtkTerm. поэтому, когда это настроено на ~ 250, после этого не появляется сообщение о тайм-ауте. просто соединение установлено и ждет в точке останова по умолчанию. Если кто-то знает, как это сделать, то "line delay" в миникомп будет полезнее всем.

да, конечно, нам нужен исходный код для команды list. но без этого источника также можно отлаживать i.e si, bt может быть выполнено с помощью vmlinux и system.map.

Примечание: установить отладочный пульт дистанционного управления 1 не требуется. Это дает подробное отображение командной строки для передачи команд. Для более детального просмотра, set debug serial 1.

+0

Это ответ? – unwind

+0

Его наблюдения. – Jeyaram

1

То, что kgdb ищет head.S не является ошибкой. Если вы посмотрите here, вы увидите, что в исходном дереве есть файл head.S. Это файл ассемблера, вот и все. Существует несколько исходных файлов, написанных на ассемблере для этой платформы.

Это нормально, потому что некоторые инструкции, особенно последовательности загрузки и другие «низкоуровневые» функции, записываются на ассемблере, потому что это проще.

Как уже писали в комментариях, gdb нуждается в источниках для их просмотра во время отладки. В разделах отладки, которые содержат отладочные символы и генерируются при запуске gcc с -g, есть только «ссылки» только на исходный файл, строку и столбец. См. here для получения дополнительной информации и дальнейших ссылок на символы отладки с gcc.

То, что kgdb ищет head.S, является хорошим признаком того, что вы все делаете правильно. Если у вас есть доступные источники (и это может быть так же просто, как разблокировать tarball из правильной версии), просто запустите kgdb внутри этого исходного дерева или используйте аргумент -d, чтобы добавить исходный путь поиска, находясь на вашей машине разработки, конечно ,

+0

thats информативный. Благодарю. – Jeyaram