Как использовать kgdb на ARM ??

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

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

Target загружается с новым kernelм, и 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 в gdb, он не показывает 10 строк кода, вместо этого он говорит

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

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

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

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

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

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

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

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

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

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

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