我正在使用at91sam9260进行开发。其中运行了一个Linux内核,我在它上面启动了自己的软件。
我想知道我是否可以使用JTAG调试器调试我正在处理的软件,而不会看到Linux内核的大部分内容?
我问的是,因为我认为在看到完整的Linux执行时调试我的软件会变得非常复杂。
换句话说,我想知道在使用JTAG探针进行调试时是否会有一些抽象层?
答案 0 :(得分:3)
可能不是 - 据我所知,大多数JTAG调试器都假设能够在处理器中设置断点。在多任务操作系统下,也会停止操作系统内核。
像QNX这样的嵌入式操作系统具有在OS内核之上运行并通过以太网进行通信的调试器。
答案 1 :(得分:2)
这取决于JTAG设备及其驱动程序。就个人而言,我只知道一个能够做到这一点的设备:XDS560 + Code composer studio(CCS)。但是,可能还有其他人。
我建议您咨询您设备的制造商。
答案 2 :(得分:2)
通常是的,你可以将jtag作为调试器与你在该处理器上运行的软件完全无关。你可以遇到麻烦的地方是缓存,例如,如果你停止处理器想要更改ram中的一些指令,并重新启动,ram中指令的更改是一个数据访问,它不通过指令缓存而是数据缓存,如果你有一个单独的指令和数据缓存,它们被启用,你修改的一些指令位于指令缓存中的地址,你可以快速搞砸新的和陈旧的指令被送到处理器。 Linux喜欢使用缓存。
第二个是mmu,处理器/ jtag可能在mmu的处理器端的虚拟地址而不是物理地址上运行,因此根据硬件的工作原理,例如,如果你在地址中设置一个断点处理器中的调试单元和操作系统任务切换到同一地址空间的另一个程序/线程,您将在正确的地址错误的程序上断点。如果调试器/处理器通过修改ram中的指令来设置断点,那么你会遇到上面的缓存问题,如果没有缓存,那么你将在正确的线程中中断正确的指令,但是你有缓存问题。
最重要的是,如果处理器支持基于jtag的调试,那么根据您选择在该处理器上运行的软件,它不会发生变化。
答案 3 :(得分:0)
对于ARM,Asset Arium系列claimed能够调试应用程序代码。不过,我还没试过。