1、嵌入式课程简介 嵌入式系统是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。 嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。结构特点嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。因此可以这样理解上述三个面向的
2、含义,即嵌入式系统是与应用紧密结合的,它具有很强的专用性,必须结合实际系统需求进行合理的裁减利用。一般而言,嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出(I/O)和软件(由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对其不加区分,这也是嵌入式系统和一般的PC操作系统的最大区别)。可以看出嵌入式系统的几个重要特征:1系统内核小。2专用性强。3系统精简。4高实时性的系统软件(OS)是嵌入式软件的基本要求。5嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。6嵌入式系统开发需要开发工具和环境。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算
3、机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。硬件层硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作
4、系统和应用程序都可以固化在ROM中。中间层硬件层与软件层之间为中间层,也称为硬件抽象层或板级支持包(BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式
5、。实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。系统软件层系统软件层由实时多任务操作系统(RTOS)、文件系统、图形用户接口、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。嵌入式Linux系统启动过程摘要:引导加载程序(Bootloader)是嵌入式系统CPU上电后第一段运行的代码.在内核映像执行之前完成相关的底层硬件初始化,建立内存空间映射图等重要工作,为内核提供引导参数,启动内核.通过对Bootloader的体
6、系结构和工作机理进行深入研究,并结合德国DENX开发的具有强大功能的U-BOOT启动程序,给出了U-BOOT在.基于AT91RM9200处理器的嵌入式系统板上的启动过程.关键词:引导加载程序 初始化 启动过程 引导程序一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。当系统首次引导时,或系统被重置时,处理器会执行一个位于Flash/ROM中的已知位置处的代码,Bootloader就是这第一段代码。它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系
7、统作为根文件系统(Root Filesystem),然后加载必要的内核模块,启动应用程序。这就是嵌入式Linux系统启动过程 Linux 引导的整个过程。根文件系统是 Linux 系统的核心组成部分,它可以作为Linux 系统中文件和数据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。应用程序可以说是嵌入式系统的“灵魂”,它所实现的功能通常就是设计该嵌入式系统所要达到的目标。如果没有应用程序的支持,任何硬件上设计精良的嵌入式系统都没有实用意义。从以上分析可以看出 Bootloader在运行过程中虽然具有初始化系统和执行用户输入的命令等作用,但它最根本的功能就是为了启动 Linux
8、 内核,让我们进一步分析 Bootloader 和 Linux 内核在嵌入式系统中的关系和作用。1、Bootloader基本概述 嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。计算机系统都具有相应的引导程序,对于嵌入式系统在执行主程序之前要执行一些初始化的过程来完成对系统的初始化,并创造嵌入式程序运行的环境。我们熟悉的PC中的引导程序一般BIOS和位于MBR的 OS bootloader(例如 LILO 或者 GRUB)一起组成。Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于
9、PC 机上的 BIOS。Bootloader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的Bootloader是很困难的,但为了能达到启动Linux 内核的目的,所有的 Bootloader都必须具备以下功能:1) 初始化 RAM因为 Linux 内核一般都会在 RAM 中运行,所以在调用 Linux 内核之前 Bootloader 必须设置和初始化 RAM,为调用 Linux内核做好准备。初始化 RAM 的任务包括设置 CPU 的控制寄存器参数,以便能正常使用 RAM 以及检测RAM 大小等。2) 初始化串口端口在 Linux 的启动过程中有着非常重要的作用,它是 Li
10、nux内核和用户交互的方式之一。Linux 在启动过程中可以将信息通过串口输出,这样便可清楚的了解 Linux 的启动过程。虽然它并不是 Bootloader 必须要完成的工作,但是通过串口输出信息是调试 Bootloader 和Linux 内核的强有力的工具,所以一般的 Bootloader 都会在执行过程中初始化一个串口作为调试端口。3) 检测处理器类型Bootloader在调用 Linux内核前必须检测系统的处理器类型,并将其保存到某个常量中提供给 Linux 内核。Linux 内核在启动过程中会根据该处理器类型调用相应的初始化程序。4) 设置 Linux启动参数Bootloader在执
11、行过程中必须设置和初始化 Linux 的内核启动参数。5) 调用 Linux内核映像Bootloader完成的最后一项工作便是调用 Linux内核。如果 Linux 内核存放在 Flash 中,并且可直接在上面运行(这里的 Flash 指 Nor Flash),那么可直接跳转到内核中去执行。但由于在 Flash 中执行代码会有种种限制,而且速度也远不及 RAM 快,所以一般的嵌入式系统都是将 Linux内核拷贝到 RAM 中,然后跳转到 RAM 中去执行。2、Bootloader启动过程嵌入式Linux系统通过Bootloader引导,一上电,就要执行Bootloader来初始化系统。在完成对
12、系统的初始化任务之后,它会将非易失性存储器(通常是 Flash或 DOC 等)中的Linux 内核拷贝到 RAM 中去,然后跳转到内核的第一条指令处继续执行,从而启动 Linux 内核。Bootloader 和 Linux 内核有着密不可分的联系。Bootloader多数有两个阶段的启动过程:Stage1:基本的硬件初始化为加载stage2准备RAM空间拷贝内核映像和文件系统映像到RAM中设置堆栈指针sp 跳到stage2的入口点Stage2:初始化本阶段要使用到的硬件设备 检测系统的内存映射加载内核映像和文件系统映像设置内核的启动参数嵌入式系统中广泛采用的非易失性存储器通常是 Flash,而
13、 Bootloader就位于该存储器的最前端,所以系统上电或复位后执行的第一段程序便是 Bootloader。Bootloader在flash中的存储示意图如下: Bootloader启动流程图3、Bootloader 的启动方式3.1网络启动方式这种方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。3.2硬盘启动方式传统的Li
14、nux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。3.3 Flash启动方式大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必
15、拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区。4、Bootloader种类嵌入式Linux系统已经有各种各样的Bootloader,种类划分的方法也不是唯一的,一般可以按照它所支持处理器体系结构不同进行划分,如下表:BootloaderMointor描述X86ARMPowerPCLILO否Linux磁盘引导程序是
16、否否Grub否GNU引导的LILO替代程序是否否Loadlin否从DOS引导Linux是否否ROLO否从ROM引导Linux而不需要BIOS是否否Etherboot否通过以太网启动Linux引导程序是否否Linux BIOS否完全替代BUIS的Linux引导程序是否否Blob否LART等硬件平台的引导程序否是否U-Boot是通用引导程序是是是RedBoot是基于eCos的引导程序是是是常见嵌入式Linux的Bootloader有:Blob、Redboot、U-BootLinux内核的启动过程Linux 内核有两种映像:一种是非压缩内核,叫 Image,另一种是它的压缩版本,叫zImage。根据
17、内核映像的不同,Linux 内核的启动在开始阶段也有所不同。ZImage 是 Image经过压缩形成的,所以它的大小比 Image 小。但为了能使用 zImage,必须在它的开头加上解压缩的代码,将 ZImage 解压缩之后才能执行,因此它的执行速度比 Image 要慢。但考虑到嵌入式系统的存储空容量一般比较小,采用 zImage 可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的。所以一般的嵌入式系统均采用压缩内核的方式。在 Bootloader将 Linux 内核映像拷贝到 RAM 以后,解压内核映像和初始化,完成剩余的与硬件平台相关的初始化工作,再进行一系列与内核相关的初始化后,
18、调用第一个用户进程init 进程并等待用户进程的执行,这样整个 Linux 内核便启动完毕。在很多情况下,我们可以调用一个简单的 shell 脚本来启动必需的嵌入式应用程序。BootLoader是操作系统和硬件的枢纽,它为操作系统内核的启动提供了必要的条件和参数。启动过程中BootLoader的初始化过程就是初始化CPU内部关键的寄存器、配置外围硬件电路相关寄存器、建立中断向量表等,然后跳转到一般由高级语言编写的主函数的应用程序代码去执行,这样就可以利用高级语言来编写完成系统设计所要求的各种功能。参考文献1陈文智.嵌入式系统开发原理与实践清华大学出版社,2005.2严菊明.基于ARM嵌入式系统的通用Bootloader的设计与实现东南大学出版社,20053王田苗、魏洪兴嵌入式系统设计与实例开发(第3版)清华大学出版社 ,2008
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1