Я нашел этот пост, когда искал информацию о 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), и вы можете начать отладку.