一般的には、デバッガーはそのプロセッサーで実行しているソフトウェアとはまったく関係がないため、jtagを使用できます。問題が発生する可能性があるのはキャッシュです。たとえば、プロセッサを停止してRAM内の一部の命令を変更して再起動した場合、RAM内の命令の変更はデータアクセスであり、命令キャッシュではなくデータを通過します。キャッシュ、個別の命令とデータキャッシュがある場合、それらは有効になっており、変更した命令の一部は命令キャッシュにあるアドレスにあります。新しい古い命令がプロセッサに供給されると、かなり速く混乱する可能性があります。 。Linuxは、キャッシュがある場合はそれを使用するのが好きです。
2番目はmmuです。プロセッサ/jtagは、物理アドレスではなく、mmuのプロセッサ側の仮想アドレスで動作している可能性があります。したがって、ハードウェアの動作に応じて、たとえば、でデバッグユニットのアドレスごとにブレークポイントを設定した場合プロセッサとオペレーティングシステムのタスクが同じアドレス空間にある別のプログラム/スレッドに切り替わると、正しいアドレスにある間違ったプログラムにブレークポイントが設定されます。デバッガー/プロセッサーがRAM内の命令を変更してブレークポイントを設定すると、上記のキャッシュの問題が発生します。キャッシュされていない場合は、適切なスレッドで適切な命令を中断しますが、キャッシュの問題が発生します。
要するに、プロセッサがjtagベースのデバッグをサポートしている場合、そのプロセッサで実行することを選択したソフトウェアに基づいて変更されることはありません。