ARM①——模式&环境调试
ARM①——模式&环境调试
一、架构
ARM架构
1、A
该架构的芯片,性能高
2、R
该架构的芯片,满足实时性要求的场景
3、M
该架构的芯片,规模较小,主要用于控制操作等
X86架构
AMD、英特尔等PC用的芯片采用X86架构
CPU/SOC
soc是cpu加上其他各种集成模块组合到一起。
对比维度 CPU (Central Processing Unit) 中央处理器 SoC (System on a Chip) 系统级芯片 本质定位 专注于 “数据运算与指令执行” 的单一核心部件 集成 “完整功能系统” 的超大规模芯片 核心功能 仅负责逻辑运算、数据处理、指令调度(如算术计算、程序控制) 覆盖 “计算 + 存储 + 外设 + 通信” 全流程,可独立完成系统任务 集成范围 仅包含运算器(ALU)、控制器、寄存器等核心模块(部分现代 CPU 会集成缓存,但无其他外设) 必含 CPU,同时集成 GPU、内存(RAM)、存储(ROM/Flash)、蓝牙 / WiFi 芯片、USB 控制器、传感器接口等 独立性 无法单独工作,需依赖外部芯片(如北桥 / 南桥、显卡、内存)才能构成完整系统 可独立工作,外接电源和简单外设(如屏幕、按键)即可实现设备功能
二、嵌入式
软件
应用层:
C++、Qt、进线程IO、网络编程等
中间件:
linux、C
底层:
stm32 + FreeRTOS
ARM-A + linux(系统移植、驱动、性能优化等)
硬件
电路板设计、PCB、EDA等
CPU:运算器、控制器、寄存器
存储:三级存储,高速缓存(cache)
输入:鼠标、键盘等
输出:显示器等
总线:数据传输的通道
- 单总线 哈佛结构
- 多总线 冯诺依曼结构
效率
- 多总线
- 集成度
- 三级流水线
三、ARM指令
ARM指令集 32位
Thumb指令集 16位
工作模式
模式名称 英文缩写 核心用途 主要特点 用户模式 User 普通应用程序运行的模式,是权限最低的模式 无 SPSR 寄存器;不能直接切换到其他模式(需通过异常触发);多数应用程序在此模式执行 系统模式 System 操作系统内核运行的特权模式,用于执行系统级任务 与用户模式共享相同的寄存器集;有 SPSR(但通常不用,因不通过异常进入);拥有最高权限 超级用户模式 SVC(Supervisor) 处理软件中断(如系统调用 SWI指令)和上电复位后的初始模式异常模式之一,有专属 SPSR(SPSR_SVC);用于操作系统内核处理服务请求 中断请求模式(低优先级) IRQ 处理普通中断(如外设中断:键盘、定时器、UART 等) 异常模式之一,有专属 SPSR(SPSR_IRQ);进入时自动屏蔽新的 IRQ 中断(I 位 = 1) 快速中断请求模式(高优先级) FIQ 处理需要快速响应的高优先级中断(如高速数据传输:DMA、图像传感器) 异常模式之一,有专属 SPSR(SPSR_FIQ);寄存器更多(8 个私有寄存器),响应速度更快;进入时屏蔽 IRQ 和 FIQ 中断(I=1,F=1) 中止模式 ABT(Abort) 处理内存访问异常(如数据访问中止、指令预取中止:非法地址、权限错误) 异常模式之一,有专属 SPSR(SPSR_ABT);用于操作系统处理内存错误(如段错误) 未定义指令模式 UND(Undef) 处理未定义的指令(如执行处理器不支持的指令) 异常模式之一,有专属 SPSR(SPSR_UND);用于软件模拟未实现的指令(如协处理器指令) Monitor 模式 Monitor 1. 处理安全监控调用(SMC 指令),实现安全世界与非安全世界的切换2. 管理两个世界的资源隔离(如内存、外设的安全权限)3. 执行安全相关的监控任务(如安全异常处理) 1. 仅存在于支持 TrustZone 的处理器(如 Cortex-A9)中2. 拥有独立的 SPSR(SPSR_mon),用于保存切换前的状态3. 只能通过特定方式进入:- 非安全世界执行 SMC(Secure Monitor Call)指令- 安全世界或非安全世界发生的安全相关异常4. 权限高于普通模式,是连接两个世界的 “安全网关”
- 除USER、SYSTEM模式外,其他模式都算异常模式
- System模式使用user模式寄存器集
- CPSR——所有模式下共用的唯一程序状态寄存器,保存切换状态前的状态
- SPSR——异常状态下的状态备份寄存器,USER和SYSTEM下没有该寄存器
- R13 SP 栈顶寄存器,存栈顶地址
- R14 LR 保存跳转地址
- R15 PC 保存当前指令的地址的寄存器(程序计数寄存器)
- R0-R12 通用寄存器
- cortex A 一共有40个寄存器,其余的37个寄存器
汇编指令
- 了解计算机的运行规律
- 逆向工程(反向编译,二进制==>汇编)
环境配置
交叉编译环境 arm-linux-gcc
ARM 与开发主机(如 x86)的指令集不兼容,必须借助交叉编译工具链(如
arm-linux-gcc),才能在性能更强的开发主机上,生成符合 ARM 指令集、能在 ARM 设备运行的代码;初步调试
【环境搭建 - 安装 arm-linux-gcc 和虚拟开发板】
1、解压 gcc-4.6.4.tar.xz 到 主目录(家目录:/home/hqyj/ 根据自己Ubuntu命名) tar -xvf gcc-4.6.4.tar.xz
2、确认解压完成,可以进入~/gcc-4.6.4/bin 下面看到 arm-linux-gcc 命令cd ~/gcc-4.6.4/bin pwd 获取绝对路径 /home/hqyj/gcc-4.6.4/bin
3、修改配置文件~/.bashrc,添加环境变量
(1).vi ~/.bashrc ,在最后一行添加 路径消息
export PATH=$PATH:/home/hqyj/gcc-4.6.4/bin
(2).保存退出后:wq,执行 source ~/.bashrc
(3).关闭所有终端
4、安装虚拟开发板 qemu-system-arm:
sudo apt-get install qemu-system在 ~/.bashrc 最后一行添加: export LC_ALL=C
5、调试
arm-linux-gcc tset.S -o test.o -c -g arm-linxu-ld test.o -o test.elf -Ttext=0x00000000 qemu-system-arm -machine xilinx-zynq-a9 -m 256M -serial stdio -kernel test.elf -S -s【 调试端 - 看执行结果】{
再开一个终端,在另外一个终端 执行下面命令:
arm-none-linux-gnueabi-gdb elf文件路径
进入GDB后,执行
(gdb) target remote 127.0.0.1:1234
(gdb) s
l 查看代码
b 设置断点
s 单步调试
c 继续运行
p 查看变量值 p #r0 p/x val 十六进制
x 查看地址的值 x/4 0x10 从0x10开始连续4个字节
CSPR
1. CPSR 寄存器的位域布局
将 32 位寄存器按功能划分为多个位段,从高位(31 位)到低位(0 位)依次包括:
- 条件标志位(
N、Z、C、V);Q、J、DNM(Do Not Modify,禁止修改)、GE[3:0]、IT[7:2];- 控制位(
E、A、I、F、T);- 模式位
M[4:0]。2. 各主要位域的功能说明
- 条件位(
N、Z、C、V):由 ALU(算术逻辑单元)运算结果自动设置,用于 “条件指令执行”(如BEQ、BNE)的判断:
N(Negative):运算结果为负数时置 1;Z(Zero):运算结果为 0 时置 1;C(Carry/Borrow):加法有进位或减法有借位时置 1;V(Overflow):运算发生有符号溢出时置 1。- 特殊功能位:
Q位:仅 ARM v5TE-J 架构支持,指示 “饱和运算” 状态;J位:仅 ARM v5TE-J 架构支持,用于标识 “Jazelle 状态”(Java 字节码执行模式);GE[3:0]:执行 SIMD 指令时有效,表示 “大于或等于” 的比较结果;IT[7:2]:Thumb-2 指令集的 “IF…THEN” 条件执行状态位。- 控制位:
E:大小端(字节序)控制位;A:禁止 “不精确数据异常”(A=1时禁止);I/F:中断禁止位(I=1禁止 IRQ 普通中断,F=1禁止 FIQ 快速中断);T:指令集状态位(T=0为 ARM 状态,执行 32 位 ARM 指令;T=1为 Thumb/ThumbEE 状态,执行 16/32 位缩略指令)。- 模式位
M[4:0]:定义处理器运行模式(如10000为用户模式、10001为 FIQ 模式、10011为 SVC 模式等),不同模式对应不同的权限和寄存器可见性。3. CPSR/SPSR 的操作指令
MRS指令:将 CPSR(或 SPSR)的值读取到通用寄存器,例:mrs r0, CPSR(把 CPSR 的值读入r0)。MSR指令:将通用寄存器的值写入 CPSR(或 SPSR),例:msr CPSR, r0(把r0的值写入 CPSR)。
查看4道真题和解析