解析单片机上应用的一款Boot Loader
<STRONG>Boot Loader的概念及功能<BR><BR></STRONG>       在以ARM为代表的嵌入式系统中,操作系统内核运行前的硬件初始化、建立内核镜像等都是由Boot Loader来完成的。在PC机上,最先启动的是主板上的BIOS,BIOS负责对硬件初始化,给操作系统提供硬件的接口函数等等,但在嵌入式操作系统中并没有BIOS,因此整个嵌入式操作系统的加载启动任务就完全由Boot Loader来完成。<BR><BR>
<P align=center><IMG style="WIDTH: 300px; HEIGHT: 170px" height=170 alt="boot loader流程图" hspace=0 src="http://www.dzdqw.com/jishu/UploadFiles_9637/200610/20061010225426332.gif" width=300 border=0><BR>图1  Boot Loader流程图</P>
<P>       Boot Loader通常存放于目标平台的非易失存储介质中,主要用于完成由硬件启动到操作系统启动的过渡,能够在上电后对SDRAM、CACHE、FLASH等硬件部分进行检测,建立内存空间的映射图和内核镜像,建立通讯通道和调试通道等,还能够提供Shell Menu检测设置菜单和相应的检测程序,引导操作系统及应用程序,从而为最终调用操作系统内核准备好正确的环境。<BR><BR>       目前,嵌入式系统中广泛应用的UBoot、vivi、blob、armboot等Boot Loader在原有功能的基础上,增加了更多的功能并大大增强了移植性。嵌入式系统中硬件的种类繁多,差距较大,而Boot Loader是严重依赖于硬件而实现的。不同的CPU体系需要不同的Boot Loader,即便是同一种体系结构,由于其它硬件设备配置的不同,如板卡硬件地址的分配、RAM芯片的型号等,也需要对Boot Loader作一定的修改才能使用。因此,开发人员需针对不同的处理器和开发板,对Boot Loader进行定制,来实现不同的功能。<BR><BR><STRONG>       Boot Loader的操作模式</STRONG><BR><BR>       Boot Loader通常包括“启动加载(Boot loading)”和“下载(Downloading)”两种模式。这两种操作模式仅对开发人员具有一定的意义。<BR><BR>       启动加载模式:Boot Loader从目标机上的固态存储设备上将操作系统加载到RAM中运行,无需用户介入。此模式是Boot Loader正常的工作模式。<BR><BR>       下载模式:在这种模式下,目标机上的Boot Loader通过串口连接或网络连接等手段从主机上下载文件到目标机的RAM中,然后再烧写到目标机上的固态存储设备中。通常在第一次安装内核与根文件系统以及系统的更新时使用此模式。</P>
<P><STRONG>       Boot Loader的具体实现<BR><BR>       硬件配置</STRONG><BR><BR>       本文以UP-NetARM3000为例来介绍Boot Loader的工作机理和运行流程。UP-NetARM3000使用的是三星公司生产的S3C44B0X芯片,这是三星公司推出的一款高性价比和高性能的微控制器。它具有32位的ARM7TDMI内核,外部时钟为8MHz,内部倍频最高可达72MHz,工作频率为64MHz。S3C44B0X通过提供全面的、通用的片上外设,大大减少了系统中处理器以外的元器件配置,从而使系统的成本大大降低,它集成的各种片上功能包括:8KB Cache、扩展内存控制器、2通道UART带有握手协议、1通道SIO、2个通用DMA、2个外设用DMA、外部存储控制器、LCD控制器、IIC/IIS总线接口、5个通道PWM定时器和一个内部定时器、看门狗定时器、71个通用I/O口、8个外部中断源、8通道10位ADC、片上PLL时钟产生器等。<BR><BR><STRONG>       Boot Loader的启动流程</STRONG><BR><BR>       大多数Boot Loader通常都分为Stage1和Stage2两大部分。Stage1通常由汇编语言编写,即Boot Loader的启动代码,旨在对部分硬件设备进行初始化。Stage2即Boot Loader的主代码,为了实现更加复杂的功能,使代码具有更好的可读性和可移植性,通常由C语言来实现,主要用来加载操作系统内核。 具体启动流程如图1所示。<BR><BR>      <STRONG> · Stage1部分<BR><BR>       设置CPU的速度、时钟频率及中断控制寄存器<BR></STRONG><BR>       Boot Loader的启动代码首先定义了一个全局入口,然后对异常向量进行设置。由于Boot Loader严重的依赖于硬件而实现,因此根据CPU体系结构和具体的硬件配置来设置CPU的速度、时钟频率及中断控制寄存器。除完成上述功能,启动代码还需要实现禁止看门狗定时器、设置时钟控制寄存器、设置锁相环控制寄存器、使能所有功能单元块时钟等功能。另外,系统中断的设置也是在这部分实现的,主要是中断向量表和IRQ中断入口地址的设置。<BR><BR></P>
相关资讯