我正在尝试使用jtag probe和gdb远程调试在arm cortex-a9目标上运行的linux内核。我可以连接到内核并使用gdb停止它。我能够在内核代码中设置断点,并且gdb也会确认是否存在该位置,但是问题是,一旦我开始执行并发出了continue命令,就永远不会命中断点,并且内核会继续运行....
请在这方面帮助我。谢谢。
如所指出的in this thread,您应该将断点设置为硬件断点,即-使用hbreak
命令。只有这样,断点才会被命中。
对于阅读本文的任何人,默认情况下调试器都不会中断软件断点,请参见相关文档:
“如果要使用的体系结构支持内核选项CONFIG_STRICT_KERNEL_RWX,则应考虑将其关闭。此选项将阻止使用软件断点,因为它将内核内存空间的某些区域标记为只读。如果kgdb支持对于您正在使用的体系结构,如果您希望在CONFIG_STRICT_KERNEL_RWX选项打开的情况下运行,则可以使用硬件断点,否则需要关闭此选项。“
在https://www.kernel.org/doc/html/v4.14/dev-tools/kgdb.html
禁用RWX并重新编译,然后软件断点应该可以工作(此后它们在这里开始正常工作)