问题标签 [trust-zone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
496 浏览

linux-kernel - IMX53 外部中止

我在 IMX53 Sabre 平板电脑上启动 Android。android正常启动时在串口上看到的最后几行如下:

请注意,这些外部中止不会停止启动过程,Android 会正常启动。现在我想使用这些外部中止来测试我的监视器中止处理程序代码。我希望能够捕获外部中止以进行监视。

在安全监视器的初始化中,我执行以下操作:

我的监视器向量表如下所示:

一个示例异常处理函数只打印一条语句,如下所示: 在汇编中:

在 C 中:

我在安全监视器的初始化中添加了这个向量表,如下所示:

这些修改有一些变化,即内核在外部中止点崩溃。但是我没有在监视器处理程序中得到打印语句。启动 Android 时,我现在在串行上得到以下输出:

我是否需要一些其他设置来将中止捕获到监视模式?最终,我将设置 CSU 以使 I2C0/IPU 等外围设备安全,并为这些外围设备捕获和模拟中止。但是我需要执行将中止定向到监视器处理程序函数的第一步。有人可以帮忙吗?

编辑

首先让我尝试不带任何 printf 的预取中止处理程序(以减少错误的来源)。所以目标是:中止出现在监视器上,而监视器只是再次将控制权交还给 NW,因为这种中止是不感兴趣的。

本质上,SCR 中只有一位来指定任何中止应该发生什么。但我可能只对数据中止感兴趣(当某些特定外围设备发生访问时也是如此)。所以第一步是在预取中止发生时将控制权交还给 NW。

以下代码作为预取处理程序具有相同的输出:崩溃并显示“检测到预取中止处理程序中的错误模式”。

0 投票
0 回答
137 浏览

linux-kernel - IMX53 初始化堆栈

我在 IMX53 Sabre 平板电脑上启动 Android。我正在尝试为不同的处理器模式初始化堆栈。以下是我的显示器初始化代码:

Android 启动正常,但我不确定堆栈指针是否设置正确,因为我无法按照IMX53 external abort中的描述使用它们。堆栈初始化是否正确?

其他相关代码片段:

0 投票
1 回答
735 浏览

arm - 控制对 TZASC 的访问

假设我的系统具有启用 TrustZone 的 CPU 和可使用 TZASC(例如 TZC-400)保护的脱离 SoC DRAM。如何控制对用于配置 DRAM 区域访问权限的 TZASC 寄存器的访问?

如果我在启动期间配置了权限但由于我可能想在运行时更改它们而没有锁定它们,那么在安全模式下运行的每个代码是否都可以重新配置 TZASC,或者只是在特权安全模式下运行的代码(监控代码,安全操作系统内核)能够做到这一点吗?

0 投票
0 回答
260 浏览

gcc - TrustZone GCC 示例(Cortex A9 - ZedBoard Zynq 7000)

我试图在 ZedBoard 上运行一个简单的 TrustZone 示例,它只是一个在 Secure World 和 Normal World 之间切换的裸机程序。GCC 编译器是否有任何此类示例可用?官方的 ARM 示例主要是用 ARM 汇编编写的。我已经开始将示例移植到 GCC,但是我遇到了很多问题,因为我对任何一种大会方言都不是很有经验

0 投票
1 回答
546 浏览

arm - ARM的EL3寄存器怎么写

目前我正在尝试为我的 AArch64 开发板编写几个具有 EL3 权限的系统控制寄存器。

我将我的代码放在受信任的固件引导加载程序 (BL31) 中。

bl31_main这是我放入arm-trusted-firmware-source-code 的代码

我可以正确读取这些寄存器的值,因此我假设我的代码以 EL3 权限运行。

但是,对于我测试的几个寄存器,每次我向它们写入新值后,它们的值甚至都不会改变。

我无法想出可能导致此问题的原因。欢迎任何建议!

提前谢谢你。

西蒙

0 投票
0 回答
160 浏览

assembly - 向量表ARM A9之后的代码

我在 A9 芯片(Xilinx Zynq)中实现一个小型操作系统作为大学项目。我正在使用 trustzone 来实现一些功能,并且我想直接从用户模式通过 SVC 调用进行监控,因此我在我的 SVC 处理程序中发出了一个 SMC。这是矢量表加上处理程序的一个版本,它可以工作(为简单起见,我删除了其他处理程序代码):

但是,如果我将处理程序代码放在向量表之后,我会遇到问题。如果我将处理程序定位如下,有时不会发出 SMC 调用。调试时,我逐步执行指令,但好像从未发生过,因为监视器向量表没有收到 SMC 异常:

即使是在处理程序解决问题之前的“NOP”指令:

我真的不明白为什么会这样。我错过了一些明显的东西吗?

0 投票
1 回答
291 浏览

timer - 在 Arm TrustZone 中设置定时器/计数器

我的目标是在安全世界中设置一个无法从正常世界禁用的计数器/计时器。当计时器到期时,它会引发一个将由安全世界处理的中断。可能吗?

更新:我找到了 OP TEE os 项目,特别是他们处理计时器和安全世界中断的方式是我所需要的。我现在看起来并没有更好地理解这一点:

https://github.com/OP-TEE/optee_os/blob/master/core/arch/arm/pta/interrupt_tests.c

0 投票
1 回答
6094 浏览

arm - 如何解释 ARM 的 SMC 调用?

我一直在阅读 Android 的内核,以了解 CPU 内核(又名 DVFS、DCVS)的动态电源管理是如何完成的。我在此处找到的代码对以下函数(在此处定义)进行了一些调用,该函数又调用了 SMC 汇编指令。

ARM 有一个解释SMC 调用约定的文档,但我无法使用它来理解以下功能。如何进一步跟踪 SMC 指令,以根据其输入操作数查看它实际执行的操作?

0 投票
1 回答
1069 浏览

security - 上下文切换到安全模式的成本是多少(arm trustzone)

我试图了解在 arm 中在受信任(安全)和非安全模式之间来回切换的成本。

从非安全世界转移到安全世界时究竟需要发生什么?我知道需要设置 ns 位(基于一些特殊指令?),需要刷新和更新页表(?),刷新和更新处理器缓存。还有什么需要发生的吗?

处理器缓存:它们是分段和共享的缓存,还是每个模式都使用整个缓存?这决定了交换机的成本。

RAM:这必须是“分区的”并由两种模式使用。所以寻址只是“分区”的一个偏移量。这是正确的吗?

从用户空间到内核模式切换或进程到用户空间中的进程切换有什么不同?

从非安全模式到安全模式的转变是否会使其比常规进程上下文切换更昂贵?

有没有文章可以解释到底发生了什么?

编辑:根据下面的回复,我希望了解当进程在 arm 处理器上从非安全模式切换到安全模式(信任区域)时究竟会发生什么。

0 投票
1 回答
1286 浏览

arm - 如何设置 TrustZone 开发环境

我想开始玩ARM TrustZone,所以我想设置一个开发环境,不幸的是我觉得我仍然缺少一些东西,我不知道如何将所有东西放在一起。

这是我现在的照片:

  • 需要带有 Cortex-A 处理器的 SoC
    • 没有板子可以开发吗?即模拟器?
  • TrustZone 是一种硬件和软件技术
    • 如果我得到一个 SoC 板,硬件部分是否已经涵盖?
    • 软件(OS/Kernel)部分可以用 GlobalPlatform、OpenTEE 等解决。
  • 可信应用程序开发
    • 有哪些 IDE?
    • 他们如何部署到董事会?

我知道这是一个相当广泛的问题,我很乐意获得在线资料的链接


编辑:

我的问题的某些部分得到了部分回答,但最重要的事情还没有得到回答:我详细描述的图片是否正确和完整?是/否,为什么?

不,这不是我应该使用哪个基于 ARM 的开发板的副本?