ترست زون مونيتور مود و إيفار ، إفسر، دفار، دسر

StackOverflow https://stackoverflow.com//questions/22080918

  •  24-12-2019
  •  | 
  •  

سؤال

الذراع ترست زون مونيتور مود يمكن إحباط إحباط في وضع الشاشة.يتم تنفيذ وضع الشاشة دائما في العالم أو السياق الآمن.كيف يمكننا معرفة العنوان والسبب الذي تسبب في حدوث خطأ في العالم الطبيعي عندما يصطاد في وضع الشاشة إحباط التعليمات و خطأ البيانات ناقلات?

ال IFSR, IFAR, DFSR و DFAR هي راهن البرنامج 15 السجلات.

هل كانت مفيدة؟

المحلول

ومن الجدير بالذكر أنه يمكن تكوين فقط إحباط الخارجية التي يتعين اتخاذها في وضع الشاشة ، لذلك لن يتم المحاصرين أخطاء الوصول ممو.

أما بالنسبة للسؤال الرئيسي:حالة جميع السجلات المصرفية الآمنة / غير الآمنة أثناء وجودك في وضع الشاشة يتم التحكم من قبل الدولة من كب 15 التكوين الآمن سجل نس بت:عندما يتم ضبطه ، يمكنك الوصول إلى الإصدارات غير الآمنة ، وعندما يكون من الواضح أنك تصل إلى الإصدارات الآمنة.

ما يلي هو بعض مضمنة 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