Режим мониторинга TrustZone и IFAR, IFSR, DFAR, DFSR

Монитор ARM TrustZone режим может перехватывать прерывания в режиме монитора. Режим монитора всегда выполняется в безопасном мире или контексте. Как мы можем узнать, какой адрес и причина вызвали ошибку в обычном мире, когда она перехватывает векторы отмена инструкции и ошибка данных режима монитора?

IFSR, < a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0433b/CIHBEDBC.html" rel="nofollow">IFAR, DFSR и DFAR относятся к CP15 регистрирует.


person artless noise    schedule 27.02.2014    source источник


Ответы (1)


Стоит отметить, что в режиме мониторинга можно настроить только внешние прерывания, поэтому ошибки доступа к MMU не будут перехватываться.

Что касается основного вопроса: состояние всех защищенных/незащищенных банковских регистров в режиме мониторинга контролируется состоянием бита NS регистра защищенной конфигурации cp15: когда он установлен, вы получаете доступ к не -secure версии, и когда ясно, что вы получаете доступ к безопасным версиям.

Ниже приведен некоторый встроенный gcc код, который позволяет любому режиму secure world проверять эти 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);
person unixsmurf    schedule 27.02.2014
comment
Это очень странно; все банковские CP15 регистры такие? Таким образом, когда вы находитесь в мониторе, применяется безопасное состояние MMU, но вы можете видеть незащищенный TTBR и т. д., если установлен бит NS? - person artless noise; 28.02.2014
comment
Правильный. Режим монитора особенный. - person unixsmurf; 28.02.2014
comment
Можете ли вы объяснить немного больше о Итак, когда вы находитесь в мониторе, применяется безопасное состояние MMU, но вы можете видеть незащищенный TTBR и т. д., если установлен бит NS? - person ; 29.04.2014
comment
@mSO: сам режим мониторинга всегда безопасен. Таким образом, записи TLB, выделяемые при выполнении в режиме монитора или любом другом безопасном режиме, являются безопасными (NSTID=0), независимо от состояния бита NS. - person unixsmurf; 29.04.2014