我正在使用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窗口中输入以下命令:
(gdb) set remotebaud 115200
(gdb) target remote COM4我的gdb能够连接到目标并打印以下内容:
使用COM4进行远程调试 ??()在内核/debug/debug_CORE.c:1043 wmb();断点后的/*同步点*/
然后输入命令设置断点,以便在操作系统启动时能够返回到gdb:
(gdb) b sys_sync断点1在0xffffffff8124a710处
我还在另一次相同设置的运行中尝试了硬件辅助断点:
(gdb) hbreak sys_sync当我从目标ubuntu控制台输入同步命令时,这个断点设置将导致内核beak返回调试器。
在GDB中单击“继续”之后,操作系统就可以启动了,但我永远无法将控制权带回到gdb。我尝试在sys_sync上设置断点,我尝试
echo g > /proc/sysrq-trigger在所有情况下都没有成功。
非常有趣的是:如果我最初没有在sys_sync中设置断点,那么稍后输入同步命令就什么都不会做了。如果我设置了sys_sync断点,然后输入同步命令,就可以完全停止目标计算机--所以我认为断点在本例中是实际设置的。
如何进入调试器?GDB对任何CTrl命令都没有响应,所以在我最初点击“继续”之后,就没有办法继续调试了。
可能是体系结构不兼容(Windows目标),但似乎确实设置了断点。
请帮帮忙
发布于 2015-07-16 18:26:27
在您的测试机器上:以超级用户身份登录。
sudo su然后生成一个sysrq触发器。
echo g > /proc/sysrq-trigger在此之后,您的目标机器应该冻结,但是dev机器应该进入目标。
发布于 2016-03-04 18:45:27
降低两端的波特率。根据我的经验,虽然理论上支持115200波特率,但它很少正常工作。我建议将波特率降低到9600 (两端),并找到成功。一旦实现了这一点,你就可以一步一步地后退一步。我很少能够让kgdb可靠地工作超过34K波特,而且通常更低。我还确保使用适当的RTS/CTS交联连接器,一些商店购买,一些手工制作。这不重要,我认为问题是在kgdboc中的一些问题,在SUT方面,并不是总是工作在完全115200波特速率。解决方案就是将波特率降低到9600。数据小,所以低速不会对任何东西造成伤害,让它可靠地工作是值得任何速度损失的。
https://stackoverflow.com/questions/29149213
复制相似问题