Question

Le bras Mode moniteur TrustZone peut intercepter les abandons en mode moniteur.Le mode moniteur s’exécute toujours dans le monde ou le contexte sécurisé.Comment pouvons-nous savoir quelle adresse et quelle raison ont provoqué un défaut dans le monde normal lorsqu'il passe en mode moniteur instruction d'abandon et erreur de données des vecteurs ?

Le IFSR, IFAR, DFSR et DFAR sont mis en banque CP15 enregistre.

Était-ce utile?

La solution

Il convient de noter que seuls les abandons externes peuvent être configurés pour être effectués en mode moniteur, de sorte que les erreurs d'accès à la MMU ne seront pas piégées.

Quant à la question principale :l'état de tous les registres bancaires sécurisés/non sécurisés en mode moniteur est contrôlé par l'état du bit NS du registre de configuration sécurisé cp15 :lorsqu'il est défini, vous accédez aux versions non sécurisées, et lorsqu'il est clair, vous accédez aux versions sécurisées.

Ce qui suit est quelques éléments en ligne gcc code qui permet à tout monde sécurisé mode pour les inspecter CP15 enregistre.

    #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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top