gpt4 book ai didi

arm - TrustZone 监控模式和 IFAR、IFSR、DFAR、DFSR

转载 作者:行者123 更新时间:2023-12-04 22:11:22 28 4
gpt4 key购买 nike

ARM TrustZone monitor mode可以在监控模式下捕获中止。监控模式始终在安全世界或上下文中执行。当它陷入监视模式指令中止数据故障向量时,我们如何知道什么地址和原因导致了正常世界中的故障?

IFSR , IFAR , DFSRDFAR是存储 CP15 寄存器。

最佳答案

值得注意的是,在监控模式下只能配置外部中止,因此不会捕获 MMU 访问故障。

至于主要问题:所有安全/非安全分组寄存器的状态在监控模式下由cp15安全配置寄存器NS位的状态控制:当它被设置时,您访问非安全版本,当很明显您访问安全版本时。

以下是一些内联 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);

关于arm - TrustZone 监控模式和 IFAR、IFSR、DFAR、DFSR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080918/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com