Как использовать 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 ищет голову. Кажется.
Я не уверен, какую ошибку я делаю. Мне нужны символы для загрузки для всего ядра. Направляй меня в этом отношении.
Ответы
Ответ 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
, чтобы добавить путь к исходному поиску, находясь на вашей машине разработки конечно.