前言

最近在学习 ARM Cortex‑A7 裸机开发,第一天接触大量架构名词:寄存器、异常向量表、MMU、Cache、NOR/NAND Flash。

1. ARM 处理器工作模式有几种?

Cortex‑A7 (ARMv7‑A 架构) 一共9 种工作模式

  1. USR 用户模式:非特权模式,普通应用程序运行模式,不能直接访问硬件资源

  2. SVC 管理模式:特权模式,复位、系统调用进入,操作系统内核常用

  3. FIQ 快速中断模式:高速中断处理,拥有独立备份寄存器,中断响应更快

  4. IRQ 普通中断模式:处理普通外设中断

  5. ABT 中止模式:内存访问出错(预取 / 数据访问异常)进入

  6. UND 未定义指令模式:执行非法、未识别指令进入

  7. SYS 系统模式:特权模式,和用户模式共用寄存器,运行操作系统特权任务

  8. MON 监控模式:安全扩展 TrustZone 使用

  9. HYP 超级监视模式:虚拟化扩展,用于虚拟机

只有 USR 是非特权模式,其余 8 种全部为特权模式,可以访问全部硬件资源。模式切换可以通过异常、软件指令完成,用户模式不能直接切换特权模式。

2. Cortex‑A7 内核有多少个寄存器?

Cortex‑A7 内核总共有 37 个 32 位寄存器

  • 31 个通用寄存器(含分组 banked 寄存器,不同模式下部分寄存器是独有的)

  • 6 个状态寄存器:1 个 CPSR,5 个 SPSR(每种异常模式对应一份 SPSR,用户 / 系统模式没有 SPSR)

不同工作模式下,R8‑R14 会发生寄存器分组(banked),进入对应模式访问的是该模式独有的物理寄存器。

3. Cortex‑A7 内核有多少个通用寄存器?PC、LR、SP 通用寄存器作用?

  • 基础通用寄存器 R0‑R15,共16 个逻辑通用寄存器,不同模式下物理寄存器会发生切换。

寄存器

别名

功能说明

R0‑R12

通用数据寄存器

用来临时存放运算数据,R0‑R3 经常用于函数传参

R13

SP (Stack Pointer) 栈指针

管理栈空间;栈遵循先进后出,后进先出;出栈:从 SP 指向位置取数据,SP++,SP 永远指向栈顶位置

R14

LR (Link Register) 链接寄存器

保存函数返回地址;发生异常时保存异常返回地址

R15

PC (Program Counter) 程序计数器

程序指针,指向当前正在执行指令的下一条指令地址,修改 PC 就实现程序跳转

栈:ARM 栈用来保存函数局部变量、寄存器现场,SP 寄存器全程维护栈顶位置。

4. CPSR 寄存器和 SPSR 寄存器作用?

  1. CPSR(Current Program Status Register 当前程序状态寄存器) 全程有效,保存 CPU 当前运行状态:

  • N/Z/C/V:运算条件标志位(负数、零、进位、溢出)

  • M [4:0]:处理器模式位,决定 CPU 处于 9 种模式的哪一种

  • I/F:中断屏蔽位,开关 IRQ、FIQ 中断

  • T/J:指令集状态位,ARM/Thumb 模式切换。

  1. SPSR(Saved Program Status Register 备份程序状态寄存器)

用户模式、系统模式没有 SPSR。 当发生异常的时候,硬件自动把进入异常之前那一刻的CPSR完整复制保存到该异常模式的 SPSR 中;异常返回时,再把 SPSR 写回 CPSR,恢复原来处理器状态。简单说:SPSR 是 CPSR 的异常快照备份

5. 什么是 MMU?

MMU(Memory Management Unit,内存管理单元) 作用:完成虚拟地址 ↔ 物理地址转换,依靠页表完成映射;同时做内存访问权限检查、内存保护。

  • 裸机开发:关闭 MMU,程序直接操作物理地址

  • Linux 操作系统 / 驱动开发:必须打开 MMU,每个进程拥有独立 4GB 虚拟地址空间。

