欢迎来到天天文库
浏览记录
ID:33798359
大小:111.01 KB
页数:5页
时间:2019-03-01
《基于arm的嵌入式系统bootloader启动流程分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于ARM的嵌入式系统Bootloader启动流程分析1121万永波张根宝田泽杨峰(1:陕西科技大学电气与电子工程学院,陕西省咸阳市人民西路49号,7120812:西北大学电子系,陕西省西安市太白北路229号,710069)摘要:讲述了基于ARM处理器的嵌入式系统在上电启动后应用程序或操作系统运行前,对处理器及其内部功能模块进行初始化的过程,并结合经过实际验证的代码详细的分析了S3C44B0Bootloader的运行过程。关键字:ARM嵌入式系统Bootloader一.引言:对于PC机,其开机后的
2、初始化处理器配置、硬件初始化等操作是由BIOS(BasicInput/OutputSystem)完成的,但对于嵌入式系统来说,出于经济性、价格方面的考虑一般不配置BIOS,因此我们必须自行编写完成这些工作的程序,这就是所需要的开机程序。而在嵌入式系统中,通常并没有像BIOS那样的固件程序,启动时用于完成初始化操作的这段代码被称为Bootloader程序,因此整个系统的加载启动任务就完全由Bootloader来完成。简单地说,通过这段程序,可以初始化硬件设备、建立内存空间的映射图(有的CPU没有内存
3、映射功能如S3C44B0),从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核、运行用户应用程序准备好正确的环境。Bootloader依赖于实际的硬件和应用环境,因此要为嵌入式系统建立一个通用、标准的Bootloader是非常困难的。Bootloader也依赖于具体的嵌入式板级设备的配置,这也就是说,对于两块不同的嵌入式主板而言,即使它们是基于同一CPU而构建,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,通常都需要修改Bootloader的源程序。二
4、.启动流程系统加电复位后,几乎所有的CPU都从由复位地址上取指令。比如,基于ARM7TDMI内核的CPU在复位时通常都从地址0x00000000处取它的第一条指令。而以微处理器为核心的嵌入式系统通常都有某种类型的固态存储设备(比如EEPROM、FLASH等)被映射到这个预先设置好的地址上。因此在系统加电复位后,处理器将首先执行存放在复位地址处的程序。通过集成开发环境可以将Bootloader定位在复位地址开始的存储空间内,因此Bootloader是系统加电后、操作系统内核或用户应用程序运行之前,首
5、先必须运行的一段程序代码。对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,比如功能简单仅包括应用程序的系统,但在系统启动时都必须执行Bootloader,为系统运行准备好软硬件运行环境。系统的启动通常有两种方式,一种是可以直接从Flash启动,另一种是可以将压缩的内存映像文件从Flash(为节省Flash资源、提高速度)中复制、解压到RAM,再从RAM启动。当电源打开时,一般的系统会去执行ROM(应用较多的是Flash)里面的启动代码。这些代码是用汇编语言编写的,其主要作用在于初始化C
6、PU和板上的必备硬件如内存、中断控制器等。有时候用户还必须根据自己板子的硬件资源情况做适当的调整与修改。系统启动代码完成基本软硬件环境初始化后,对于有操作系统的情况下,启动操作系统、启动内存管理、任务调度、加载驱动程序等,最后执行应用程序或等待用户命令;对于没有操作系统的系统直接执行应用程序或等待用户命令。启动代码是用来初始化电路以及用来为高级语言写的软件做好运行前准备的一小段汇编语言,在商业实时操作系统中,启动代码部分一般被称为板级支持包,英文缩写为BSP。它的主要功能就是:电路初始化和为高级语
7、言编写的软件运行做准备。系统启动流程如图1所示,主要的过程如下:1.启动代码的第一步是设置中断和异常向量。设置中断异常向量2.完成系统启动所必须的最小配置,某些处理器芯片包含一个或几个全局寄存器,这些寄存器必须在系系统寄存器配置统启动的最初进行配置。3.设置看门狗,用户设计的部分外围电路如果必须在看门狗及外围电路初始化系统启动时初始化,就可以放在这一步。4.配置系统所使用的存储器,包括Flash,SRAM和存储器电路初始化DRAM等,并为他们分配地址空间。如果系统使用了DRAM或其它外设,就需要设
8、置相关的寄存器,初始化栈指针以确定其刷新频率,数据总线宽度等信息,初始化存储器系统。有些芯片可通过寄存器编程初始化存变量初始化储器系统,而对于较复杂系统通常集成有MMU来管理内存空间。数据区准备5.为处理器的每个工作模式设置栈指针,ARM处理器有多种工作模式,每种工作模式都需要设置单独的高级语言入口函数调用栈空间。6.变量初始化,这里的变量指的是在软件中定义的已图1嵌入式系统启动流程经赋好初值的全局变量,启动过程中需要将这部分变量从只读区域,也就是Flash拷贝到读写区域中,因为这
此文档下载收益归作者所有