专题02-我从内部看ARM
核心理论
主目录
CPU执行顺序
系统加电或复位后,所有的CPU通常都从CPU制造商预先安排地址开始执行。比如s3c2410在复位后从地址0x00000000处开始执行。而嵌入式系统则将固态存储设备(FLASH)安排在这个地址上,而bootloader程序又安排在固态存储器的最前端,这样就能保证在系统加电后,CPU首先执行bootloader程序。
Bootloader启动流程
Bootloader的启动过程可分为单阶段和多阶段两种,通常多阶段的bootloader具有更复杂的功能,更好的可移植性。从固态存储设备上启动的bootloader大多采用两阶段,即启动过程可以分为stag1和stag2;stage1完成初始化硬件,为stage2准备内存空间,并将stage2复制到内存中,设置堆栈,然后跳转到stage2.
Uboot源代码下载地址:ftp://ftp.denx.de/pub/u-boot/
主目录
ARM家族大检阅
以ARM为花蕊,以ARM9,ARM11,Cortex-A8,s3c2440,s3c6410,s5pv210,ARMv6,ARMv7为花瓣。
芯片 s3c2440 s3c6410 s5pv210
ARM核 ARM9 ARM11 Cortex-A8
指令架构 ARMv4 ARMv6 ARMv7
芯片和ARM核关系:芯片手册:产品概览章节:块图(包含关系)
ARM核和指令架构关系:核手册:关键字:ARMv4|ARMv6|ARMv7(包含关系,向下兼容)
ARM核演变图:ARM经典、Cortex-M系列、Cortex-R系列、Cortex-A系列。
ARM处理器工作模式
ARM体系结构参考手册:Programmers’ Model:Processor modes
Linux用户程序运行在usr模式、Linux内核运行在svc模式下!
ARM寄存器详解
上面的表不可能凭空产生,那么上面表是怎么来的呢?也就是ARM如何获取ARM寄存器信息呢?参考《ARM体系结构参考手册》:程序员模型:寄存器。
ARM寄存器有31个通用寄存器:
ARM寄存器有6个状态寄存器:
ARM寻址方式
什么是寻址方式?
处理器根据指令信息获取所需操作数的方式。
立即数寻址:add r0, r0, #0x3f ;*r0 = *r0+0x3f
寄存器寻址:add r0, r0, r1 ;*r0 = *r0+*r1
寄存器间接寻址:ldr r0, [r1] ;*r0 = [r1]
基址变址寻址:ldr r0, [r1, #4] ;r0 = [r1+4]
LDR r0, [r1, #4] ;r0=[r1+4];
LDR r0, [r1, #4]! ;r0=[r1+4], r1=r1+4;
LDR r0, [r1], #4 ;r0=r1, r1=r1+4;
相对寻址:
BL Label
…
Label
…
Mov pc, lr