判断芯片能不能跑完整 Linux 系统,一个关键点就是芯片内核是否带有 MMU 单元。

6. 什么是 CACHE?

Cache:高速缓存,CPU 内核和 DDR 内存之间的高速小容量存储器,速度远快于 DDR 内存。 分为:

  • I‑Cache:指令缓存,缓存常用指令

  • D‑Cache:数据缓存,缓存读写数据。

DDR 内存速度慢,CPU 频繁访问内存效率低;把经常访问指令、数据放到 Cache,CPU 直接读取 Cache,减少访问 DDR 次数,大幅提升程序运行速度。裸机开发一般打开 I‑Cache,关闭 D‑Cache。

7. 冯・诺依曼架构和哈佛架构的区别?

  1. 冯・诺依曼架构:指令、数据共用同一块存储空间、同一套总线。程序指令和数据放在同一个内存。Cortex‑A7 属于冯诺依曼架构(内部拥有 Cache 实现哈佛特性)。

  2. 哈佛架构:指令存储器、数据存储器相互独立,分开存储、分开总线;取指令和读写数据可以并行操作,常见于 Cortex‑M 单片机内核。

8. 异常处理流程?

异常包含复位、IRQ 中断、FIQ 中断、未定义指令、预取中止、数据中止等。

硬件自动完成步骤(CPU 硬件自动执行)

  1. 将发生异常前的CPSR保存到对应异常模式的SPSR

  2. 将异常返回地址保存到异常模式的LR链接寄存器;

  3. 修改 CPSR 模式位,切换 CPU 进入对应异常特权模式;同时屏蔽 IRQ/FIQ 中断;

  4. 强制 PC 跳转到异常向量表对应的偏移地址,向量表里存放跳转指令,跳转到异常服务函数。

软件异常处理程序要做的事

  1. 保存现场:把 R0‑R12 等通用寄存器压入该模式的栈(SP 指向栈);

  2. 执行异常服务业务逻辑;

  3. 恢复寄存器现场;

  4. 异常返回,把 SPSR 恢复回 CPSR,LR 调整后赋值给 PC 回到被打断的代码继续运行。

异常向量表本质是数组,数组存放跳转到异常服务函数的指令。中断向量表存放中断服务函数入口地址。

9. IMX6ULL 芯片所搭载的内核版本?

NXP i.MX6ULL 芯片搭载 单核 ARM Cortex‑A7 内核,最高主频可达 900Mhz,带 MMU,支持 Linux 系统运行。

10. Cortex‑A7 使用的汇编指令集版本?

Cortex‑A7 属于 ARMv7‑A 指令集架构版本,支持 ARM32 指令集 + Thumb‑2 压缩指令集。

注意区分:内核名字 Cortex‑A7,指令集版本 ARMv7‑A;Cortex‑A53 是 ARMv8‑A。

11. nor flash 和 nand flash 区别?

对比项

NOR Flash

NAND Flash

寻址方式

字节寻址,每个字节都可以独立访问,带有地址、数据总线

块设备,以页 (512B/2KB) 读写,以块擦除

XIP 原地执行

✅支持,可以直接在 Flash 上面运行程序代码

❌不支持,代码需要拷贝到内存运行

读速度

随机读取速度快

顺序读写快,随机读慢

擦写速度

擦写慢

擦除、写入速度快

容量 & 成本

容量小,单位容量成本高

容量大,成本低,适合大容量存储

坏块

几乎没有坏块

天生存在坏块,需要 ECC 校验、坏块管理

典型用途

存放 Bootloader、固件启动代码

存放系统镜像、大量用户数据(eMMC、U 盘)

  • NOR Flash:适合跑启动代码;NAND Flash 适合存大量数据

  • 易失存储器:断电数据丢失,例如 DDR 内存;Flash 是非易失,断电数据保留。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