文章目录
- 市场
- 应用领域
- 市占率
- 常见产品
- 架构
- 编程模型
- 运行状态
- 指令集
- 寄存器
- 非特权级别(usr模式)下不建议访问的指令与寄存器
- ABI
- 异常模型
- 特权级
- 异常种类
- 内存模型
- VMSA&MMU
- 内存一致性
- cache
- debug模型
- External Debug
- Self-hosted Debug
- Trace
- boot模型
- 虚拟化模型
- 安全模型
- 开发工具
- gcc toolchain & gdb
- qemu
- 常见开发环境(除qemu外)
- 软件开发
- 裸机(baremetal)
- RTOS
- Linux
- arm32-linux镜像
- arm32-linux boot 符号
- debug
- boot
- boot时的内存管理
- 架构相关代码
- 通用知识:如何新增一个架构
- 微架构
市场
应用领域
- 嵌入式
市占率
常见产品
架构
- 架构整体综述
编程模型
运行状态
armv6/v7 有两种执行状态,arm和thumb。//cpsr 的 T// 0:arm// 1:thumb// 应该reset 是 arm 状态// 异常时,cpsr 中的 T 被置位 0 , 也就是 进入arm state
指令集
- ARM&THUMB&VFP&SIMD指令集
- ARMv7/ARMv8/RV32/RV64指令集及寄存器对比
寄存器
- R0-R7 R8-R12 R13-R15 及其BANK寄存器
- CPSR
- SPSR 及其BANK寄存器
- CP15寄存器
非特权级别(usr模式)下不建议访问的指令与寄存器
// 指令集
mcr/mrc
cdp/ldc/stc
mcrr/mrrc
// 寄存器
协处理器寄存器
ABI
- arm abi : ATPCS
- ARM 汇编 调用约定ABI与汇编语法
异常模型
特权级
-
7种处理器模式(SVC/ABT/UND/IRQ/FIQ & USR/SYSTEM)
-
两种特权模式(usr模式非特权,其他6种模式特权)
异常种类
-
7种异常(reset/swi/data abort/prefetch abort/und/irq/fiq)
-
7种异常对应的5种处理器模式SVC/ABT/UND/IRQ/FIQ
-
(二) 5.1 硬件 内存访问异常
内存模型
- 内存模型总览
- 总览2
VMSA&MMU
-
(一) 内存管理发展历史及进程地址空间抽象
-
(二) 2.1硬件 MMU及其运行过程 总览
-
(二) 2.2 硬件 MMU及其运行过程 关键过程一 TLB
-
(二) 2.3 硬件 MMU及其运行过程 关键过程二 translation table walk
-
(二) 2.4 硬件 MMU及其运行过程 关键过程三 cache
-
(二) 2.5 硬件 MMU及其运行过程 关键过程四 DDR
-
arm-linux 内存管理之一级页表及二级页表
-
MMU运行过程中可能产生的异常
-
(二) 2.6 硬件 MMU的操作手册
-
(二) 3.1 硬件 CP15系统控制协处理器的操作手册
-
(二) 3.2 硬件 CP15系统控制协处理器的寄存器描述
内存一致性
- 内存一致性:A.缓存一致性 B.原子性 C.memory order(一致性模型)
- 缓存一致性
- 原子性
- memory order : 乱序和屏障1 : 总览 及 编译器内存屏障
- memory order : 乱序和屏障2 : UP单核需要处理的CPU乱序问题
- memory order : (二) 4.2 硬件 SMP-Consistency之内存顺序模型1
cache
-
高速缓存与一致性专栏索引
-
(二) 6.1 硬件 CACHE/WRITE BUFFER/TCM
-
cache 概念详解 & PoC & PoU & inner/outer cache
debug模型
- debug总述
- arm debug实现:coregisht
- coresight 组件
External Debug
- 通用知识 : JTAG的状态机&JTAG的TAP
- 通用知识 : JTAG状态机 的封装 : IR SCAN & DR SCAN
- 基于JTAG的 芯片DEBUG 文章整理
Self-hosted Debug
- BKPT指令及其异常处理
Trace
- ARM coresight 中的 trace数据输出源(DWT/ITM/ETM) & trace 数据interface TPIU(SWO/CLK_DATA)
boot模型
-
ARMv7 boot
-
嵌入式启动顺序 - uboot之前
-
嵌入式启动顺序 - uboot
虚拟化模型
- ARMv7 Virtualization硬件实现
- armv7 虚拟化软件:KVM
安全模型
- 通用知识: 安全硬件实现及软件实现
开发工具
gcc toolchain & gdb
- 交叉编译工具链的获取
- 我们能从一个ARM32编译器获取什么信息
- GDB 常用命令
qemu
-
qemu中的 Arm System emulator
-
qemu-system-arm中的virt开发板
-
编译qemu
常见开发环境(除qemu外)
- 开发环境
- 内核和文件系统的烧写和启动配置
软件开发
裸机(baremetal)
- qemu armv7 裸机开发
- ARMv7/ARMv8/RV32/RV64裸机编程中的区别
- 兼容ARMv7/ARMv8/RV32/RV64的一个裸机qemu工程
RTOS
Linux
arm32-linux镜像
- 各个镜像解读1&解读2
- 各个镜像执行结果
- uImage镜像或zImage被加载
- 一般不会直接加载 Image,如果想要直接加载Image,参考这里
arm32-linux boot 符号
-
uImage的入口符号
-
zImage的符号
-
Image中的符号
-
arm32-linux boot 符号总览
debug
- gdb调试qemu virt板 arm32 linux 各个过程
boot
- uboot引导内核 Load Address Entry Point
- uImage 的 入口符号地址
- 内核镜像解析
- 内核启动流程
boot时的内存管理
- RISC 架构 linux boot 临时页表 对比 ARM32 ARM64 RV32 RV64
架构相关代码
-
arch/arm中的目录
-
linux arch 提供的函数与宏
-
arch/arm中的页表 相关函数
通用知识:如何新增一个架构
- linux移植需要考虑什么
- 将 Linux 移植到新的处理器架构,第 1 部分:基础前言
- 将 Linux 移植到新的处理器架构,第 2 部分:早期代码
- 将 Linux 移植到新的处理器架构,第 3 部分:收尾
微架构
- 通用知识:cpu微架构解读
- arm32 下的 cortex-a7/cortex-a8/cortex-a9/cortex-a15/cortex-a17
- ARMv6架构下 各微架构的不同