第10章 Bootloader 设计基础_第1页
第10章 Bootloader 设计基础_第2页
第10章 Bootloader 设计基础_第3页
第10章 Bootloader 设计基础_第4页
第10章 Bootloader 设计基础_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章Bootloader设计基础

10.1Bootloader概述Bootloader,启动引导程序,又叫引导加载程序,功能强大的Bootloader也就直接叫做板级支持包(BSP,BoardSupportPacket)或者固件(Firmware)。10.1.1Bootloader的作用

Bootloader是在嵌入式操作系统内核运行之前运行的一段小程序,也是系统开机后执行的第一段程序。通过这段小程序,可以初始化硬件设备建立内存空间将系统的软硬件环境设置成一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。Bootloader是依赖于底层硬件而实现的,因此建立一个通用的嵌入式系统Bootloader几乎是不可能的。在嵌入式系统中,Bootloader对嵌入式设备中的主要部件如CPU、SDRAM、FLASH、串口等进行了初始化可以使用Bootloader通过串口下载各种文件到设备的SDRAM中或者烧录Flash,然后将操作系统内核读入到内存中来或者直接跳转到内核的入口点,从而实现操作系统的引导。Bootloader从第一条指令跳转后,就开始初始化各种最重要的硬件,比如CPU的工作频率、定时器、中断、看门狗、检测RAM大小和Flash等。一般,硬件初始化的这段程序是用汇编语言编写的,其后就用C语言编写。总体上Bootloader主要完成以下工作:初始化CPU速度;初始化内存,包括启用内存库,初始化内存配置寄存器等;初始化中断控制器,在系统启动时,关闭中断,关闭看门狗;初始化串行端口(如果在目标上有的话);关闭指令/数据高速缓存;设置堆栈指针;设置参数区域并构造参数结构和标记,即引导参数;执行POST(上电自检)来标识存在的设备并报告有何问题;为电源管理提供挂起/恢复支持;传输操作系统内核镜像文件到目标机。也可以将操作系统内核镜像文件事先存放在Flash中,这样就不需要Bootloader和主机传输操作系统内核镜像文件,这通常是在做成产品的情况下使用。而一般在开发过程中,为了调试内核的方便,不将操作系统内核镜像文件固化在Flash中,这就需要主机和目标机进行文件传输;跳转到内核的开始,在此又分为ROM启动和RAM启动。所谓ROM启动就是用XIP(executeInPlace就地执行)技术直接在Flash中执行操作系统镜像文件;所谓RAM启动就是指把内核镜像从Flash复制到RAM中,然后再将PC指针跳转到RAM中的操作系统启动地址。在嵌入式Linux软件系统的开发中,一般将软件分为以下几个部分:启动引导程序(Bootloader)操作系统内核(OSKernel)根文件系统(FileSystem)图形窗口系统(GUI)应用程序(AP).前三部分是一个可运行的嵌入式系统必不可少的,它们在开发的过程中,被分别独立地编译链接或打包为一个二进制目标文件,然后下载(烧录)到嵌入式系统的ROM(一般是Flash)中。在Bootloader阶段,也提供了对Flash设备的分区格式化的支持,其空间分配通常如图所示。10.1.2Bootloader的工作模式对于嵌入式系统的开发人员而言,Bootloader通常包含以下两种不同的工作模式:启动加载(Bootloading)模式--正常启动模式(自主模式)(Bootloader将操作系统从目标机上的固态存储设备加载到RAM中运行。没有用户的介入和操作。)下载(Downloading)模式--提供给开发人员或者技术支持人员使用

(Bootloader通过串口或网络从主机下载内核映像、根文件系统映像、升级软件等文件,一般先保存到RAM再写入Flash等存储设备。)10.1.3Bootloader的启动流程

分为stage1和stage2两个阶段Stage1:一般依赖于CPU体系结构的代码比如设备初始化代码等,都放在这一阶段;通常都用汇编语言来实现,以达到短小精悍且启动快的目的;stage2:通常用C语言来实现这样可以实现各种复杂的功能

(比如串口、以太网接口的支持等)

Bootloader的Stage11.

硬件设备初始化

(屏蔽所有中断、关闭看门狗、设置CPU速度和时钟频率、RAM初始化、关闭指令/数据cache);2.

为加载Bootloader的stage2准备RAM空间

(为获得更快的执行速度,stage2加载到RAM空间,检测坏块);3.

拷贝Bootloader的stage2到RAM空间中

(确定stage2的可执行映像在固态存储设备的存放起始地址和大小,以及RAM空间的起始地址);4.

设置好堆栈

