嵌入式软件组成及u-boot介绍

来源:互联网 发布:电子商务发展数据 编辑:程序博客网 时间:2024/06/14 05:52

一、 嵌入式Linux软件结构与分布

一般情况下嵌入式Linux系统中的软件主要分为以下几部分:

1. 引导加载程序:其中包括内部ROM中的固化启动代码和BootLoader两部分。

内部固化ROM是厂家在芯片生产时候固化的,作用基本上是引导BootLoader。

有的芯片比较复杂,比如S5PV210FLASH中没有代码的时候有许多启动方式:

USB、UART、SD卡等。而S3C2440则比较简单,只有NOR boot和NAND boot。 

2. Linux内核和驱动。

3. 文件系统:包括根文件系统和建立于Flash存储器之上的文件系统(EXT4、UBI、CRAMFS、YAFFS等等)。它是系统的各种配置文件以及应用程序的运行环境及载体。

4. 应用程序:用户自定义的应用程序,存放于文件系统之中。 

在Flash存储器中,他们的分布一般如下:

二、 在嵌入式Linux中BootLoader的必要性

Linux内核的启动除了内核映像必须在主存的适当位置外,CPU还必须具备一定的条件:

CPU寄存器的设置

R0=0; 

R1=Machine ID(即Machine Type Number,定义在linux/arch/arm/tools/mach-types); 

R2=内核启动参数在RAM中起始地址; 

CPU模式

必须禁止中断(IRQs和FIQs); 

CPU必须SVC模式;

Cache和MMU的设置

MMU 必须关闭; 

指令Cache可以打开也可以关闭; 

数据Cache必须关闭;

但是在CPU刚上电启动的时候,一般连内存控制器都没有初始化过,根本无法在主存中运行程序,更不可能处在Linux 内核的启动环境中。为了初始化CPU及其他外设,使得Linux内核可以在主存中运行,并让系统符合Linux内核启动的必备条件,必须要有一个先于内核运行的程序,它就是所谓的引导加载程序(BootLoader)。 

而BootLoader并不是Linux才需要,而是几乎所有运行操作系统的设备都需要。我们的PC 的BIOS 就是BootLoader的一部分(只是前期引导,后面一般还有位于硬盘中的各种BootLoader),对于Linux PC来说,BootLoader= BIOS + GRUB/LILO。

三、 Bootloader

综上所述:BootLoader是在操作系统内核启动之前运行的一段小程序。通过这段程序,我们可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像到主存并跳到入口地址。

由于BootLoader需要直接操作硬件,所以它严重依赖于硬件,而且依据所引导的操作系统的不同,也有不同的选择。对于嵌入式世界中更是如此。就S3C2440而言,如果是引导Linux,一般选用韩国的mizi公司设计的vivi或者DENX软件工程中心的Das U-boot,如果是引导WinCE,就选用Eboot。如果是引导eCos系统,可以选用同是Redhat公司开发的Redboot。 

所以在嵌入式世界中建立一个通用的BootLoader几乎是不可能的,而可能的是让一个BootLoader代码支持多种不同的构架和操作系统,并让它有很好的可移植性。U-boot就是支持多平台多操作系统的一个杰出代表。这也是U-boot的优势所在,因为如果在开发S3C2440时熟悉了U-boot,再转到别的平台的时候,就可以很快地完成这个平台下U-boot的移植。而且U-boot的代码结构越来越合理,对于新功能的添加也十分容易。

四、 U-boot起源

U-Boot是Das U-Boot的简称,其含义是Universal Boot Loader,是遵循GPL条款的开放源码项目。最早德国DENX软件工程中心的Wolfgang Denk基于8xxROM和FADSROM的源码创建了PPCBoot工程项目,此后不断添加处理器的支持。而后,Sysgo Gmbh把PPCBoot移植到ARM平台上,创建了ARMBoot工程项目。最终,以PPCBoot工程和ARMBoot工程为基础,创建了U-Boot工程,2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMBoot停止维护。 

而今,U-Boot作为一个主流、通用的BootLoader,成功地被移植到包括PowerPC、ARM、X86、MIPS、NIOS、XScale等主流体系结构上的百种开发板,成为功能最多、灵活性最强,并且开发最积极的开源BootLoader。目前,U-Boot仍然由DENX 的Wolfgang Denk维护。