Подтвердить что ты не робот

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

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

Цель связана с 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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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