Android: Отладка ядра с помощью KGDB

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

Ответ 1

Я знаю, что вы уже задали вопрос в списке Android Kernel Dev и не получили ответов, но вы искали в архивах сообщения о 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) и попросить некоторых людей указать указатели (пожалуйста, напишите, что вы здесь найдете), или, возможно, попросите форумы Android xda-разработчиков.

Ответ 2

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

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

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

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

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

Итак, в этот момент требуются относительно небольшие изменения для последовательного драйвера Nexus 6 (msm_serial_hs_lite.c) для поддержки KGDB (в частности, возможность выполнять операции ввода-вывода с использованием атомного символа). Я просто портировал эти изменения из основного кода ядра ядра Linux, так как глава под названием Stephen Boyd проделал тяжелую работу с полным серийным драйвером 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 для 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), и вы можете начать отладку.