【发布时间】:2017-07-24 17:59:38
【问题描述】:
我一直在尝试让kgdb 使用 Nexus One。
我已从https://android.googlesource.com 中提取内核并启用与kgdb 相关的所有内容,包括使用menuconfig 进行kgdbts 测试。成功构建内核并将其刷入设备(已解锁并运行 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 发送一个提示,该 USB 被用作伪串行端口,因为手机没有真正的串行端口。
根据我从研究中收集到的信息,提示应该是允许我发出问题的触发器
(gdb) target remote /dev/ttyACM0
并连接到与内核的调试会话。
我还用b 和c 测试了/proc/sysrq-trigger,只是确认我能够将一些命令传递给sysrq。
所以在我冗长的尝试提供尽可能多的信息之后,我的问题是为什么g 没有触发调试器?
这是我第一次尝试在任何系统上进行内核调试,我已经用尽了在谷歌上搜索的方法,所以我求助于你。谢谢!
(我也尝试将 kdgbwait 放在内核命令行中但没有成功,因为我认为 android 内核尚不支持)
【问题讨论】:
-
所以我继续研究这个并发现了以下......
-
好奇你发现了什么:)
-
以下在哪里?
-
他不小心把全部解释完了。
-
你发现了什么?只是想知道。