专题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为花蕊,以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体系结构参考手册:Programmers’ Model:Processor modes Linux用户程序运行在usr模式、Linux内核运行在svc模式下!
上面的表不可能凭空产生,那么上面表是怎么来的呢?也就是ARM如何获取ARM寄存器信息呢?参考《ARM体系结构参考手册》:程序员模型:寄存器。 ARM寄存器有31个通用寄存器: ARM寄存器有6个状态寄存器:
什么是寻址方式? 处理器根据指令信息获取所需操作数的方式。
立即数寻址: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