一、 BootLoader简介(ZZ):
对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程,这个引导程序就叫作Bootloader。
Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。
对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。
反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。
二、 U-Boot工程简介(ZZ):
最早,DENX软件工程中心的Wolfgang Denk基于8xxrom的源码创建了PPCBOOT(PowerPC Boot)工程,并且不断添加处理器的支持。后来,Sysgo Gmbh把ppcboot移植到ARM平台上,创建了ARMboot工程。然后以ppcboot工程和armboot工程为基础,创建了U-Boot工程。
现在U-Boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码Bootloader。目前仍然由DENX的Wolfgang Denk维护。
U-Boot的源码包可以从sourceforge网站下载,还可以订阅该网站活跃的U-Boot Users邮件论坛,这个邮件论坛对于U-Boot的开发和使用都很有帮助。
U-Boot软件包下载网站:http://sourceforge.net/project/u-boot。
U-Boot邮件列表网站:http://lists.sourceforge.net/lists/listinfo/u-boot-users/。
DENX相关的网站:http://www.denx.de/re/DPLG.html。
三、 U-Boot源码结构(ZZ):
从网站上下载得到U-Boot源码包,解压就可以得到全部U-Boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。
这些目录中所要存放的文件有其规则,可以分为3类:
第1类目录与处理器体系结构或者开发板硬件直接相关;
第2类目录是一些通用的函数或者驱动程序;
第3类目录是U-Boot的应用程序、工具或者文档。
U-Boot的源代码包含对几十种处理器、数百种开发板的支持。可是对于特定的开发板,配置编译过程只需要其中部分程序。
四、 U-Boot的移植(ZZ):
U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。
开始移植U-Boot之前,先要熟悉硬件电路板和处理器。确认U-Boot是否已经支持新开发板的处理器和I/O设备。假如U-Boot已经支持一块非常相似的电路板,那么移植的过程将非常简单。
移植U-Boot工作就是添加开发板硬件相关的文件、配置选项,然后配置编译。
开始移植之前,需要先分析一下U-Boot已经支持的开发板,比较出硬件配置最接近的开发板。选择的原则是,首先处理器相同,其次处理器体系结构相同,然后是以太网接口等外围接口。还要验证一下这个参考开发板的U-Boot,至少能够配置编译通过。
移植U-Boot的基本步骤如下:
(1)在顶层Makefile中为开发板添加新的配置选项。
(2)创建一个新目录存放开发板相关的代码,并且添加文件。
(3)为开发板添加新的配置文件。如果是为一颗新的CPU移植,还要创建一个新的目录存放CPU相关的代码。
(4)配置开发板(make XXXX_config)。
(5)编译U-Boot(make)。执行make命令,编译成功可以得到U-Boot映像。U-Boot编译成功可以得到下表中的文件:
表 U-Boot编译生成的映像文件
文 件 名 称 |
说 明 |
文 件 名 称 |
说 明 |
System.map |
U-Boot映像的符号表 |
u-boot.bin |
U-Boot映像原始的二进制格式 |
u-boot |
U-Boot映像的ELF格式 |
u-boot.srec |
U-Boot映像的S-Record格式 |
U-Boot的3种映像格式都可以烧写到Flash中,但需要看加载器能否识别这些格式。一般u-boot.bin最为常用,直接按照二进制格式下载,并且按照绝对地址烧写到