问题标签 [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.
linux - 信任区系统中非 SecureOS 和 SecureOS 中直接访问内存的过程如何工作
我不确定我是否了解 ARM 处理器中 CPU 直接访问内存的完整流程,我想知道内存的哪一部分访问缓存(L1 和 L2),DMA 和 MMU(或安全 MMU)参与其中。我不确定我是否理解从 non-secureOS 向 SecureOS 发送数据的过程是从通过 DMA 分配共享缓冲区并将数据写入共享缓冲区(在 secureOS 和 non-secureOS 之间)和发送开始的。
附加问题:
- 为什么 DMA 需要在安全或非安全之间进行通信?为什么不能通过内核缓冲区(kmalloc()、kzalloc()、get_page() 等)使用?
- 通常,CPU 可以在没有 DMA 的情况下访问内存吗?DMA一定要参加吗?
- CPU(缓存 L1 或 L2)与 DMA 之间可能没有一致性?例如:non-secureOS 将自己的数据写入 DMA 缓冲区并发送到 secureOS。安全操作系统接收缓冲区,非安全操作系统再次更改缓冲区而不刷新(我认为更改保留在缓存中),最后安全操作系统从缓存中读取陈旧的假数据
gcc - `cmse_check_address_range` 通过编译器升级改变行为
我正在使用带有 arm trust-zone 的 Cortex-M33。我的安全固件中有一个安全 api,我可以从我的非安全固件中调用它。一切都按预期工作-至少在我将编译器从升级gcc-arm-none-eabi-7-2018-q2-update
到gcc-arm-none-eabi-10-2020-q4-major
.
有问题的函数如下所示:
我通过使用确保提供的指针确实位于非安全空间中cmse_check_address_range
。这适用于版本 7,但如果我使用版本 10 编译代码,NULL
则会返回。我没有更改源代码或任何其他部分的任何内容,只是编译器。
我检查了该功能的任何更改,但甚至https://github.com/gcc-mirror/gcc/commits/master/libgcc/config/arm/cmse.c
没有显示任何更改。
有什么改变吗?也许我没有按预期使用该功能(我需要不同的功能标志吗?但话又说回来,它适用于版本 7。
更新:
- 我还在 arm 嵌入式工具链论坛上发布了这个: https ://answers.launchpad.net/gcc-arm-embedded/+question/695596
- @HsuHau https://stackoverflow.com/a/66273629/1358283发布了一个错误https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99157
cortex-m - Cortex-M33 上的内存保护控制器 (MPC) 的配置
我可以使用一些帮助来了解如何为 M33 配置 MPC。我使用带有 AN505 (IOTKit_CM33) 的 MPS2+ 板。我运行 uVision Pack 安装程序提供的示例 TrustZone 代码。
背景:器件 AN505 具有 SSRAM1 (4MB) 和 SSRAM3 (2MB)。SSRAM1 映射到 1) 0x0000_0000 - 0x003F_FFFF (NS) 2) 0x0040_0000 - 0x007F_FFFF (NS) 3) 0x1000_0000 - 0x103F_FFFF (S) 和 4) 0x1040_0000 - 0x107F_FFFF (S)。SSRAM3 映射到 1) 0x2820_0000 - 0x283F_FFFF (NS) 和 2) 0x3820_0000 - 0x383F_FFFF (S)。SSRAM1 的 MPC 块大小为 128KB。SSRAM3 的块大小为 64KB。
我们将 SSRAM1 的一半配置为普通世界,将整个 SSRAM3 配置为普通世界。
示例代码显示
这对我来说没有意义:
SSRAM3 为 2MB。它应该有 2048KB/64KB = 32 个块。所以,我们应该只需要 1 个 BLK_LUT。因此,我们应该设置 BLK_IDX = 0。但是代码将 BLK_IDX 设置为 1。
在设置 SSRAM1 的注释中,它说“blk_cnt = 0x10”。这是一个错误吗?不应该是 0x400000/blk_size = 0x20。由于这只是一个评论,我想无论如何都没关系。
我在这里很困惑。先感谢您。
linux - 在 Optee 之后无法启动 Linux
我正在开发 ZC702 板并尝试启动 Linux 和 Optee。我的引导流程是:
FSBL--->U-Boot--->OP-TEE--->Linux
尽管 Op-tee 已成功启动,但 Linux 在启动时会挂起 'zynq_early_slcr_init' 函数。
可能是 Op-tee 操作系统锁定访问 SLCR。所以当 Linux 访问 SLCR 时,系统会崩溃。
我怎么解决这个问题?
linux - ioremap、地址和与 TrustZone 的关系
有一些问题我不确定我是否完全理解 TrustZone 地址。据我所知,每个内核都带有描述给硬件的设备树配置。在 TrustZone 系统中,ns(非安全)内核与 dt(设备树)一起包含对“DMA 堆”的配置。DMA 堆用于内核作为“共享缓冲区”与 TrustZone 内核通信,这取决于 SMC 处理程序的实现。一般来说,不得不说 TrustZone 内核运行在“安全内存”(安全世界)上,而在另一个“世界”中,ns 内核运行在 ns 内存(非安全世界)上。这是通过物理总线事务上的特殊 NS 位实现对架构实施的。
dt 文件中定义的大多数堆都指向节点类型“内存范围”。内存范围节点地址的更改是否会导致映射到安全地址?
我不确定,但是否有可能运行 kmalloc 导致映射到 TrustZone 安全内存?
根据ioremap功能:
ioremap() 函数用于将I/O 设备的物理地址映射到内核虚拟地址。内核创建一个页表,即将虚拟地址映射到请求的物理地址。当我们执行ioremap() 时,该映射被破坏。
可以将安全内存映射到 ns 内核吗?
- 据我所知,SMMU 负责 VA -> IPA -> PA 或 VA -> PA(在转换表上)之间的映射,这由页表的两个阶段完成。第 1 阶段由 ns 内核完成,第 2 阶段由 Hypervisor 完成。映射到安全地址的过程如何工作?在运行 ioremap() 之后,谁告诉管理程序在页表阶段 2 上进行映射?
谢谢,
linux-kernel - 设置带宽 API 用途
根据以下更改: qseecom: Add API to set bandwidth for CE HW 想了解什么是 CE clk ?它负责什么?
谢谢,
linux - 从非安全到安全的序列流
我想确定我是否理解描述非安全高级操作系统发送 smc 命令的过程。根据 Arm 用户手册和许多博客和文章,我认为这是以下场景:
- EL0(非安全)到 EL1(非安全)- svc
- EL1(非安全)到 EL2(hypervisovr - 非安全) - smc/hvc
- EL2(hypervisovr - non-secure) 到 EL3(monitor - non-secure) - smc 注意:这里 EL3(non-secure) 更改为 EL3(secure)
- EL3(监视器 - 安全)到 EL1(安全) - ???
- EL1(secure) 到 EL3(monitor - secure) - smc 注意:这里 EL3(secure) 更改为 EL3(monitor - non-secure)
- EL3(监视器 - 不安全)到 EL2(hypervisovr - 不安全) - eret
- EL2(hypervisovr - 非安全)到 EL1(非安全) - eret
- EL1(非安全)到 EL0(非安全)- ret 谁能填空并纠正我?感谢,
android - 使用 trustzone 服务的应用程序
有人知道使用 trustzone 服务的应用程序吗?应用程序的名称是什么,服务应用程序使用什么?
例如:“信号”应用程序使用密钥库服务来安全地存储我们的密钥以进行按摩加密
谢谢
c - 如何以日期时间格式在 OP-TEE 可信应用程序 (TA) 中获取 UTC 时间戳?
免责声明:我花了 4 到 5 个小时来寻找答案,在弄清楚之后,我决定在这里为同一个地方的人发布它。
OP-TEE 是开发 TA 和 CA 的一个很好的环境,但是,没有直接的方法来获取正确格式化的日期时间。也没有struct tm
。因此,这让我想知道如何在 OP-TEE TA 中获得日期时间格式?
我花了很长时间尝试使用已经支持的mbedTLS
库,对于新手来说,它们似乎确实支持获取日期时间格式。毕竟,他们确实有gmtime
应该返回这个值的。
然而,遗憾的是,gmtime
ARMv8 平台上的 OP-TEE 并没有相关功能的实现。这是一个相当艰难的运气。
那么如何在 OP-TEE TA 中获得 UTC 时间?
exception - 关于在 ARMv8-A(Cortex-A53) 中更改异常级别的问题
我是 ARMv8 的新手,所以在尝试更改异常级别时遇到了一些问题。启动后,我确定它在 EL2 上。但现在我想从 EL2 更改为非安全/安全 EL1。我做了一些尝试,但没有奏效。这是代码:
我做了很多测试并得到以下结论:
- 当spsr_el2设置为0x3c9时,这意味着我们将返回相同的EL(EL2)。它有效。打印是 1,2。
- 当spsr_el2设置为0x3c5时,这意味着我们将把EL改为EL1。但是,它只打印 1 而什么也没有。
我真的不知道如何解决这个问题。
我有两个问题:
- 我在切换到 EL1 时做错了什么?
- 如果能正确切换到EL1,应该在哪里设置EL1的安全状态?
非常感谢。