Android: отладка ядра с помощью KGDB - PullRequest
13 голосов
/ 08 февраля 2011

Я пытаюсь выполнить отладку ядра для своего Nexus One, и я следую инструкциям http://bootloader.wikidot.com/android:kgdb. Мне было интересно, действительно ли кто-то заставил это работать? И кто-нибудь сделал более современное решение для использования KGDB для отладки ядра?

Ответы [ 2 ]

3 голосов
/ 17 августа 2015

Я нашел этот пост, когда искал информацию о KGDB на Android, поэтому, несмотря на то, что ему несколько лет, я подумал, что стоит опубликовать ссылку на какую-то работу, которую я проделал, чтобы запустить его и запустить на Nexus 6.

http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss/

Я надеюсь, что это поможет всем, кто ищет похожие ответы.

Отредактировано после обратной связи (спасибо всем):

Чтобы это работалоМне пришлось сделать отладочный кабель UART на основе этого блога Accuvant .Это довольно простая схема, которая состоит из базового напряжения FTDI 3.3 В (доступного от SparkFun на момент написания), а также 4 резисторов (2 x 1 кОм, 1 x 1,2 кОм и 1 x 100 Ом) и4-элементный разъем для наушников Tip-Ring-Ring-Ring (TRRS).Резисторы по существу обеспечивают делитель напряжения, чтобы уменьшить напряжение 3,3 В до чего-то более безопасного для вашего телефона.Вставив аудиоразъем с другим концом, подключенным к вашей плате, аудиоподсистема распознает, что напряжение (~ 2,8 В) на одном из выводов, и знает, что через этот кабель можно получить интерфейс UART.Выключатель FTDI подключается к вашему ПК через USB, и отсюда вы можете получать доступ к консольным сообщениям через эмулятор терминала, такой как minicom.Тем не менее, теперь у вас есть последовательный интерфейс через тот же механизм, и это то, что мы можем использовать для соединения KGDB.

Так что на данный момент некоторые относительно небольшие изменения необходимы для последовательного драйвера Nexus 6 (msm_serial_hs_lite.c)поддерживать KGDB (в частности, способность выполнять операции ввода-вывода атомарного характера).Я только что перенес эти изменения из основного кода ядра Linux в качестве главы под названием Стивен Бойд, который проделал тяжелую работу для полного серийного драйвера MSM (Qualcomm) msm_serial.c.Его изменения можно найти здесь или просто выполнить поиск "msm_serial: добавить поддержку poll_" в Google.Порт не был сложным, и мой код может быть найден на github .

Кроме того, вам нужно иметь возможность собрать собственное ядро ​​для вашего N6, которое Google предоставляет многоинформации по .Затем вам нужно создать загрузочный образ, который содержит модификации KGDB в репозитории github.Я взял стандартное ядро ​​из https://developers.google.com/android/nexus/images,, извлек его (используя abootimg -x) и затем использовал следующую команду, чтобы перепаковать его с моим собственным ядром (zImage-dtb) и дополнительными параметрами командной строки, чтобы гарантировать загрузку KGDB иукажите на мой последовательный порт следующим образом:

abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4'

Создав мой boot.img, я мог загрузиться в него с помощью команды fastboot boot boot.img, открыть оболочку adb и затем вызвать точку останова в ядре Androidиспользуя команду:

echo -n g > /proc/sysrq-trigger

Для полноты картины стоит упомянуть, что вам нужны привилегии суперпользователя для доступа к / proc / sysrq-trigger, поэтому вам нужно иметь root.

Когда телефон остановлен,и подключив отладочный кабель, запустите версию GDB for ARM на вашем хост-компьютере с вашим несжатым ядром в качестве аргумента (например, arm-eabi-gdb ./vmlinux).Примечание: я использую Ubuntu 14.04 и использую arm-eabi-gdb из каталога 'prebuilts' в моем исходном хранилище AOSP.Наконец, введите следующие команды:

set remoteflow off
set remotebaud 115200
target remote /dev/ttyUSB0

Если все в порядке, это должно немедленно привести к точке останова kgdb (которую создала запись в / proc / sysrq-trigger), и вы можете начать отладку.

2 голосов
/ 13 марта 2011

Я знаю, что вы уже задавали вопрос в списке разработчиков Android Kernel и не получили ответов, но вы искали в архивах сообщения о kgdb и отладке ?: http://groups.google.com/group/android-kernel/search?group=android-kernel&q=kgdb&qt_g=Search+this+group

В частности, вы можете посмотреть этот пост: http://groups.google.com/group/android-kernel/browse_thread/thread/5233e03391867c98/320beef11e737a62

Вот несколько других случайных ссылок, которые могут быть полезны:

Во всяком случае, это интересный вопрос, и мне действительно трудно что-то найти по нему. Возможно, вы захотите попробовать подключиться к IRC когда-нибудь (# android-dev или # android-root на freenode) и попросить у некоторых людей указателей (пожалуйста, опубликуйте, что вы найдете здесь), или, возможно, спросите xda разработчики форумов Android .

...