文章目录
- ARM架构和处理器
- 一些常用工具
- ARM软件工具链
- ARM寄存器,处理器模式和指令集
ARM架构和处理器
- ARM系列处理器:
- 各个系列区别与功能演变
- 相关术语介绍
(1)流水线:CPU运转机制:取指令(F) —> 译指令 (D)—> 执行(E)三级流水,还有多级流水
(2)DSP:数据信号处理
(3)Jazelle :ARM里针对JAVA的编程模型
(4)ThumbEE:Thumb指令(辅助ARM指令的16位指令)的环境变量
(5)Thumb-2:(16位和32位指令并存)
(6)TrustZone:ARM架构中的安全架构
(7)VFP:Vector Floating-Point(矢量浮点运算机制)
(8)Advanced SIMD(NEON)
(9)Lararge Physical Address Extension(LPAE)
(10)Virtualization
(11)Big LITTLE :例如主处理器:A15,协处理器:A8,解决能耗问题 - ARM v7-A系列关键技术点
(1)32位 RISC 处理器,有16个32位可见寄存器
(2) 哈弗结构(不是普林斯顿结构)(指令和数据分开存储)
(3)Thumb-2指令支持
(4)VFP 和 NEON 可选
(5)向后兼容
(6)4GB虚拟地址大小和最小4GB物理地址(4GB寻址)
(7)大小端数据访问支持
一些常用工具
- QEMU
QEMU 是一套由Fabrice BElla让的所编写的模拟处理器的自由软件。它类似与Brochs,PearPC,但其具有某些后两者都不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度 - BusyBox
BusyBox是一个集成了一百多个常用linux命令和工具的软件。别称为linux工具中的瑞士军刀。它集成压缩理论linux的许多工具和命令,也包含了Andriod系统自带的Sheel。 - Scratchbox
Scratchbox是一个帮助嵌入式Linux跨平台编译工具的集合,其主要目的是使得嵌入式Linux应用程序开发更加容易,他也提供了完整的集成工具链以用来跨平台编译集成一个Linux发布版。 - U-Boot
U-Boot,大名鼎鼎的开源BootLoader - UEFI and Tianocore
UEFI 统一可扩展部件接口
ARM软件工具链
GNU-包含gcc and ARM-包含 armcc
用工具链生成镜像(Image)过程如下:
- GNU工具链可以用来开发内核也可以用来开发应用程序,包含如下组件:
– GNU make
– GNU Compiler Collection (GCC)
– GNU binutils linker,assembler and other object/library manipulation tools
– GNU Debugger(GDB)
– GNU build system (autotools)
– GNU C library (glibc or eglibc) - Ubuntu 安装标准工具链
sudo apt-get install gcc g+±doc - Ubuntu 安装交叉工具链:
sudo apt-get install gcc-arm-linux-gnueabi
ARM寄存器,处理器模式和指令集
- CPU组成
- 处理器模式
Cortex-A系列有:ARM架构有9种处理器模式,8种特权模式,一种非特权模式即用户模式 - 其中User模式称为非特权模式,而其他8种称为特权模式
- Cortex-A系列的寄存器
- 用户模式:R0-R12 13个通用寄存器 4个特殊寄存器,
FIQ等特权模式下:R0-R7寄存器与用户模式的R0-R7寄存器共享(其他模式类似(根据上图可以得出) - 寄存器总结:
(1)R0 - R12 通用寄存器,方通用数据,32BIT
(2)各个模式的 R0 -R12 与 USER 模式是共享的(处理FIQ,R8 - R12),PC,CPSR 共享的
(3)USER模式没有SPSR
解释:
(1)SP --栈指针(存储栈地址)
(2)LR --链接寄存器,存储子程序返回地址
(3)PC --程序计数器
(4)APSR/CPSR --应用程序状态寄存器、当前程序状态寄存器
(5)SPSR --已存储程序状态寄存器 - 举例sample:
(1)程序返回,其实就是MOV PC LR
(2)跳转 BL - CPST 指令格式:
- 其中:
N — ALU负数
Z — ALU零位
C — ALU进位操作
V — ALU操作溢出
Q — 累积饱和 instructions
J — 是否 Jaelle 状态
GE[3:0] — SIMD 指令使用
IT[7:2] — Thumb-2 指令的 if ,then 条件执行
E — 操作存储的字节顺序
A — 是否 disable 异步 abort
I — disables IRQ 是否禁用IRQ
F — disables FIQ,是否禁用FIQ - 小端存储和大端存储
(1)大端存储:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。
(2)小端存储:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示 - 小端:较高的有效字节存放在较高的存储器地址,较低的有效字节存放在较低的存储器地址。
大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。 - 指令流水线Pipeline
- 扩展到5级流水
分解指令过程:
(1)指令预读取:决定从内存哪儿去取指令 PreFetch
(2)指令读取:从内存系统中读取指令 Fetch
(3)指令译码:解读指令并且生成控制信号
(4)寄存器读取:提供寄存器的值给操作单元执行
(5)分配:分配指令给执行单元
(6)执行:实际的ALU单元处理
(7)内存访问:数据的存取
(8)寄存器回写:更新运行结果到寄存器