BIOS,BootLoader,Uboot。

一个嵌入式系统从软件角度来看分为三个层次:
1.引导加载程序
包括固化在固化中的boot程序(可选),和BootLoader两大部分
2.linux内核
特定于嵌入式平台的定制内核
3.文件系统
包括了系统命令和应用程序

BIOS:
BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

BootLoader:
BootLoader是一段小程序,可以把它想象成PC机linux上的GRUB/LILO引导程序,只不过在嵌入式linux中,没有BIOS,而是直接从flash中运行,来装载内核。它可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。

Bootloader有 两种启动方式,分别对应着成熟的产品和开发中的产品,分别是: 启动加载模式下载模式
  • 启动加载模式
在系统启动时,运行Bootloader,当Bootloader准备好加载内核的环境后就直接从FLASH中拷贝内核镜像到内存,并且运行内核。
  • 下载模式
该模式适合开发者。在开发过程中,所有东西都没有定型,需要经常性的修改。所以一般不会将内核放到目标板上面,而是存在在宿主机 上,通过串口、USB、网络将内核传递到目标板上。串口传输协议有xmodem、ymodem、zmodem;网络传输有tftp、nfs。一般采用TFTP传输,因为网络传输速度快很多。

Bootloader的启动分为 多阶段单阶段两种方式。多阶段启动的Bootloader有更好的移植性,而且能实现更复杂的功能。第一阶段用汇编语言实现,第二阶段用C语言实现。
  • 第一阶段
1.硬件设备初始化
2.为加载Bootloader的第二阶段代码准备RAM空间
3.复制Bootloader的第二段代码到RAM空间中
4.设置好栈
5.跳转到第二阶段代码的C入口点

在第一阶段的硬件初始化包括关闭watchdog、设置为SVC模式、关闭中断、设置CPU的速度和时钟频率、RAM初始化等。
这些并不都是必须的,比如设置CPU的速度和时钟频率可以放在第二阶段。
其实将第二阶段拷贝到RAM中也不是必须的,对于NOR Flash可以直接在上面运行代码,但是效率将会降低。对于NAND FLASH必须要进行第二段代码的拷贝,因为一般Bootloader的二进制文件大于100K,而S3C2440内部自带的RAM才4K,不足以存放整个Bootloader。
  • 第二阶段
1.初始化本阶段要使用的硬件设备(串口、网卡、NAND FLASH对于下载模式是必须的)
2.检测系统内存映射(确定板上使用了多少内存、它们的地址空间)
3.将内核镜像和根文件系统镜像从FLASH上读到RAM空间(对于不在FLASH上的内核和文件系统不执行)
4.为内核设置启动参数


为什么需要进行bootloader移植?
答:1.因为每种不同的CPU体系结构都有不同的BootLoader
2.BootLoader依赖于具体的嵌入式板级设备的配置

Uboot:
Uboot用于多种嵌入式CPU的BootLoader程序----多个BootLoader程序运行
支持多种嵌入式操作系统的引导
UBOOT目录结构
1.Borad        与开发板有关的文件。第一个开发板都以一个子目录出现在当前目录中
2.Common    实现Uboot支持的命令
3.Cpu        与特定CPU架构相关的代码,支持的CPU对应一个子目录(注意CPU与开发板的区别)
3.Disk        对磁盘的支持
4.Doc        文档目录
5.Drivers    Uboot支持的设备驱动程序  如各种网卡、串品、USB、支持CFI的Flash
6.Fs         文件系统的支持
7.Iclude    Uboot使用的头文件。该目录下configs目录有与开发板相关的配置头文件        该目录下的asm目录有与CPU体系结构相关的头文件
8.Net        与网络协议相关的代码    各路协议的实现
9.Tools        生成Uboot的工具,如:mkimage,crc等等

Uboot编译分为两步
1.执行每种board相关的配置    如:make amdk_2420
2.编译生成uboot.bin文件        如:make CROSS_COMPILE=arm-linux-(指定正确路径)



你可能感兴趣的:(BIOS,BootLoader,Uboot。)