Отладка ядра Android

Я экспериментировал с получением 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)

61
задан Vadim Kotov 24 July 2017 в 09:59
поделиться