ARM高级进阶
文章平均质量分 95
arm
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
代码改变世界ctw
ARMv8/ARMv9/TEE/安全/芯片
展开
-
ARM架构高级进阶-目录-小白勿购
小白请看“Armv8/Armv9架构从入门到精通”专栏。以翻译为主的,深度深度深度深度/深入深入深入 学习ARM架构的文章。原创 2023-11-27 09:59:54 · 1281 阅读 · 0 评论 -
【FF-A】第二十章 Appendix
在Arm A-profile系统中,S-EL0分区用于在执行状态之间实现安全服务之间的隔离,这样就不需要或不希望部署S-EL1物理分区。它们可以托管一个或多个设备驱动程序,用于控制硬件或由正常世界通过本规范描述的消息传递接口访问的安全服务。S-EL0分区的一个示例用例在20.1.1 UEFI PI Standalone Management Mode partitions中描述。原创 2023-12-10 00:33:37 · 1008 阅读 · 0 评论 -
【FF-A】第十九章 Interrupt management interfaces
• 请求EL3固件处理挂起的中断。• 在表19.2中列出了有效的FF-A实例和通道。• 该功能的语法在表19.3中进行了描述。• 在成功完成时,通过FFA_SUCCESS返回,不带任何进一步的参数。• 在FFA_ERROR函数中描述了错误代码的编码,详见表19.4。原创 2023-12-09 22:25:43 · 382 阅读 · 0 评论 -
【FF-A】第十八章 Notification interfaces
• Hypervisor通过SMC通道在非安全物理FF-A实例中调用此ABI,请求SPMC为指定的VM创建SP和SPM框架通知位图。参见10.3通知位图设置。• 表18.2列出了有效的FF-A实例和导管。• 该函数的语法见表18.3。• 成功完成时,通过FFA_SUCCESS返回,不带任何其他参数。• FFA_ERROR函数中错误代码的编码详见表18.4。原创 2023-12-09 22:21:47 · 907 阅读 · 0 评论 -
【FF-A】第十七章 Memory management interfaces
返回的权限属性是调用方将观察到的属性,而不是翻译表中精确编程的属性。必须检查RX/TX缓冲对是否映射,如果事务描述符未在动态分配的缓冲区中传递(如20.2.1中规定的在动态分配的缓冲区中传输事务描述符),并且如果RX/TX缓冲对未映射,则必须返回INVALID_PARAMATERS。如果TX缓冲区太小,而且不能使用20.2.2中列出的用于传输描述符的可选特性和20.2.1中列出的用于动态分配缓冲区中的传输描述符的可选特性,则Hypervisor必须返回NO_MEMORY。被调用方返回此翻译颗粒的权限属性。原创 2023-12-09 21:18:36 · 885 阅读 · 0 评论 -
【FF-A】第十六章 Messaging interfaces
Overview。原创 2023-12-09 20:29:31 · 773 阅读 · 0 评论 -
【FF-A】第十五章 CPU cycle management interfaces
• 允许实体向控制台提供调试日志。• 在Table 14.53中列出了有效的FF-A实例和导流。• 该函数的语法在Table 14.54中描述。• 成功完成时,返回FFA_SUCCESS,无需其他参数。– 在这种情况下,字符将在有限的时间内记录到控制台。• FFA_ERROR函数中错误代码的编码在Table 14.55中描述。原创 2023-12-09 01:21:15 · 952 阅读 · 0 评论 -
【FF-A】第十四章 Setup and discovery interfaces
表14.1:发现和设置接口该表列出了在给定的FF-A实例中必须使用特定导管实现的发现和设置接口。原创 2023-12-08 23:29:35 · 886 阅读 · 0 评论 -
【FF-A】第十三章 Status reporting interfaces
这一节描述的接口用于报告先前的FF-A ABI调用的状态。状态表示ABI调用的成功或失败完成,或者是被抢占。该ABI必须是在以下各节中列出的之一。原创 2023-12-08 21:53:39 · 832 阅读 · 0 评论 -
【FF-A】第十二章 Interface overview
从调度程序的角度来看,对FFA_MSG_SEND_DIRECT_REQ的调用在前一种情况下完成,返回FFA_INTERRUPT,在后一种情况下完成,返回FFA_MSG_SEND_DIRECT_RESP。一个FF-A ABI可以同时支持SMC32和SMC64约定,例如FFA_RXTX_MAP、FFA_NOTIFICATION_INFO_GET。例如,通过FFA_MSG_SEND_DIRECT_REQ ABI分配CPU周期的接收端点可能会被非安全中断抢占,或者执行受管理的退出。FF-A接口属于这两种类型。原创 2023-12-08 21:40:00 · 803 阅读 · 0 评论 -
【FF-A】第十一章 Memory Management
获取和设置内存权限的ABI(参见17.8 FFA_MEM_PERM_GET和17.9 FFA_MEM_PERM_SET)的支持通过FFA_FEATURES ABI进行发现。获取和设置内存权限的ABI(参见17.8 FFA_MEM_PERM_GET和17.9 FFA_MEM_PERM_SET)的支持通过FFA_FEATURES ABI进行发现。支持在动态分配的缓冲区中传输内存事务描述符的合规性要求通过FFA_FEATURES ABI进行发现,如20.2.1中描述的在动态分配的缓冲区中传输事务描述符。原创 2023-12-07 20:02:11 · 863 阅读 · 0 评论 -
【FF-A】第十章 Notifications
通知机制使请求端点(以下简称为发送方)能够以非阻塞的方式通知服务提供端点(以下简称为接收方)发生的事件。通知类似于基于门铃/邮箱机制的通信协议中两个端点之间的门铃。在讨论概念时,在易于理解的上下文中,通知一词可用于代替“门铃”。框架负责将通知从发送方传递给接收方,而不阻塞发送方。接收方端点依赖于另一个软件组件来分配CPU周期以处理通知。该组件是主调度器或辅助调度器(参见4.9 主调度器)。在本规范的其余部分中,对于通知,它在上下文中被称为接收方的调度器。原创 2023-12-07 19:33:24 · 885 阅读 · 0 评论 -
【FF-A】第九章 Interrupt management
物理中断可以在终端执行上下文处于运行状态的PE上触发。它可以针对该执行上下文或系统中的另一个FF-A组件。或者,当终端执行上下文处于等待、阻塞或抢占状态时,可以触发针对终端执行上下文的物理中断。本章提供的指导原则适用于以下与安全世界中的FF-A组件相关的物理中断管理情况。正常世界中的中断管理是实现定义的。本章的指导原则基于以下关于系统配置的假设。SPMC具有对物理GIC的专属访问。此指导原则可以扩展到SPMC与可信的S-EL1 SP共享对物理GIC的访问的配置,以实现实现定义的方式。原创 2023-12-07 01:12:01 · 801 阅读 · 0 评论 -
【FF-A】第八章 Partition runtime models
终端的运行时模型描述了其执行上下文在CPU周期分配后允许在状态之间进行转换的情况。框架规定以下机制来为终端执行上下文分配CPU周期。以下是在框架中使用运行时模型时的常规规则和指南。处于运行状态的终端执行上下文可以使用直接请求ABI调用另一个终端执行上下文。该序列可以重复任意次数。序列中的所有终端执行上下文都成为调用链的一部分。还请参阅9.2.3 CPU周期分配模式。框架在适用的运行时模型中规定了规则,以防止在调用链中形成循环,即终端执行上下文分配周期给已经是调用链一部分的另一个终端执行上下文。原创 2023-12-07 00:31:51 · 818 阅读 · 0 评论 -
【FF-A】第七章 Message passin
Firmware Framework定义了一组ABIs,实现了FF-A组件之间的同步和异步消息传递。消息交换包括以下阶段。在两个FF-A组件之间的任何消息交换中,一个或两个分区管理器会验证并将消息从发送方转发到接收方。在执行此角色时,分区管理器被称为Relayer。在没有Hypervisor的情况下,SPMC是Framework中唯一的Relayer。在Secure world中,FF-A组件参与消息传递,如下所述。原创 2023-12-05 20:39:32 · 800 阅读 · 0 评论 -
【FF-A】第六章 Identification and Discovery
在Framework中,分区通过全局唯一的16位ID进行标识。这意味着在Framework中没有两个分区可以被分配相同的ID。这个ID在FF-A ABIs中用于识别分区,例如消息的发送方或接收方,共享内存的出借方或借用方。分区在初始化之前由其分区管理器分配一个ID。分区使用FFA_ID_GET接口(参见14.10 FFA_ID_GET)来发现它的ID。Hypervisor和SPM共同负责确保分配给分区的ID是全局唯一的。原创 2023-12-05 19:52:12 · 874 阅读 · 0 评论 -
【FF-A】第五章 Setup
Firmware Framework负责在冷启动和热启动期间进行分区和分区管理器设置。本章描述了框架在冷启动期间如何在主PE上初始化这些组件的执行上下文。有关框架在二级PE的冷启动或任何PE的热启动期间进行分区和分区管理器设置的角色,请参见20.3电源管理。在安全世界中,SPMD初始化SPMC(另请参见4.1 SPM架构)。如果它们位于相同的异常级别,则以IMPLEMENTATION DEFINED的方式进行初始化。原创 2023-12-05 16:23:14 · 808 阅读 · 0 评论 -
【FF-A】第四章 Concepts
SPM的责任分为两个组件:SPM调度器(SPMD)和SPM核心(SPMC)。这两个组件都可以访问整个物理地址空间,并且是受信任的计算基础的一部分。当无需区分这两个组件时,术语SPM被使用。这些组件的责任如下所示。SPMD 位于 EL3 中,以 AArch64 或 AArch32 执行状态运行。SPMC 可以与 SPMD 共存在 EL3 中,也可以位于相邻的异常级别,即 S-EL1 或 S-EL2。SPM 在启动时初始化 EL3 LSP,并在运行时促进它们与其他端点之间的通信。原创 2023-12-05 15:57:49 · 872 阅读 · 0 评论 -
【FF-A】第三章 Software architecture
固件框架由如图3.1所示的以下构建模块组成。以下子部分详细描述了这些构建模块。原创 2023-12-05 15:30:19 · 915 阅读 · 0 评论 -
【FF-A】第二章 Introduction
Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm® SMMU v3.2 架构[1]为安全流添加了对第2阶段翻译的支持,以补充在 Armv8.4 处理器状态下的安全 EL2 翻译制度。这些架构特性使得在安全状态下,彼此不信任的软件组件能够相互隔离。关于在安全状态下引入虚拟化扩展以及固件框架目标的更多理念可在名为《在安全世界使用虚拟化进行隔离》的白皮书[3]中找到。软件组件只能访问物理地址空间和系统资源的区域,例如 GIC 中对其正确运行必要的中断。原创 2023-12-05 15:21:35 · 327 阅读 · 0 评论 -
Arm PMU详解
本文档描述了在Neoverse N1中实现的不同性能监视单元(PMU)事件的行为。Neoverse N1具有六个可编程的32位计数器(计数器0-5),每个独立计数器都可以被编程为在本文档描述的PMU事件之一发生时进行计数。2.1 范围本文档提供了对Neoverse N1 PMU事件的高层描述。其中包含对体系结构行为和Neoverse N1微体系结构行为的参考,以澄清这些事件的描述。如需更完整的Arm体系结构描述,请参考Arm®体系结构参考手册Armv8-A。原创 2023-11-16 12:47:08 · 152 阅读 · 0 评论 -
Learn the architecture - Understanding Armv9-A trace
如果实现了Memory Tagging Extension(FEAT_MTE),则跟踪缓冲区单元对跟踪缓冲区的每次访问生成未经检查的访问。如果需要从PE执行的开始进行跟踪,在执行开始之前,调试器必须确保已经编程了任何相关的控制以允许跟踪。如果跟踪单元在禁止跟踪的区域启用时,该跟踪单元在PE离开禁止区域之前不生成任何跟踪。例如,如果拥有的异常级别是EL2,当从EL1进行跟踪时,跟踪缓冲区写入使用EL2的翻译表。由于PE和ETE跟踪单元之间的紧密连接,对于某些跟踪实现,跟踪单元可能会影响PE的性能。原创 2023-11-30 20:14:37 · 1019 阅读 · 0 评论 -
Learn the architecture - AArch64 self-hosted debug
处理器的调试逻辑负责生成调试事件。调试逻辑包括比较器和其他硬件逻辑,使调试事件如断点、单步执行和监视点成为可能。下图显示了Arm核心中的调试逻辑:调试逻辑完全与Arm核心集成,不是核心外部的实体。根据调试逻辑的配置,调试事件(如断点和监视点)可能引发调试异常或调试状态。让我们更详细地了解调试异常和调试状态。原创 2023-11-30 17:34:26 · 968 阅读 · 0 评论 -
Learn the architecture - Debugger usage on Armv8- A
由于它们是不同的体系结构,在这个异构平台上,Cortex-A72和Cortex-M4将不运行相同的程序,并且不具有相同的调试硬件。例如,如果您有一个四核的Cortex-A72处理器,并且您建立了对核心0的单核调试连接,那么调试器将仅连接到Cortex-A72核心0,可以写为Cortex-A72_0。例如,如果您有一个双核的Cortex-A72处理器和一个四核的Cortex-A53处理器,并且您建立了对两个处理器的SMP连接,调试器将同时连接到所有Cortex-A72和Cortex-A53核心。原创 2023-11-30 16:38:15 · 845 阅读 · 0 评论 -
Introducing the AMBA Coherent Hub Interface
CHI被设计用于可伸缩性,使您能够构建小型、中型或大型系统。这些系统使用多个组件,包括处理器集群、图形处理器、内存控制器、I/O桥接、PCI Express(PCIe)子系统以及互连本身。在本节中,我们介绍CHI的前三个问题的基本概念。原创 2023-11-28 18:34:39 · 928 阅读 · 0 评论 -
Learn the architecture - Memory Systems, Ordering, and Barriers
Armv8-A实现了一种弱排序的内存架构。该架构允许发出或观察不产生依赖关系的内存访问,并以与程序顺序规定的顺序不同的顺序完成。仅当以下条件成立时,才允许这些弱排序的内存行为:• 所定义的内存是Normal、Device-nGRE或DeviceGRE,或者• Device-nR访问跨越外设,如在Armv8-A内存模型指南中的Device内存和Normal内存主题中所描述的。内存重排序允许先进的处理器更有效地运行,如下图所示:在关联到Access 1的写入完成之前,这两个读取访问都可能完成。原创 2023-11-28 21:20:49 · 882 阅读 · 0 评论 -
Learn the architecture - A64 Instruction Set Architecture
作为开发者,你可能在日常工作中无需直接编写汇编语言。然而,在某些领域,如第一阶段引导软件或一些低级内核活动中,汇编语言仍然非常重要。即使你不直接编写汇编代码,了解指令集的功能以及编译器如何利用这些指令,可以帮助你编写更高效的代码。这也有助于理解编译器的输出,在调试时会很有用。原创 2023-11-30 00:04:07 · 867 阅读 · 0 评论 -
Learn the architecture - Before debugging on Armv8-A
我们将描述外部和自托管调试,以及侵入式和非侵入式调试的区别。我们仅提供概述,并不详细说明如何编程Armv8-A处理器以使用任何特定类型的调试。外部调试发生在对被调试处理器外部的调试器。例如,如果在主机机器上运行的调试器正在调试一个位于单独开发板上的Armv8-A处理器,那么就正在进行外部调试。另一个外部调试的例子是在一个处理器上运行的调试器调试同一SoC上的另一个处理器。通常,在芯片验证和引导期间或在裸机环境中使用外部调试。原创 2023-11-30 00:50:46 · 901 阅读 · 0 评论 -
使用 Arm IP 进行 SoC 低功耗设计
典型的片上系统 (SoC) 由 CPU、存储器接口、外围接口和其他特定于应用的 IP(例如用于相机传感器接口的 MIPI CSI-2)组成。因此,必须实施低功耗设计,以便为 SoC 提供高效供电,同时又不影响性能和可扩展性。在此 SoC 设计中实现的旨在降低静态和动态功耗的一些常用低功耗设计技术包括:时钟门控电源门控通过电源门控实现逻辑和内存保留在本文中,我们将首先回顾低功耗技术,然后我们将研究用于 SoC 设计的低功耗设计架构,之后我们将重点讨论使用 LP 互连和电源实现 LP(低功耗)设计。原创 2023-11-25 18:48:18 · 839 阅读 · 0 评论 -
内存系统资源划分和监控(MPAM)软件指南
resctrl是Linux内核的一个功能,可以配置和控制Arm的MPAM和Intel的RDT。拓扑结构以资源在系统中的位置和MSC与其管理的资源之间的关系的形式表示。尽管 MPAM 提供了资源分区控制功能,但在云工作负载共存的情况下,需要一种系统化的方法来实现高质量的资源 QoS。通过高质量的基于 MPAM 的解决方案,可以在平均 CPU 利用率上实现显著的改进,并转化为能源效率的增益。有关A-profile架构的固件数据中MSC的附录B,请参见《内存系统资源划分和监控(MPAM)》的《MSC固件数据》。原创 2023-11-26 16:23:32 · 917 阅读 · 0 评论 -
Arm电源控制系统架构
SCP 固件直接管理许多低级信号将是耗时和昂贵的,就处理器运行时间、中断输入和系统控制输出而言。这可能导致需要以更高频率运行 SCP 核心,或在电源敏感区域选择更高性能的核心。这也会对电源模式变化的响应产生不利影响,因为中断延迟和冲突处理任务。为了管理这种情况,PCSA 使用硬件抽象,包括电源策略单元(PPU)。SCP 固件根据系统要求为电源域做出策略决策,但将低级管理委托给 PPU。每个域都有自己的 PPU。原创 2023-11-27 10:26:25 · 966 阅读 · 0 评论 -
Arm事务内存扩展概述
在内存访问和代码执行中,原子性发生在系统上一个观察者的操作在操作完成之前不能被另一个观察者中断或看到的情况下。原子内存访问通常用于关键代码段。在关键代码段中,代码必须在没有任何外部中断的情况下执行。在原子操作中,任何外部观察者都不能看到原子操作的任何部分状态。外部观察者只能看到先前的状态或最终状态。原子访问通常使用锁原语进行保护,以创建一个关键代码段。这些锁机制通常基于旋转锁或基于互斥体的代码段,以强制执行关键路径上的锁。这些机制过于保守,可能会成为并行处理系统性能的限制。这是因为它们可能会阻止未专门访原创 2023-11-27 08:59:09 · 904 阅读 · 0 评论 -
Arm通用中断控制器v3和v4的LPI
ITS处理将消息转换为可以传递到连接的核心的INTID。物理LPI被组合在一起形成集合。集合中的所有LPI都路由到相同的重新分发器。软件将LPI分配给集合,使其能够有效地将中断从一个处理元素移动到另一个处理元素。ITS使用三种类型的表来处理LPI的转换和路由。原创 2023-11-26 23:57:30 · 860 阅读 · 0 评论 -
LearnTheArchitecture-MemoryManagement
使用虚拟地址的好处是它允许管理软件,例如操作系统 (OS),控制呈现给软件的内存视图。 操作系统可以控制哪些内存是可见的、该内存可见的虚拟地址以及允许对该内存进行哪些访问。 这允许操作系统沙盒应用程序(对另一个应用程序隐藏一个应用程序的资源)并提供对底层硬件的抽象。使用虚拟地址的一个好处是,操作系统可以将多个碎片化的内存物理区域作为单个、连续的虚拟地址空间呈现给应用程序。虚拟地址也有利于软件开发人员,他们在编写应用程序时不会知道系统的确切内存地址。 使用虚拟地址,软件开发人员无需关心物理内存。 应用原创 2023-11-28 00:17:22 · 947 阅读 · 0 评论 -
Armv8-A memory model guide
本文介绍了 Armv8-A 中的内存模型。 它首先解释描述内存的属性来自哪里以及它们如何分配给内存区域。 然后介绍可用的不同属性并解释内存排序的基础知识。此信息对于开发低级代码(如引导代码或驱动程序)的任何人都很有用。 它与编写代码来设置或管理内存管理单元 (MMU) 的任何人都特别相关。#### 2 内存模型是什么,为什么需要它?内存模型是一种组织和定义记忆行为的方式。 它提供了一种结构和一组规则,供您在配置如何在系统中访问和使用地址或地址区域时遵循。内存模型提供了可以应用于地址的属性,它定原创 2023-11-28 00:16:21 · 1053 阅读 · 0 评论 -
Memory Management Examples
在ARMV8-aarch64的系统中,有如下Translation regimes,而我们今天就以`Secure EL3 translation regime`为例>Secure EL1&0 translation regime, when EL2 is disabledNon-secure EL1&0 translation regime, when EL2 is disabledSecure EL1&0 translation regime, when EL2 is enabledNon-sec原创 2023-11-28 00:15:19 · 823 阅读 · 0 评论 -
Generic Timer
系统计数器是一个永远在线的设备,它提供一个固定频率递增的系统计数。系统计数值被广播到系统中的所有核心,让核心共同了解时间的流逝。系统计数值的宽度在 56 位到 64 位之间,频率通常在 1MHz 到 50MHz 的范围内。注意:通用计时器仅测量时间的流逝。它不报告时间或日期。通常,SoC 还包含用于时间和日期的实时时钟 (RTC)。每个内核都有一组定时器。这些定时器是比较器,与系统计数器提供的广播系统计数进行比较。软件可以配置定时器以在未来在设定点产生中断或事件。软件还可以使用系统计数来添加时间戳,原创 2023-11-28 00:12:42 · 917 阅读 · 0 评论 -
Understanding the Armv8.x extensions
- Advanced Single Instruction Multiple Data (SIMD) complex number support (AArch32 and AArch64)- Improved JavaScript data type conversion support (AArch32 and AArch64)- A change to the memory consistency model (AArch64)- ID mechanism support for larger原创 2023-11-28 00:11:50 · 888 阅读 · 0 评论 -
GICv3_v4_overview
GIC 分为不同类型的中断源:- Shared Peripheral Interrupt (SPI) : 共享中断- Private Peripheral Interrupt (PPI) : 私有中断- Software Generated Interrupt (SGI) : 软件产生中断- Locality-specific Peripheral Interrupt (LPI)每个中断源都由一个 ID 号标识,称为 INTID。 前面列表中介绍的中断类型就是根据 INTID 的范围定义的:原创 2023-11-28 00:09:52 · 808 阅读 · 0 评论 -
ARM异常模型
在讲解Armv8-A异常模型的细节之前,我们先来介绍一下特权的概念。 现代软件期望被分成不同的模块,每个模块对系统和处理器资源的访问级别不同。 这方面的一个例子是操作系统内核(具有对系统资源的高级访问权限)和用户应用程序访问呢的系统资源是有限的。Armv8-A 通过实现不同级别的权限来实现这种拆分。 当前权限级别只能在处理器接受或从异常中返回时更改。 因此,这些特权级别在 Armv8-A 架构中被称为异常级别。 每个异常级别都有编号,特权级别越高,编号越大。如下图所示,异常级别称为 EL,其中原创 2023-11-28 00:08:46 · 910 阅读 · 0 评论