文档详情

其本质就是一段固件程序).PDF

发布:2017-06-29约1.57万字共14页下载文档
文本预览下载声明
电子科技大学硕士学位论文 4.2启动加载程序的设计与实现 4.2.1启动加载程序详解 下面以大家比较熟悉的嵌入式Linux系统的启动加载程序为例说明启动 加载程序的实现过程,OSE的引导程序与此相似。一个嵌入式系统从软件的 角度看通常可以分为四个层次:1.引导加载程序。包括固化在固件(firmware) 中的boot代码(可选)和 BootLoader两大部分。2.OS内核。特定于嵌入式 板子的定制内核以及内核的启动参数。3.文件系统。包括根文件系统和建立 于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs.4.用户 应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能 还会包括一个嵌入式图形用户界面[19] 引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC的体 系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固 件程序)和位于硬盘MBR中的OSBootLoader(比如,LILO和GRUB等) 一起组成。BIOS在完成硬件检测和资源分配后,将硬盘 MBR中的Boot Loader读到系统的 RAM 中,然后将控制权交给 OSBootLoader.Boot Loader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转 到内核的入口点去运行,也即开始启动操作系统X20) 而在嵌入式系统中,通常并没有像 BIOS那样的固件程序 (注,有的 嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务 就完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入式 系统中,系统在上电或复位时通常都从地址 。x0000000。处开始执行,而在 这个地址处安排的通常就是系统的 BootLoader程序。本节将从 Boot Loader的概念、BootLoader的主要任务、BootLoader的框架结构以及Boot Loader的安装等四个方面来讨论嵌入式系统的BootLoader. 简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程 序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图, 从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内 核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的, 特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader 几乎是不可能的。 第四章基于OSE的平台软件设计与实现 每种不同的CPU体系结构都有不同的BootLoader。有些 BootLoader 也支持多种体系结构的CPU,比如U-Boot就同时支持ARM 体系结构和 MIPS体系结构。除了依赖于 CPU的体系结构外,BootLoader实际上也依 赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板 而言,即使它们是基于同一种 CPU而构建的,要想让运行在一块板子上的 BootLoader程序也能运行在另一块板子上,通常也都需要修改 BootLoader 的源程序L2}1 系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安 排的地址上取指令。比如,基于ARM7TDMIcore的CPU在复位时通常都 从地址 0它的第一条指令。而基于 CPU构建的嵌入式系统通 常都有某种类型的固态存储设备(比如:ROM.EEPROM或FLASH等)被 映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行 Boot Loader程序。下图就是一个同时装有BootLoader、内核的启动参数、内核 映像和根文件系统映像的固态存储设备的典型空间分配结构图。 Boot Rootfilesystem 图4一固态存储设备的典型空间分配结构 主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时 通常会通过串口来进行UO,比如:输出打印信息到串口,从串口读取用户 控制字符等。通常多阶段的BootLoader能提供更为复杂的功能,以及更好 的可移植性。从固态存储设备上启动的BootLoader大多都是 2阶段的启 动过程,也即启动过程可以分为stage1和stage2两部分
显示全部
相似文档