Нашел этот пост из связанного поста и хотел сказать, что я только что опубликовал некоторую работу, которую я сделал, чтобы заставить это работать на Nexus 6, если кому-то интересно:
http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss/
Интересно, что проблема ОП с sysrq была той, с которой я тоже сталкивался. Причиной такого поведения является то, что KGDB неправильно инициализировался, поэтому он не может установить обработчик для триггера 'g' (kgdb). Вот почему все остальные команды sysrq по-прежнему работают.
Более длинное объяснение (спасибо @Robert):
Чтобы это работало, мне пришлось создать кабель отладки 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 Kernel в качестве главы под названием Стивен Бойд, который проделал тяжелую работу с полным 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), и вы можете начать отладку.