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