我可以使用JTAG在嵌入式Linux上调试我的程序吗?

nom*_*y29 5 linux embedded jtag

我正在使用at91sam9260进行开发.有一个Linux内核在其中运行,我在它上面启动我自己的软件.

我想知道我是否可以使用JTAG调试器来调试我正在处理的软件,而不会看到Linux内核的大部分内容?

我问这是因为我认为在看到完整的Linux执行时调试我的软件会变得非常复杂.

换句话说,我想知道在使用JTAG探针进行调试时是否会有一些抽象层?

old*_*mer 2

一般来说,是的,您可以将 jtag 作为调试器,与您在该处理器上运行的软件完全无关。可能遇到麻烦的是缓存,例如,如果您停止处理器想要更改RAM中的某些指令,然后重新启动,则RAM中指令的更改是数据访问,它不会通过指令缓存,而是通过数据高速缓存,如果您有单独的指令和数据高速缓存,它们会被启用,并且您修改的一些指令位于指令高速缓存中的地址,您可能会因为新的和过时的指令被馈送到处理器而很快陷入混乱。Linux 喜欢使用缓存(如果有的话)。

其次是 mmu,处理器/jtag 可能在 mmu 的处理器端的虚拟地址上操作,而不是在物理地址上操作,因此取决于硬件的工作方式,例如,如果您在调试单元中按地址设置断点处理器和操作系统任务切换到同一地址空间的另一个程序/线程,您将在正确地址的错误程序上设置断点。如果调试器/处理器通过修改 RAM 中的指令来设置断点,那么您会遇到上面的缓存问题,如果没有缓存,那么您将在正确线程中的正确指令上中断,但随后就会遇到缓存问题。

最重要的是,如果处理器支持基于 jtag 的调试,则该调试不会根据您选择在该处理器上运行的任何软件而改变。