(为执行c语言代码做好准备)5.跳转到stage2的C入口点main()函数处(vivi中利用两行代码实现:blmainmovpc,#FLASH_BASE若main返回则又重启)Bootloader的stage2

1.初始化本阶段要使用到的硬件设备(比如串口初始化,可以输出打印信息)2.检测系统内存映射(memorymap)(哪些地址范围被分配用来寻址系统的RAM)3.将kernel映像和根文件系统映像从flash读到RAM空间(内核映像被复制到从MEM_START+0x8000基地址开始的大约1MB的内存范围内,根文件系统映像被复制到MEM_START+0x00100000开始的内存。从MEM_START到MEM_START+0x8000这段32KB的内存放置一些全局数据结构,如启动参数和内核页表等。)4.为内核设置启动参数(Linux2.4版本后内核以标记列表的形式来传递启动参数。每个标记列表由被传递参数的结构及参数值数据结构组成。启动参数标记列表以标记ATAG_CORE开始,以ATAG_NONE结束。)5.调用内核(跳转到内核的第一条指令处,即MEM_START+0x8000处。)10.2S3C2410平台下Linux的BootloaderViviU-BOOT10.2S3C2410平台下Linux的Bootloader1.vivi简介vivi是由韩国mizi公司为ARM处理器系列设计的一个bootloader。它同样支持启动加载模式和下载工作模式。在下载模式下,vivi为用户提供一个命令行人机接口,通过这个人机接口可以使用vivi提供的一些命令。如果嵌入式系统没有键盘和显示,那么可以利用vivi中的串口,将其和宿主机连接起来利用宿主机中的串口软件(如windows中的超级终端或者Linux中的minicom)来控制。vivi常用的命令

Load:下载程序到存储器中(Flash或者RAM中)Part:用于对MTD分区进行操作。

MTD(内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd子目录下。

Bon:用于对bon分区(nandflash设备的一种简单的分区管理方式)进行操作Param:用于对bootloader的参数进行操作Boot:用于引导linuxkernel启动Flash:管理Flash。如删除数据。ViVi代码包括以下几个目录,共200多个文件arch:包含所有ViVi支持的目标板的子目录。如S3C2410。init:只包含main.c和version.c。ViVi从main函数开始执行。lib:一些平台公共的接口函数,如延时udelay()等。drivers:引导内核需要的设备的驱动程序(MTD和串口)。include:头文件的公共目录。如S3C2410.h和Platform/smdk2410.h分别定义了S3C2410CPU的寄存器和开发板资源配置参数。2.vivi文件结构vivi的配置和嵌入式Linux内核一样,可以采用菜单化的形式进行。其步骤主要如下:1、#makedistclean。清除一些早先生成的无用的目标文件。2、#makemenuconfig。根据菜单中的信息进行配置,完毕后,保存退出。3、#make开始编译

3.vivi的配置和编译4.vivi第一阶段的分析vivi的第一阶段主要完成了依赖于CPU的体系结构硬件初始化,包括禁止中断、初始化串口、复制第二阶段到RAM中等。由于这些代码是和硬件紧密相关的,因此要求读者在阅读时对照S3C2410处理器的数据手册,查阅相关的寄存器的描述,以便更好地理解。这些汇编代码全部就集中在vivi\arch\s3c2410目录下的head.S这一个汇编文件中,当然还有相关的头文件。vivi的第二阶段的入口就是init/main.c。按照源代码的组织流程,根据模块化划分的原则,共分为8个功能模块即八个步骤,在源代码的注释中以step非常清晰的给出了区分。

5.vivi第二阶段的分析第1步:vivi从main()函数开始执行,函数通过putstr(vivi_bannner)打印出vivi的版本。

第2步:主要是初始化GPIO。根据芯片的数据手册把所有的初始值设定,在这里利用set_gpios这个函数就可以完成初始化了。第3步:进行内存映射初始化和内存管理单元(MMU)的初始化工作。第4步:初始化堆(heap),内存会发生变化。实现动态内存分配策略。函数heap_init()。第5步:初始化mtd设备。mtd_dev_init()。至此初始化设备的任务完成。下面为引导操作系统作准备。第6步:配置参数,主要是init_priv_data函数。将启动内核的命令参数取出并存放在指定的内存中。第7步:提供vivi人机接口的各种命令。主要函数有init_builtin_cmds()和add_command()。第8步:进入Bootloader的两种模式之一。(人机接口的下载模式或直接引导操作系统。)核心函数是boot_or_vivi()10.2.2U-bootU-Boot,全称UniversalBootloader,是遵循GPL条款的开放源码项目它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS等嵌入式操作系统。其目前主要支持的目标操作系统有OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS等,因此功能比较强大,这也是U-Boot中Universal的一层含义。10.2.2U-bootU-Boot的主要特点有:①开放源码;

②支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;

③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;

④较高的可靠性和稳定性;

④较高的可靠性和稳定性;

⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;

⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;

⑦较为丰富的开发调试文档与强大的网络技术支持;10.2.2U-boot常用命令:Help/?Bdinfosetenvprintenvsaveenvmwmdmmflinfoerase[起始地址结束地址].cp[源地址目标地址大小]imi[起始地址]bootm[起始地址]tftboot[起始地址镜像名]reset10.2.2U-bootU-boot文件结构U-boot代码采用了一种高度模块化的编程方式,与移植树有关的有以下几个目录.board:这个目录存放了所有U-boot支持的目标板的子目录,如board/smdk2410/*就是我们说关心的.要将U-boot移植到自己的s3c2410x目标板上,必须参考这个目录下的内容,比如对比Flash以及Flash宽度和大小的定制邓就要修改其中的mon:独立于处理器体系结构的通用代码,如内存大小探测与故障检测;

cpu:与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;

10.2.2U-bootdriver:通用设备驱动,如CFIFLASH驱动(目前对INTELFLASH支持较好)fs:这个目录中存放了U-boot支持的文件系统.

examples:可在U-Boot下运行的示例程序;如hello_world.c,timer.c;Include:U-Boot头文件;这个目录存放头文件的公共目录,其中include/configs/smdk2410.h定义了所有和S3C2410X相关的资源的配置参数,我们往往只需修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。

10.2.2U-bootlib_xxx:处理器体系相关的文件,如lib_ppc,lib_arm:目录分别包含与PowerPC、ARM体系结构相关的文件;net:与网络功能相关的文件目录,如bootp,nfs,tftp;post:上电自检文件目录。尚有待于进一步完善;rtcrtc:驱动程序;tools:用于创建U-BootS-RECORD和BIN镜像文件的工具;10.3其他常见的Bootloader1.WinCE的BootloaderNboot和Eboot是WinCE的Bootloader。Nboot是n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论