Android内核调试

met*_*ace 61 debugging android kernel

我一直在尝试开始使用kgdbNexus One.

我已经从https://android.googlesource.com中提取了内核,并启用了kgdb包括kgdbts测试使用的一切menuconfig.成功构建内核并将其刷新到设备(已解锁并运行CyanogenMod 7)

我也跟着上找到的说明 http://bootloader.wikidot.com/android:kgdb启用USB连接的要求作为一个串行连接kgdb(和测试,从通信ttyACM0ttyGS0成功).

下列文件夹存在,表明kgdbockgdbts已建到内核:

/sys/modules/kgdboc/parameters
/sys/modules/kgdbts/parameters
Run Code Online (Sandbox Code Playgroud)

以下是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.
Run Code Online (Sandbox Code Playgroud)

我相信我遇到的问题是让内核触发kgdb.

# echo -n g > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

只是导致让我回到命令提示符并且(我认为)假设冻结所有内容并在usb上发送提示,因为手机没有真正的用户,因此它被用作伪装串口.

从我从研究中得到的结果来看,提示应该是允许我发布的触发器

(gdb) target remote /dev/ttyACM0
Run Code Online (Sandbox Code Playgroud)

并连接到内核的调试会话.

我也测试/proc/sysrq-triggerb,c只是确认我能够传递一些命令sysrq.

所以我的问题是我的长篇大论尝试提供尽可能多的信息是为什么g不触发调试器?

这是我在任何系统上进行内核调试的第一次尝试,我已经没有办法在谷歌上搜索我的搜索,所以我转向你.谢谢!

(我也尝试将kdgbwait放在内核命令行中但没有成功,因为我相信Android内核尚不支持)

Mer*_*lin 6

Android内核问题在[SO]上很少见,因为没有其他人回答我在这个问题上提供了我的发现.不幸的是,我没有一个nexus来测试这个,所以这个答案不是为了逐步解决你的问题,而是应该指向你正确的方向.

我在这个问题上找到的唯一有用的资源是在Dongdong DengLKML补丁中,因此配置问题不太可能,因为这些通常是丰富且广为人知的.

这表明您的内核构建存在问题.我很想再次使用最新版本的CM,看看问题是否消失了.

如果做不到这一点,请尝试向氰基团队报告,看看这是一个已知问题还是有一个简单的解决方法.

作为最后的手段,如果版本兼容,您可以尝试修补程序.唯一的选择是卷起袖子并开始攻击CM内核以合并补丁.

祝好运.