一.简介
回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OSBootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操一体成型电感作系统。而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入电感规格式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。
引导加载程序是系统加电后运行的第一段软件代码。
本文将从BootL一体成型电感oader的概念、BootLoader的主要任务、BootLoader的框架结构以及BootLoader的安装等四个方面来讨论嵌入式系统的BootLoader。
二.BootLoader的概念
简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
1.BootLoader所支持的CPU和嵌入式板
每种不同的CPU体系结构都有不同的BootLoader。有些BootLoader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。
2.BootLoader的安装媒介(InstallationMedium)
系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。比如,基于ARM7TDMIcore的CPU在复位时通常都从地址0x00000000取它的第一条指令。而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个电感器厂家预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader程序。
3.用来控制BootLoader的设备或机制
主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。
4.BootLoader的启动过程
BootLoader的启动过程是单阶段(SingleStage)还是多阶段(Multi-Stage)通常多阶段的BootLoader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为stage1和stage2两部分。而至于在stage1和stage2具体完成哪些任务将在下面讨论。
5.BootLoader与主机之间进行文件传输所用的通信设备及协议
最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输协议通常是xmodem/ymodem/zmodem协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助TFTP协议来下载文件是个更好的选择。在讨论了BootLoader的上述概念后,下面我们来具体看看BootLoader的应该完成哪些任务。
三.BootLoader的主要任务与典型结构框架
在继续本节的讨论之前,首先我们做一个假定,那就是:假定内核映像与根文件系统映像都被加载到RAM中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在ROM或Flash这样的固态存储设备中直接运行。但这种做法无疑是以运行速度的牺牲为代价的。
从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。另外,由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而stage2则通常用C语言来实现,
采用空间矢量控制(SVPWM)技术的三相电压型整流器传统的变压整流器和非线性负载的大量使用使电网中电流谐波含量较高,对飞机供电系统和供电质量造成很大影响。消除电网谐波污染、提高整流器的功率因数是电力电子领域研究的热点。空间矢量PWM(SVPWM)控制具
便于集成的智能化电源模块监控系统研究 随着电力电子技术的快速发展,开关电源越来越受到重视,尤其是在通信、电力领域中得到了广泛应用。 近年来,为了提高电源使用的方便性和简易性,电源的模块化和集成化成为研究的重要课题。电源采用模块化设计使得
ADMC328 DSP控制器在交流异步机变频调速中的应ADMC328芯片是美国模拟器件公司(简称ADI)最新推出的ADMC3XX系列单片DSP电机控制器中最简单的一种[1],它可用于交流感应电动机、永磁同步电动机和无刷直流电动机的高性能控制,在冰箱、空调