一小时教你学会 ARM 架构 本文来自作者 刘盼 在 GitChat 上分享,「阅读原文」查看交流实录 编辑 | 奕迅 架构的演变历史 我们首先介绍 ARM Ltd,这里先说的是公司而不是架构。 我们现在已经对公司渊源和架构有了些了解,现在让我们进入 ARM 芯片的内部吧。 内核的工作原理 经典的ARM系统级芯片或所谓的SocC包含许多组件,其中只有一些直接源自ARM。 从根本上说,ARM是RISC架构,你可能会否认现在的ARM内核其实不属于RISC平台,但它们与RISC有很大的渊源,也保留了传统上与RISC架构相关的许多特性,例如大多数指令在一个周期内执行,寄存器集基本上是正交的 ADD r2, r3, r3, LSL #2 这是一个加法指令,提供一个作为第二输入运算对象的寄存器,再指定内联移动或循环运算应用到运算对象上,作为指令的一部分,这个指令可以理解为”r2等于r3加上r3 STRNEB r2, [r3, r4] 这是存储指令,只有在NE条件有效时才会执行操作,其次它是一个字节层面的存储,它将r2中最不重要的字节存储到r3加r4得到的内存位置上。
架构和ARM内核 ARM处理器与架构对应表 ARM核对应的时间表 5、ARM的特点 ARM 数据类型约定: Byte:8bits(1byte) ARM7:ARMv4架构 ARM9:ARMv5架构, ARM11:ARMv6架构, ARM-Cortex 所以看上去ARM7跟Cortex-M很像,因为他们都是MCU,但确是不同代不同架构的MCU(Cortex-M比ARM7高了三代!),所以性能也有很大的差距。 ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡;同时其哈佛架构避免了数据访问和取指的总线冲突。 指令结构 MIPS有32位和64位架构,ARM只有32位架构。
文章目录 一、ARM 内存模型 二、ARM 架构堆的实现 三、ARM 架构栈的实现 一、ARM 内存模型 ---- ARM 架构体系中 , CPU 直接访问内存 , 控制内存中的状态和数据 , 内存中映射外部设备 通过内存状态转换 , 告知内存已经读取完毕 , CPU 可以直接访问内存中内存块 B 中的数据 ; 所有的外设基本都有一块属于自己的内存 , 有的时在内存中映射的 , 有的自带内存 , 如显卡显存 ; 二、ARM 架构堆的实现 ---- 应用程序 向 系统 请求内存 , 系统通过系统调用 , 分配内存 , 内存分配完毕后 , 返回内存的首地址给应用程序 ; 申请完内存后 , 需要 free 释放内存 , 否则会造成泄漏 ; 三、ARM 架构栈的实现 ---- 如果参数小于等于 3 个 , 则只需要使用 R0 , R1, R2 这 3 个寄存器存放参数 , 这 3 个寄存器变相的称为了栈 ; 如果参数大于等于 4 个 , 则 R3 寄存器记录栈地址 ( 栈的起始位置 ) , 如下图所示 ; 在 ARM 中 , 栈指针只会 push 到寄存器中 , 但是不使用 ; 使用到栈中的参数时 , 会使用变量寄存器将栈地址保存起来
ARM 处理器家族 早起经典处理器 包括ARM7、ARM9、ARM11等,Cortex-A系列是它们的升级版 从ARM11之后就变成了Cortex系列 Cortex-M系列 控制 ARM的内核是基于RISC(精简指令集)体系结构的 SOC的概念 片上系统 指的是在单个芯片上集成一个完整的计算机系统,所谓完整的系统一般包括中央处理器(CPU)、存储器、以及外围电路等。 STM32F0/F1是指某一款SOC intel、ARM是指SOC里面的CPU 半导体厂商:意法半导体(ST) ---- ROM RAM ROM 只读存储器(read only memory),英文简称
这就是ARM这个名字的由来。 1990年11月27日,Acorn公司正式改组为ARM计算机公司。 ARM架构 CPU为一个具有特定功能的芯片,里面含有微指令集。 精简指令集主要代表是ARM架构,复杂指令集主要代表是x86架构。 image.png Cortex系列处理器是基于ARMv7架构的. 、Thumb指令集和新增的高性能紧凑型Thumb-2指令集。 参考 百度百科 关于ARM的内核架构
2004年Cortex系列的问世标志着架构模块化设计的开端,而2021年ARMv9的发布则带来了SVE2矢量扩展和机密计算等革命性特性。 一、ARM处理器架构剖析 1.1. 2.3 指令集演化 指令集 编码长度 性能密度比 典型应用场景 ARM 32-bit 1.0x 高性能关键代码段 Thumb 16-bit 0.8x 代码尺寸敏感场景 Thumb-2 16/32bit Cache: 512KB-2MB(共享式设计) 内存预取引擎:支持跨步/指针追踪模式 Cortex-M系列采用紧耦合内存(TCM)架构,实现确定性访问时序: 存储器类型 访问周期 典型容量 总线接口 《ARM 处理器架构的发展与应用研究》:论文对 ARM 处理器架构的发展历程进行了梳理,分析了不同阶段 ARM 架构的技术特点和创新之处。 《基于 ARM 架构的高性能嵌入式系统设计与实现》该论文聚焦于 ARM 架构在高性能嵌入式系统中的应用。 《深度解读 ARM 处理器架构的演进与未来趋势》 - 电子发烧友链接:电子发烧友网原文链接
架构的演变历史 我们首先介绍 ARM Ltd,这里先说的是公司而不是架构。ARM 的发展历史非常久远,超乎许多人的想象。 我们现在已经对公司渊源和架构有了些了解,现在让我们进入 ARM 芯片的内部吧。 内核的工作原理 经典的ARM系统级芯片或所谓的SocC包含许多组件,其中只有一些直接源自ARM。 从根本上说,ARM是RISC架构,你可能会否认现在的ARM内核其实不属于RISC平台,但它们与RISC有很大的渊源,也保留了传统上与RISC架构相关的许多特性,例如大多数指令在一个周期内执行,寄存器集基本上是正交的 ADD r2, r3, r3, LSL #2 这是一个加法指令,提供一个作为第二输入运算对象的寄存器,再指定内联移动或循环运算应用到运算对象上,作为指令的一部分,这个指令可以理解为”r2等于r3加上r3 STRNEB r2, [r3, r4] 这是存储指令,只有在NE条件有效时才会执行操作,其次它是一个字节层面的存储,它将r2中最不重要的字节存储到r3加r4得到的内存位置上。
ARM架构分为系统架构、安全架构、CPU架构。 CPU架构主要是指系统架构上的芯片实现。 安全架构主要是指PSA,前面介绍过。 请参考: ARM公司PSA平台架构介绍 系统架构包括: ARM Generic Interrupt Controller中断控制器分为 GICv2 、GICv3 、GICv4 版本对应不同系列架构。 IOMMU是指 输入输出内存管理分为 SMMUv2 、SMMUv3 版本。 AMBA 是指Advanced Microcontroller Bus Architecture片上总线。 从上图可以看出ARM现在主流的架构就是V7和V8两个系列,对应的有A、R、M分别对应应用处理器、实时工控处理器、微控制器。除此之外,ARM还有安全处理器系统。 前面有介绍。 从华为手机盾聊一下ARM公司的安全处理器 ARMv7 后ARM公司改革了以前的冗长的命名方法,统一用 Cortex 作为主名。 现在主流芯片使用的是V7、V8架构,下面一个图表显示出两者的异同。
文章目录 一、ARM 处理器工作模式 二、ARM 架构模型 一、ARM 处理器工作模式 ---- 参考 【嵌入式开发】ARM 处理器工作模式 及 修改方法 ( 处理器模式 | 设置处理器模式 | 程序状态字寄存器 CPSR SPSR | 模式设置代码编写 | 设置 svc 模式 ) 博客 , ARM 处理器有 7 种工作模式 ; ARM 处理器的 七种 工作模式 : 1.User ( 用户模式 usr ) : 普通的应用运行的模式 ; 2.FIQ ( 快速中断模式 fiq ) : 该模式下支持数据的高速传输 ; 3.IRQ ( 普通中断模式 irq ) : 该模式常用于处理普通的中断 ; 4.Supervisor ; 二、ARM 架构模型 ---- ARM 架构中寄存器数量很多 , 有 16 个 ; 另外多了 标志寄存器 CPSR , 程序状态寄存器 SPSR ; 程序状态寄存器 SPSR 在中断模式下使用 ; R0 ~ R3 这 4 个寄存器是参数寄存器 ; x86 架构中 , 参数传递都是通过堆栈传递的 ; ARM 架构中 , 如果参数小于 4 个参数 , 传输传递是通过寄存器传递的 , 如果大于等于
首先,是cpu的两大架构:ARM和X86。 第一个区别就是所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。 Intel和ARM处理器,前者使用复杂指令集(CISC),而后者使用精简指令集(RISC)。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。 而ARM在看到移动设备对64位计算的需求后,于2011年发布了ARMv8 64位架构,这是为了下一代ARM指令集架构工作若干年后的结晶。 序号 架构 特点 代表性的厂商 运营机构 发明时间 1 X86 性能高,速度快,兼容性好 英特尔,AMD 英特尔 1978年 2 ARM 成本低,低功耗 苹果,谷歌,IBM,华为 英国ARM公司 1983 英特尔和AMD的“专属”,在PC市场上独霸多年,地位不可撼动 2 ARM 在移动端和便捷设备上有着不可替代的优势 3 MIPS 在网关、机顶盒等市场上非常受欢迎 4 RISC-V 虽然出来不久,但在智能穿戴产品上的应用广泛
为了microsoft 365续期,搭建刷API的平台,需要 .NET Core 3.1,但是甲骨文的vps是ARM架构,按照微软的操作手动安装不成功,根据搜索结果整理安装过程。 e7c893c5-726a-40aa-8a13-7ae6f1e3ee4e/8ba7467756a3fb1778f02f1ca98ca1ee/aspnetcore-runtime-3.1.0-linux-arm64 原文链接:https://www.kudou.org/arm-linux-build-net.html
EQU 0x4b000080 ;DMA 2 Initial source DISRCC2 EQU 0x4b000084 ;DMA 2 Initial source control DIDST2 control DCON2 EQU 0x4b000090 ;DMA 2 Control DSTAT2 EQU 0x4b000094 ;DMA 2 Status DCSRC2 ;UART 2 FIFO control UMCON2 EQU 0x5000800c ;UART 2 Modem control UTRSTAT2 EQU 0x50008010 ;UART 2 FIFO status UMSTAT2 EQU 0x5000801c ;UART 2 Modem status UBRDIV2 EQU 0x50008028 ; *************************************************************************/ startup_head.s 作为头文件,定义了 ARM
内核信息 内核版本 内核版本 CPU架构 ubuntu 5.15.0-39-generic ARM 前置系统依赖 // 系统包依赖 $ sudo apt install -y \ alien
原生的Genymotion模拟器只支持x86架构,很多使用了.so文件的应用不支持x86架构,因此无法运行。如果想要运行,必须安装ARM转换包。 下载地址 http://pan.baidu.com/s/1sl1vhzJ 下载地址:http://pan.baidu.com/s/1pJ5YZl5 密码:w3ol 把genymotion arm translation 开机后把 ARM_Translation_Lollipop.zip (请勿解压)拖到模拟器中,自动安装。 方法及安装包来自二三接脚大神:http://23pin.logdown.com/posts/294446-genymotion-use-arm-translation-on-5x-image 5.0以下的使用方法 开机后把Genymotion-ARM-Translation 或者Genymotion-ARM-Translation_v1.1 (请勿解压)拖到模拟器中,自动安装。 完成后重启模拟器。
前言 腾讯TKEStack作为面向私有云业务场景的开源容器平台,应对的场景也会比较多样,比如国产服务器有一大阵营是基于arm架构的,那在国产化趋势下,客户的服务器架构可能会出现x86和arm混布在一起的情况 如何支持arm架构 简单来说,就是重新适配arm 架构:对于可执行文件,需要重新编译;对于容器镜像,需要重新构建。 2. linux/arm64 用来构建arm架构的镜像。 (2)构建流程里生成的容器镜像,镜像名严格按照架构信息打上后缀区分开来(app-amd64:v1 / app-arm64:v1),并逐个推送至镜像仓库后,再额外创建一个不带架构后缀的清单列表manifest
EQU 0x4b000080 ;DMA 2 Initial source DISRCC2 EQU 0x4b000084 ;DMA 2 Initial source control DIDST2 control DCON2 EQU 0x4b000090 ;DMA 2 Control DSTAT2 EQU 0x4b000094 ;DMA 2 Status DCSRC2 ;UART 2 FIFO control UMCON2 EQU 0x5000800c ;UART 2 Modem control UTRSTAT2 EQU 0x50008010 ;UART 2 FIFO status UMSTAT2 EQU 0x5000801c ;UART 2 Modem status UBRDIV2 EQU 0x50008028 ; *************************************************************************/ startup_head.s 作为头文件,定义了 ARM
【说在前面的话】 在前面的文章《【玩转Arm-2D】入门和移植从未如此简单》中,我们介绍了如何借助 cmsis-pack 快速的在 MDK 中部署 arm-2d。 【场景(scene)的数据结构和构成】 场景在 arm-2d 中以类 arm_2d_scene_t 来描述: /*! _2d_scene_t arm_2d_scene_t; struct arm_2d_scene_t { arm_2d_scene_t *ptNext; arm_2d_scene_t *ptScene = (arm_2d_scene_t *)malloc(sizeof(arm_2d_scene_t)); assert(NULL ! arm_2d_scene_t *ptScene = (arm_2d_scene_t *)malloc(sizeof(arm_2d_scene_t)); assert(NULL !
EQU 0x4b000080 ;DMA 2 Initial source DISRCC2 EQU 0x4b000084 ;DMA 2 Initial source control DIDST2 control DCON2 EQU 0x4b000090 ;DMA 2 Control DSTAT2 EQU 0x4b000094 ;DMA 2 Status DCSRC2 ;UART 2 FIFO control UMCON2 EQU 0x5000800c ;UART 2 Modem control UTRSTAT2 EQU 0x50008010 ;UART 2 FIFO status UMSTAT2 EQU 0x5000801c ;UART 2 Modem status UBRDIV2 EQU 0x50008028 ; EQU 0x51000024 ;Timer count buffer 2 TCMPB2 EQU 0x51000028 ;Timer compare buffer 2 TCNTO2 EQU
<6) | (2<<4); //设定GPH{2,3}为TXD[0]和RXD[0] rGPHUP = (1<<3) | (1<<2); //将GPH{2,3}的上拉电阻禁用 rUBRDIV0 EQU 0x4b000080 ;DMA 2 Initial source DISRCC2 EQU 0x4b000084 ;DMA 2 Initial source control DIDST2 control DCON2 EQU 0x4b000090 ;DMA 2 Control DSTAT2 EQU 0x4b000094 ;DMA 2 Status DCSRC2 ;UART 2 FIFO control UMCON2 EQU 0x5000800c ;UART 2 Modem control UTRSTAT2 EQU 0x50008010 ;UART 2 FIFO status UMSTAT2 EQU 0x5000801c ;UART 2 Modem status UBRDIV2 EQU 0x50008028 ;