Я экспериментировал с получением kgdb
для работы Nexus One .
Я вытащил ядро из https://android.googlesource.com и включил все, что связано с kgdb
, включая kgdbts
, тестирование с использованием ] menuconfig
. Успешно собрал ядро и прошил его на устройство (которое разблокировано, рутировано и работает CyanogenMod 7)
Я также выполнил инструкции, найденные на http://bootloader.wikidot.com/android:kgdb чтобы USB-соединение действовало как последовательное соединение, как того требует kgdb
(и успешно проверил связь от ttyACM0
к ttyGS0
).
Следующие папки существуют, что указывает на то, что kgdboc
и kgdbts
были встроены в ядро:
/sys/modules/kgdboc/parameters
/sys/modules/kgdbts/parameters
Ниже приведен вывод команды dmesg, показывающий, что выполняется тестирование kgdbts
, чтобы показать, что ( Я думаю), это успешное завершение тестов:
# dmesg | grep kgdb
<6>[ 12.974060] kgdb: Registered I/O driver kgdbts.
<6>[ 12.981781] kgdbts:RUN plant and detach test
<6>[ 12.995178] kgdbts:RUN sw breakpoint test
<6>[ 13.002441] kgdbts:RUN bad memory access test
<6>[ 13.010864] kgdbts:RUN singlestep test 1000 iterations
<6>[ 13.019042] kgdbts:RUN singlestep [0/1000]
<6>[ 13.077850] kgdbts:RUN singlestep [100/1000]
<6>[ 13.132720] kgdbts:RUN singlestep [200/1000]
<6>[ 13.187500] kgdbts:RUN singlestep [300/1000]
<6>[ 13.242370] kgdbts:RUN singlestep [400/1000]
<6>[ 13.297149] kgdbts:RUN singlestep [500/1000]
<6>[ 13.351928] kgdbts:RUN singlestep [600/1000]
<6>[ 13.406829] kgdbts:RUN singlestep [700/1000]
<6>[ 13.461578] kgdbts:RUN singlestep [800/1000]
<6>[ 13.516540] kgdbts:RUN singlestep [900/1000]
<6>[ 13.570922] kgdbts:RUN do_fork for 100 breakpoints
<6>[ 21.117645] kgdb: Unregistered I/O driver kgdbts, debugger disabled.
Я считаю, что проблема, с которой я столкнулся, заключается в том, чтобы заставить ядро запускать kgdb
.
# echo -n g > /proc/sysrq-trigger
Просто приводит к тому, что я возвращаюсь в командную строку и (я думаю) предполагается, что все заморозим и отправим приглашение через usb, которое используется как псевдо-последовательный порт. t, поскольку у телефона нет настоящего.
Из того, что я понял из своих исследований, это приглашение должно быть триггером, который позволит мне выдать
(gdb) target remote /dev/ttyACM0
и подключиться к сеансу отладки с ядром.
Я также протестировал / proc / sysrq-trigger
с b
и c
, просто подтвердил, что могу передать некоторые команды в sysrq
.
Итак, после моей долгой попытки предоставить как можно больше информации мой вопрос: почему g
не запускает отладчик?
Это моя первая попытка отладки ядра в любой системе, и я исчерпал возможности сформулировать свой поиск в Google, поэтому я обращаюсь к вам. Спасибо!
(Я также безуспешно пытался поместить kdgbwait в командную строку ядра, поскольку я считаю, что это еще не поддерживается ядром Android)