您的位置:首页 > 其它

Uboot学习总结

2015-08-05 10:28 120 查看
文章是一年前做项目时候写的,现在有时间将其贴出来,其中大部分引用http://www.ibm.com/developerworks/cn/linux/l-btloader/上描述,这里特作说明。

一 、概念
1.1 、嵌入式 Linux 系统结构

从软件的角度看,嵌入式 Linux 系统结构通常可以分为四个层次:

1> 引导加载程序:包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。固化在硬件中的代码,是芯片生产时被厂商固化在芯片ROM中的,一般作为Boot Loader的引导程序;

2> Linux内核:管理驱动设备、内存、进程以及进程间的通信;

3> 文件系统:包括根文件系统和建立于 Flash 内存设备之上文件系统,提供管理系统的配置文件以及良好的用户程序运行环境(常见ubifs、cramfs、ysffs2等等);

4> 用户应用程序:特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。

下图1.1.1就是由Boot Loader、内核的启动参数、内核映像和根文件系统映像组成的固态存储设备的典型空间分配结构图。



图1.1.1

1.2、Boot Loader的概念

简单地说,BootLoader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境配置为合适的状态,以便为最终调用操作系统内核准备好运行环境。Linux 内核的启动除了内核映像必须在主存的适当位置外,CPU还必须具备一下的条件:

1> CPU 寄存器的设置:
R0=0;
R1=Machine ID(即Machine
Type Number,定义在linux/arch/arm/tools/mach-types);/*不同的架构会在不同的目录下*/
R2=内核启动参数在 RAM
中起始基地址;

2> CPU 模式:

必须禁止中断(IRQs 和FIQs);
CPU 必须 SVC
保护模式;

3> Cache 和 MMU
的设置:

MMU 必须关闭;
指令 Cache 可以打开也可以关闭;
数据 Cache
必须关闭;

而在 CPU 刚上电启动的时候,一般内存控制器都没有初始化过的,根本无法在主存中运行程序,更不可能处在Linux 内核启动环境中。为了初始化CPU 及其他外设,使得Linux内核可以在主存中运行,并让系统符合Linux内核启动的必备条件,所以要有一个先于内核运行的BootLoader程序。
BootLoader 是在操作系统内核启动之前运行的一段小程序。通过这段程序,可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,最后从别处(Flash、以太网、UART)载入内核映像到主存并跳到入口地址启动linux系统内核。

1.3、Boot Loader功能模式

BootLoader大都有两个不同的操作模式:一是启动加载(Bootloading)模式、一是下载(Downloading)模式。

启动加载模式:这也是Boot Loader的最基本模式,即:加载文件系统到RAM中运行。在该模式中不需要用户参与其中。该模式中BootLoader起来之后,检测硬件配置,并将外围硬件初始化,为kernel的启动配置环境。

下载模式:也可以称做是升级模式或者Boot Loader命令行模式,在该模式下用户可以通过各种手段进行文件系统甚至是BootLoader的升级,也可以通过相应的命令来检测外围设备。一般在启动时,在外围设备初始化后,BootLoader会检测用户是否触发进入该模式,如果不进入这种模式则去加载kernel,并启动运行kernel。

1.4、uboot简介

UBoot(Universal Boot Loader)是Das UBoot的简称,是遵循GPL条款的开放源码项目。最早由德国DENX软件工程中心的Wolfgang Denk基于8xxROM 和FADSROM的源码创建了PPCBoot工程项目。之后,由Sysgo Gmbh把PPCBoot移植到ARM平台上,创建了ARMBoot工程项目。最终,以PPCBoot工程和ARMBoot工程为基础,创建了U-Boot工程,2002年12月17日第一个版本U-Boot-0.2.0发布。U-Boot作为一个主流、通用的BootLoader,已经支持包括PowerPC、ARM、X86
、MIPS、NIOS、XScale等主流体系结构,成为功能最多、灵活性最强,并且开发最积极的开源BootLoader。
最早Uboot 的版本号是由X.Y.Z 来表示的,从0.2.0一直发展到1.3.4。之后便开始使用年份加月份的表示方法,从2008.11到现在的2010.3平均每3 个多月出一个新版本。每次代码的结构和定义都会有一些修正和改进,其代码越来越规整,功能越来越强,但是移植的难度反而越来越小。目前最新的版本已经更新到2014.04版本,官方代码下载:ftp://ftp.denx.de/pub/u-boot/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: