第1部分- Linux ARM汇编-ARM技术变迁演进和ARMv8-a架构
第1部分- Linux ARM汇编ARM技术变迁
关于ARM版本
先来看下ARM版本如下图:
Tips:Cortex-A53同样是采取了ARMv8-A架构,能够支持32位的ARMv7代码和64位代码的AArch64执行状态。
ARM Cortex内核系列提供非常广泛的具有可扩展性的性能选项,设计人员有机会在多种选项中选择最适合自身应用的内核,而非千篇一律的采用同一方案。Cortex系列组合大体上分为三种类别:
- Cortex-A—面向性能密集型系统的应用处理器内核
- Cortex-R—面向实时应用的高性能内核
- Cortex-M—面向各类嵌入式应用的微控制器内核
In 2009 the ARM7 accounted for 55% of the processor shipments, with
all Cortex processors contributing only 1%.
By 2012 the ARM7 shipments had dropped to 36%, with the Cortex-M family shipments contributing 22%
每个核使用的ARM体系结构的版本如下图:
不同的体系结构有不同的指令集变化,但是都保持了向上兼容。每个体系结构有包含了不同的处理器型号,例如ARM7可能跨越不同的体系结构。
ARM技术变迁
ARMv8-A架构
- 新增一套64位的指令集,称作A64
- 支持现场32位指令集,成为A32和T32,就是以前的ARM和Thumb指令集
- 定义AArch64和AArch32两套运行环境,分别指向64位和32位指令集,软件可以在需要的时候进行切换。
- 在ARMv7安全扩展的基础上,新增了安全模型。
- 在ARMv7虚拟化扩展的基础上提供了完整的虚拟化框架,从硬件上支持虚拟化
典型嵌入式系统
编译器
目前常用的ARM编译环境有2种:
ARMASM: ARM公司的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM的规定,类似在X86中Intel的汇编编译器。
GNU: GNU工具的ARM版本,与ARMASM略有不同;
arm公司出的ARM编译器,包括以下几个:
- armclang: 编译 c ,c++, GNU assembly language的源代码,不能编译ARM汇编代码
- armasm: 只能编译 arm汇编代码
- armlink: 链接器,用来将目标代码,链接成可执行程序
- armar: 打包,将目标代码打包成一个库
- fromelf: 将可执行程序,转换为其他的镜像文件
字节新约定
字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。
半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。
字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。
ARM 采用的是32位架构.
ARM 约定:
Byte : 8 bits
Halfword :16 bits (2 byte)
Word : 32 bits (4 byte)
异常等级
软件运行异常级别:
EL0: 普通用户应用程序
EL1: 操作系统内核通常被描述为特权
EL2: 管理程序
EL3: 低级固件,包括安全监视器