2

ARM例外ベクトルをどのように再配置しますか?

基本的に、ある方法でそれらを再マップできる必要があるため、ARMコアがベクターを実行しようとすると、にあるROMではなく、カーネルのRAMビットに格納されているカスタム例外ベクターを実行する必要があります0x0。それは可能ですか?それとも、 ROMからカーネルに割り込みをルーティングするつもりですか?

つまり、基本的に、ARMコアに「ベクターテーブルの新しいアドレスはここにあります」と伝える方法はありますか?CPUを高ベクトルモードで起動できることは知っていますが、それは私が探しているものではありません。ベクターベースをカスタムアドレスに動的に設定できる必要があります。

4

4 に答える 4

6

これは、使用しているコアに大きく依存します。

Cortex-M3チップは、システム制御ブロックのベクトルテーブルオフセットレジスタ(VTOR)を使用してベースアドレスを変更できます。一部の実装では、可能なアドレスが制限される場合があります。

「従来の」チップ(ARM7 / 9、Cortex-A / R)のうち、任意のベースを指定できるものはないと思いますが、ほとんどのチップは00000000とFFFF0000を切り替えることができ、いくつかは「 RAM」アドレス。

ただし、チップにMMUがある場合は、通常、RAMページをFFFF0000にマップし、そこにハンドラーをコピーできます。Linuxはそれをやっていると思います。

于 2012-01-23T11:54:31.897 に答える
1

さらに、プロセッサにセキュリティ拡張機能がある場合は、VBAR(Vector Base Address Register)を利用できます。

MCR p15, 0, <Rt>, c12, c0, 0

ARMアーキテクチャリファレンスマニュアルのB4.1.156を参照してください。

于 2014-03-26T03:19:33.890 に答える
1

cortex-A9プロセッサの場合、これはCp15コプロセッサレジスタのVBARレジスタを利用することで実行できます。ベクターベースアドレスレジスタの目的は、モニター例外ベクターのベースアドレスを保持することです。

 MRC p15, 0, <Rd>, c12, c0, 0    ; Read Secure or Non-secure Vector Base Address Register
 MCR p15, 0, <Rd>, c12, c0, 0    ; Write Secure or Non-secure Vector Base Address Register
于 2016-10-26T10:34:50.860 に答える
0

システムレジスタVBARは、ベクタテーブルのベースアドレスを指定します。VBARはPL1以降から変更できます。ほとんどのシステムレジスタと同様に、VBARもセキュリティ拡張機能(TrustZone)が実装されている場合にバンクされます。

于 2016-01-07T04:41:43.163 に答える