ARM11bootloader启动流程分析.docx
- 文档编号:3732794
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:55
- 大小:1.60MB
ARM11bootloader启动流程分析.docx
《ARM11bootloader启动流程分析.docx》由会员分享,可在线阅读,更多相关《ARM11bootloader启动流程分析.docx(55页珍藏版)》请在冰豆网上搜索。
ARM11bootloader启动流程分析
ARM11bootloader启动流程分析
班级:
通信1106
学号:
311109020623
姓名:
王贵林
目录
1前言1
2ARM技术概述2
2.1ARM以及处理器概述2
2.1.1ARM简介2
2.1.2ARM11处理器简介2
2.2ARM微处理器体系结构3
2.2.1ARM处理器寄存器组3
2.2.2ARM处理器指令集4
2.2.3ARM处理器寻址方式5
2.2.4ARM11处理器工作模式6
3开发工具7
3.1软件工具7
3.1.1虚拟机7
3.1.2redhatlinux67
3.1.3交叉工具链7
3.1.4eclipse调试工具7
3.1.5链接器脚本7
3.1.6Makefile工程管理器7
3.2硬件工具7
3.2.1S3C6410开发板7
3.2.2Jlink模拟下载器8
4Bootloader在s3c6410平台实现9
4.1初始化流程9
4.2初始化过程概述9
4.2.16410启动方式9
4.2.26410启动过程概述10
4.2.3iROM启动过程简介11
4.3BL1初始化阶段分析12
4.3.1创建异常向量表及代码实现12
4.3.2设置svc及代码实现14
4.3.3关闭看门狗及代码实现14
4.3.4关闭中断及代码实现16
4.3.5关闭Cache和mmu及代码实现17
4.3.6时钟终初始化及代码实现19
4.3.7内存初始化及代码实现27
4.3.8代码搬移及代码实现42
4.3.9C语言环境初始化及代码实现43
结论45
致谢46
参考文献47
附录48
1前言
随着中国市场经济的持续发展和人民生活水平的不断提高。
智能家居,智能穿戴,物联网等一系列嵌入式产品逐渐进入家家户户。
人们的日常生活离不开嵌入式产品,对嵌入式产品的需求持续增加。
其中消费类电子产品,智能玩具,医疗器械等嵌入式产品,安全监控,自动控制等工业智能监控设备都强烈地刺激着市场。
为落实软件增值税优惠政策,促进软件产业发展,财政部、国家税务总局联合下发了《关于嵌入式软件增值税政策的通知》的文件,也放宽了嵌入式软件政策。
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪来适应系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统,是将先进的计算机技术,半导体技术,电子技术和各行业的具体应用相结合的产物。
在嵌入式系统开发中,嵌入式软件是实现各种系统功能的关键。
随着嵌入式系统实现的功能越来越强大,嵌入式软件的结构也越来越复杂,最终实现了嵌入式微处理器对操作系统的支持,使得整个嵌入式系统拥有了完整的架构。
现在,
专门为嵌入式产品开发的各种操作系统层出不穷。
譬如:
VXWORD,WINDOWSCE,POCKETPC,μOSLinux等。
然而,对于嵌入式系统的硬件产品提供商而言,所面对的市场客户需求是千差万别的,千差万别的客户会根据自身的实际情况要求不同的操作系统,不同的引导加载(Bootloader)方式及不同的内核参数等等,若要求硬件开发商满足每个客户要求是不现实的。
尤其对于开发板的引导加载程序(Bootloader),是嵌入式系统研发当在中最关键的部分,涉及到技术研发成本,技术机密等因素,并且基于国内ARM嵌入式市场的混乱现状和国家在这方面知识产权的模糊性,几乎所有的厂商、出于对自己商业利益的考虑,拒绝向用户提供整个Bootloader源码程序,仅提供编译好的二进制文件,并且在出厂前已经烧录进产品。
因此,编写自己Boolloader意义重大,尤其是在未来的市场竞争中。
更加体现个人能力与价值。
Bootloader涉及核心芯片的初始化,以及芯片外围的初始化。
本课程设计研究了异常向量表,设置svc,关闭看门狗,关闭中断,关闭mmu,始终初始化,内存初始化,代码搬移,栈初始化,Bss段初始化这些与核心芯片的初始化分析与代码实现。
本设计具有较高的扩展性和灵活性,使ARM11Bootloader开发人员不必每一次都重复写这些基础代码,可在这些接口上实现其它功能。
提高了代码的复用性和扩展性。
同时提高了自己编程能力和阅读文档的能力。
2ARM技术概述
2.1ARM以及处理器概述
2.1.1ARM简介
ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以对一类微处理器的通称,还可以认为是一种技术的名字。
1991年11月ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。
目前,采用ARM技术知识产权(IP)核的微处理器,即通常我们所说的ARM微处理器,己经遍及工业控制、消费类电子产品、通信系统、无线系统等各类产品市场,基于ARM技术的微处理约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入我们生活的各个方面。
全世界有几十家大的半导体公司都使用ARM公司的授权,其中包括摩托罗拉、IBM、Intel、ATMEL、SONY、NEC、LG等。
因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使得整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。
2.1.2ARM11处理器简介
由于本论文所使用的S3C6410是基于ARM11内核的微处理器SOC(片上系统),所以这里仅对ARM11微处理器做一简单介绍。
ARM11处理器概念分类如表2-1所示。
表2-1处理器概念对比
ARM核
ARM11
指令架构
ARMV6
芯片
S3C6410
目前,ARM微处理器主要包括下面几个系列:
ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、ARMll系列、SecurCore系列及Inter的StrongARM、Xscale系列等,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。
其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。
SecurCore系列专门为安全要求较高的应用而设计。
ARM1136J–S发布于2003年,是针对高性能和高效能的应用而设计的,ARM1136J–S是第一个执行ARMV6架构指令的处理器,它集成了一条具有独立的load-store和算术流水的8级流水线。
ARMv6指令包含了针对媒体的单指令多数据流。
扩展,采用特殊的设计以改善视频特处理性能。
ARM1136JF–S就是为了快速浮点运算,而在ARM1136J–S向量浮点单元。
2.2ARM微处理器体系结构
2.2.1ARM处理器寄存器组
ARM通用寄存器如表2-2所示。
表2-2arm通用寄存器
User
System
Supervir
Abort
Undefind
Interrut
Fast_interrupt
R0
R0
R0
R0
R0
R0
R0
R1
R1
R1
R1
R1
R1
R1
R2
R2
R2
R2
R2
R2
R2
R3
R3
R3
R3
R3
R3
R3
R4
R4
R4
R4
R4
R4
R4
R5
R5
R5
R5
R5
R5
R5
R6
R6
R6
R6
R6
R6
R6
R7
R7
R7
R7
R7
R7
R7
R8
R8
R8
R8
R8
R8
R8_fiq
R9
R9
R9
R9
R9
R9
R9_fiq
R10
R10
R10
R10
R10
R10
R10_fiq
R11
R11
R11
R11
R11
R11
R11_fiq
R12
R12
R12
R12
R12
R12
R12_fiq
R13
R13
R13_svc
R13_abt
R13_und
R13_irq
R13_fiq
R14
R14
R14_svc
R14_abt
R14_und
R14_irq
R14_fiq
PC
PC
PC
PC
PC
PC
PC
CPSR
CPSR
CPSR
CPSR
CPSR
CPSR
CPSR
SPSR
SPSR
SPSR
SPSR
SPSR
由表2-2可以看出:
通用寄存器R0-R7在所有的处理器模式下指的都是同一个物理寄存器;而对于R8一R12寄存器组,除了在快速中断模式下有自己专有的物理寄存器,其它模式下也共有同一物理寄存器。
R13寄存器对应6个不同的物理寄存器,即除了前面提过的用户模式与系统模式共用一个寄存器外,其它模式都有相应的物理寄存器;一般地,R13寄存器在ARM中通常用作栈指针,在ARM指令中这只是一种习惯的用法,并没有任何指令强制性的使用R13作为栈指针。
寄存器R14又被称为连接寄存器(LinkRegister,LR),在ARM体系中具有下面两种特殊的作用:
每一种处理器模式自己的物理R14中存放在当前子程序的返回地址。
当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。
在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。
当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量。
具体的返回方式与上面的子程序返回方式基本相同。
R14寄存器也可以作为通用寄存器使用。
程序计数器15又被记作PC,由于ARM处理器采用的是流水线机制,当正确地读取了PC值时,该值为当前指令地址值加8字节。
也就是说对于ARM指令来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第O位和第l位总是为O。
当成功地向PC写入一个地址数值时,程序将跳转到该地址执行。
在ARM系统进行代码级调试时对于R13、R14及PC的跟踪很重要,可以用来分析系统堆栈及PC指针值的变化等。
在ARM体系结构中包含一个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器(SPSRS)。
使用MSR和MRS指令来读取和设置这些寄存器。
CPSR持有关于当前处理器状态的信息,以在任何处理器模式下被访问。
其他5个备份的程序状态寄存器(SPSR)在每个特权模式都有一个,主要用于异常处理,当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。
当在用户模式或系统模式中访问SPSR,将会产生不可预知的结果。
2.2.2ARM处理器指令集
(1)ARM处理器指令格式
目前ARM微处理器的体系结构支持两种指令集:
ARM指令集和Thumb指令集。
其中ARM指令为32位长度,Thumb指令为16位长度。
Thumb指令集是ARM指令集的功能子集,但与等价的ARM代码相比,可以节省30%以上的存储空间。
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成,指令集一共有60多条指令,可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令(Load/Store)、协处理器指令和异常中断产生指令六大类,并且支持寄存器寻址、立即数寻址、寄存器间接寻址、寄存器变址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址以及相对寻址等多种寻址方式。
一条典型的ARM指令语法格式如下所示。
其中:
.opcode是指令操作符编码;
.cond是指令执行的条件编码;
.s决定指令的操作是否影响CPSR;
.Rd是目标寄存器编码;
.Rn是包含第一个操作数的寄存器编码;
.shifter_operand表示第二个操作数。
(2)本文所用指令
本文所用汇编指令如表2-3所示。
表2-3指令
分支指令
b,bl
算术指令
mov,add
逻辑指令
orr,bic,and,mvn
PSR的指令
mcr,msr
存储器访问指令
ldr,str
比较指令
cmp
2.2.3ARM处理器寻址方式
寻址方式是是指处理器根据指令中给出的信息来找到指令所需的操作数的方式。
(1)立即数寻址
一种特殊的寻址方式,操作数本身就在指令中给出。
(2)寄存器寻址
操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。
(3)寄存器间接寻址
指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。
(4)变址寻址
变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
(5)相对寻址
相对寻址是变址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。
2.2.4ARM11处理器工作模式
ARM11处理器工作模式如表2-4所示。
表2-4ARM11处理器工作模式
由表2-4可知,ARM处理器工作模式共7中,分别是用户模式,快速中断模式,中断模式,超级用户模式,数据异常模式,未定义模式和系统模式。
3开发工具
3.1软件工具
3.1.1虚拟机
虚拟机(VirtualMachine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
3.1.2redhatlinux6
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
它能运行主要的UNIX工具软件、应用程序和网络协议。
它支持32位和64位硬件。
Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
3.1.3交叉工具链
交叉工具链是指在嵌入式系统开发的过程中有宿主机和目标机角色之分。
宿主机是执行编译,连接嵌入式软件的计算机;目标机运行嵌入式软件的硬件平台。
常用的交叉工具主要有交叉编译器,交叉连接器,交叉转换器,交叉ELF文件工具,交叉反汇编器。
3.1.4eclipse调试工具
Eclipse是一个开放源代码的、可扩展的开发平台。
提供了代码编辑和调试等功能。
3.1.5链接器脚本
连接器脚本由代码段数据段,bss段,起始地址,内存对对齐,变量,代码段收文件等构成。
它能反映程序的地址信息,各段信息等。
3.1.6Makefile工程管理器
Makefile定义了一些变量和规则,当工程中的文件较多时,可根据自己的需求定义编译的对象。
3.2硬件工具
3.2.1S3C6410开发板
开发板芯片配置如表3-1所示。
表3-1开发板芯片配置表
处理器
S3C6410533MHZ~ARM1176JZF-S667MHZ
RAM
DDRRAM默认256M
Flash
NandFlash默认256M
供电电压
2.0V~6.0V
尺寸
64X50X12mm
3.2.2Jlink模拟下载器
J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。
配合IAREWAR,ADS,KEIL,WINARM,RealView等集成开发环境支持所有ARM7/ARM9/ARM11,CortexM0/M1/M3/M4,CortexA5/A8/A9等内核芯片的仿真。
4Bootloader在s3c6410平台实现
4.1初始化流程
Bootloader初始化流程如图4-1所示。
图4-1初始化流程图
4.2初始化过程概述
4.2.16410启动方式
设备地址空间如表4-1所示。
表4-1设备特定地址空间
由表4-1可以看出6410支持SROM(Norflash)启动,还支持OneNAND启动,OneNAND是一种特殊的Nandflash。
既具有Norflash的特性,又具有NandFlash的特性。
此外还支持MODEM启动和IROM启动。
这些启动方式可以配置选择。
本文以Nandflash为例说明。
内存地址如表4-2所示。
表4-2内存地址表
系统上电后,会从0地址处取代码,也就是SteppingStone处取代码。
根据选择启动方式的不同,MirroredRegion会将其映射到0地址处。
4.2.26410启动过程概述
代码搬移如图4-2所示。
图4-2代码搬移顺序图
iROM放置的是芯片厂商固化好的代码,被叫做0阶段的bootloader。
这段代码首先会做基本的硬件初始化,把放在Nandflash中的bootloader1(BL1)最前面中的8K代码拷贝到SteppingStone(以下简称垫脚石)中!
如果运行中的程序不只8K,那么BL1就会把Nandflash剩余Bootloader再拷贝到到SDRAM中运行,完成整个bootloader运行。
4.2.3iROM启动过程简介
iROM启动流程如图4-3所示。
图4-3iROM启动流程
上述流程图归纳起来主要有以下步骤:
(1)禁用看门狗定时器。
(2)初始化TCM.
(3)初始化块设备复制功能。
(4)初始化栈区。
(5)初始化锁相环PLL。
(6)初始化指令高速缓存。
(7)初始化堆。
(8)将BL1拷贝到垫脚石。
(9)检验BL1的完整性。
(10)转到垫脚石。
4.3BL1初始化阶段分析
4.3.1创建异常向量表及代码实现
异常向量表创建流程如图4-4所示。
图4-4异常向量表创建流程
异常指的是系统内部或外部发生一件事,导致处理器暂停当前任务,转而去处理异常事件。
异常发生后,ARM处理器会跳转到对应该异常的固定地址去执行异常处理程序,这些固定的地址成为异常向量。
ARM处理器工作模式地址如表4-3所示。
表4-3ARM处理器工作模式地址表
表4-3给出了异常发生时的跳转地址,根据这些地址就可以创建异常向量表入口地址设置在连接器脚本中。
程序参考代码:
breset
ldrpc,_undifined_instruction
ldrpc,_software_interrupt
ldrpc,_prefetch_abort
ldrpc,_data_abort
ldrpc,_not_used
ldrpc,_irq
ldrpc,_fiq
_undifined_instruction:
.wordundifined_instruction
_software_interrupt:
.wordsoftware_interrupt
_prefetch_abort:
.wordprefetch_abort
_data_abort:
.worddata_abort
_not_used:
.wordnot_used
_irq:
.wordirq
_fiq:
.wordfiq
undifined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
nop
4.3.2设置svc及代码实现
因为Bootloader和内核以及软件工作在svc,所以系统启动时要svc模式应使能。
CPSR和SPSR编码格式如表4-4所示。
表4-4CPSR和SPSR寄存器编码格式
M[4:
0]这5位控制异常模式选择。
ARM处理器模式选择如表4-5所示。
表4-5处理器模式选择表
因此,将M设置为0b10010即可达到设置svc模式的目的。
参考代码:
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
movpc,lr
4.3.3关闭看门狗及代码实现
“看门狗”(以下简称watchdog)的作用是在系统死机后帮助系统重启。
在硬件上实现了计时功能。
启动计时后,用户必须在计时结束前重新开始计时,俗称“喂狗”,如果超时,那么它就认为死机,系统重启。
Bootloader在启动过程中,不会频发出现死机状况,如果不关闭watchdog,启动过程需要不断喂狗,降低启动效率。
看门狗工作流程如图4-5所示。
图4-5看门狗电路工作流程图
watchdog包括一个4分频的预分频器和一个32位的计数器,时钟通过预分频器输入定时器。
定时器递减计数,递减的最小值为0XFF。
看门狗控制寄存器地址如表4-6所示。
表4-6看门狗控制寄存器地址
看门狗控制寄存器设置位如表4-7所示。
表4-7看门狗控制寄存器设置位
由表4-7可知,第5位是定时器使能位。
如果将其设置为0就可达到关闭watchdog。
参考代码:
//设置关门狗控制寄存器WTCON,关闭看门狗
ldrr0,=0x7E004000
movr1,#0x0
strr1,[r0]
movpc,lr
4.3.4关闭中断及代码实现
首先设置CPSR寄存器的I位和F为中断禁止位,然后设置中断屏蔽寄存器屏蔽中断。
中断控制流程如图4-6所示。
图4-6中断控制流程
S3C6410有64个中断,完全由硬件跳转,分为VIC0,VIC1两组,各组由一个寄存器控制。
中断号为0~31为VIC0,32~63为VIC1。
中断控制寄存器地址如表4-8所示。
表4-8中断控制寄存器地址
从表4-8得到两组中断控制寄存器的地址为0x71200014和0x71300014。
中断控制寄存器设置位如表4-9所示。
表4-9中控制寄存器设置位
从表4-9可以看出,两组寄存器的0~31位设置为0时无效,设置为1时打开中断。
参考代码:
mvnr1,#0x0
//设置VIC0寄存器,关闭中断
ldrr0,=0x71200014
strr1,[r0]
//设置VIC1寄存器,关闭中断
ldrr0,=0x71300014
strr1,[r0]
movpc,lr
4.3.5关闭Cache和mmu及代码实现
关闭Cache和mmu流程如图4-7所示。
图4-7关闭Cache和mmu流程
首先使ICache和DCache失效,然后关闭mmu。
ARM处理器体系如表4-10所示。
表4-10ARM处理器存储体系
处理器内部寄存器,数量少,存储速度非常快
TCM:
紧耦合存储器(Cache,主存储器)存储速度较快
辅助存储器(FlashSD等)存储速度较慢
(1)Cache包括ICache和DCache,是一种容量小,存储速度快的存储器。
(2)虚拟地址解决了地址冲突问题,可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM11bootloader 启动 流程 分析