首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核远程调试:无法重新插入调试器

Linux内核远程调试:无法重新插入调试器
EN

Stack Overflow用户
提问于 2015-03-19 15:51:32
回答 2查看 1.2K关注 0票数 4

我正在使用kgdb /远程gdb调试linux内核。我有两台电脑-- ubuntu和windows主机。计算机通过串行口和零调制解调器电缆连接.

在目标ubuntu系统中启用了KGDB支持,来自KGDB的命令选项:

kgdbwait kgdboc=ttyS0,115200

在我的Windows上,我有MinGW gdb构建(x86_64):

gdb ( GDB ) 7.4版权(C) 2012自由软件基金会公司,该GDB被配置为"x86_64-w64-mingw32“。

我启动我的目标系统,它等待远程调试器连接。我在GDB窗口中输入以下命令:

代码语言:javascript
复制
(gdb) set remotebaud 115200                                                
(gdb) target remote COM4

我的gdb能够连接到目标并打印以下内容:

使用COM4进行远程调试 ??()在内核/debug/debug_CORE.c:1043 wmb();断点后的/*同步点*/

然后输入命令设置断点,以便在操作系统启动时能够返回到gdb:

代码语言:javascript
复制
(gdb) b sys_sync

断点1在0xffffffff8124a710处

我还在另一次相同设置的运行中尝试了硬件辅助断点:

代码语言:javascript
复制
(gdb) hbreak sys_sync

当我从目标ubuntu控制台输入同步命令时,这个断点设置将导致内核beak返回调试器。

在GDB中单击“继续”之后,操作系统就可以启动了,但我永远无法将控制权带回到gdb。我尝试在sys_sync上设置断点,我尝试

代码语言:javascript
复制
echo g > /proc/sysrq-trigger

在所有情况下都没有成功。

非常有趣的是:如果我最初没有在sys_sync中设置断点,那么稍后输入同步命令就什么都不会做了。如果我设置了sys_sync断点,然后输入同步命令,就可以完全停止目标计算机--所以我认为断点在本例中是实际设置的。

如何进入调试器?GDB对任何CTrl命令都没有响应,所以在我最初点击“继续”之后,就没有办法继续调试了。

可能是体系结构不兼容(Windows目标),但似乎确实设置了断点。

请帮帮忙

EN

回答 2

Stack Overflow用户

发布于 2015-07-16 18:26:27

在您的测试机器上:以超级用户身份登录。

代码语言:javascript
复制
sudo su

然后生成一个sysrq触发器。

代码语言:javascript
复制
echo g > /proc/sysrq-trigger

在此之后,您的目标机器应该冻结,但是dev机器应该进入目标。

票数 0
EN

Stack Overflow用户

发布于 2016-03-04 18:45:27

降低两端的波特率。根据我的经验,虽然理论上支持115200波特率,但它很少正常工作。我建议将波特率降低到9600 (两端),并找到成功。一旦实现了这一点,你就可以一步一步地后退一步。我很少能够让kgdb可靠地工作超过34K波特,而且通常更低。我还确保使用适当的RTS/CTS交联连接器,一些商店购买,一些手工制作。这不重要,我认为问题是在kgdboc中的一些问题,在SUT方面,并不是总是工作在完全115200波特速率。解决方案就是将波特率降低到9600。数据小,所以低速不会对任何东西造成伤害,让它可靠地工作是值得任何速度损失的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29149213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档