質問

ARM TrustZone Monitor Mode モニタモードで停止することができます。モニタモードは常に安全な世界やコンテキストで実行されます。モニタモード命令アボートおよびデータ障害ベクトルをトラップするとき、通常の世界でどのアドレスと理由が発生したかを知ることができますか?

IFSR IFAR DFSR DFAR はansed CP15 レジスタ

役に立ちましたか?

解決

外部アボートのみをモニタモードで撮影することができることは注目に値するので、MMUアクセス障害は閉じ込められない。

主な質問は、モニタモードの間にある全てのセキュア/非セキュアバンクレジスタの状態は、CP15セキュアコンフィギュレーションレジスタNSビットの状態によって制御されます。安全以外のバージョンにアクセスし、セキュアバージョンにアクセスできるようになります。

以下は、 Secure World モードを使用してこれらのgccレジスタを検査できるようにするインラインCP15コードです。

    #define MODE_MONITOR 0x16
    unsigned int mode;
    unsigned int world;
    unsigned int dfar;
    unsigned int dfsr;
    unsigned int ifar;
    unsigned int ifsr;

    asm (" mrs %0, cpsr\n"                 /* Save mode. */
         " mrc p15, 0, %1, c1, c1, 0\n"
         " orr  %1, %1, #1\n"              /* Set NS bit in SCR. */
         " cpsid aif, %6\n"                /* To monitor mode... */
         " mcr p15, 0, %1, c1, c1, 0\n"
         " mrc p15, 0, %2, c6, c0, 0\n"
         " mrc p15, 0, %3, c5, c0, 0\n"
         " mrc p15, 0, %4, c6, c0, 2\n"
         " mrc p15, 0, %5, c5, c0, 1\n"
         " bic  %1, %1, #1\n"              /* Clear NS bit in SCR. */
         " mcr  p15, 0, %1, c1, c1, 0\n"
         " isb\n"
         " msr cpsr, %0\n"
         : "=&r" (mode), "=&r" (world),
           "=r"(dfar), "=r"(dfsr),
           "=r"(ifar), "=r"(ifsr)
         : "I" (MODE_MONITOR));
    printf("DFAR: %.8x dfsr: %.8x IFAR: %.8x ifsr: %.8x\n",
           dfar, dfsr, ifar, ifsr);
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top