U-Boot(Universal Bootloader),即通用Bootloader,是遵循GPL条款的开放源码项目,从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其前身是由德国DENX软件工程中心的WolfgangDenk基于8xxROM的源码创建的PPCBOOT工程。其源码目录、编译形式与Linux内核很相似。事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,从U-Boot源码的注释中能体现这一点。但是,U-Boot不仅支持嵌入式Linux系统的引导,还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器的支持最丰富,对Linux的支持最完善。其他系列的处理器和操作系统基本是在2002年11月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡很大程度上归功于U-Boot的维护人德国DENX软件工程中心的WolfgangDenk[以下简称W.D]的精湛专业水平和不懈的努力。当前,U-Boot项目在W·D的领军之下,众多有志于开放源码BOOTLOADER移植工作的嵌入式开发人员将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
U-Boot有如下特性:
●开放源码,支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS和LynxOS。
●支持多个处理器系列,如PowerPC、ARM、x86、MIPS和Xscale。
●较高的可靠性和稳定性。
●高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求和产品发布等。
●丰富的设备驱动源码,如串口、以太网、SDRAM、Flash、LCD、NVRAM、EEPROM、RTC和键盘等。
●较为丰富的开发调试文档与强大的网络技术支持。
●支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统。
●支持NFS挂载、从Flash中引导压缩或非压缩系统内核。
●可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最强。
●支持目标机环境变量的多种存储方式,如Flash、NVRAM和EEPROM等。
●CRC32校验,可校验Flash中的内核、RAMDISK映像文件是否完好。
●上电自检功能:SDRAM、Flash大小自动检测,SDRAM故障检测,CPU型号。
●特殊功能:XIP内核引导。
U-Boot软件包下载网站:http://sourceforge.net/project/u-boot。
U-Boot邮件列表网站:http://lists.sourceforge.net/lists/listinfo/u-boot-users/。
1.U-Boot源码结构
从网站上下载得到U-Boot源码包。例如,U-Boot-1.1.26tar.bz2,解压就可以得到全部的U-Boot源程序。在顶层目录下有26个子目录,分别存放和管理不同的源程序。这些目录中所存放的文件有其对应的规则,可以分为4类。
●第1类目录与处理器体系结构或者开发板硬件直接相关。
●第2类目录是一些通用的函数或者驱动程序。
●第3类目录是通用的设备驱动程序。
●第4类目录是U-Boot的应用程序、工具或者文档。
表3-1列出了U-Boot顶层目录下各级目录的功能与作用。
表3-1 U-Boot顶层目录下各级目录的功能与作用
U-Boot的源代码包含对几十种处理器、数百种开发板的支持。可是,对于特定的开发板,配置编译过程只需要其中部分程序。这里以S3C2410arm920t处理器为例,具体分析S3C2410处理器和开发板所依赖的程序,以及U-Boot的通用函数和工具。(www.xing528.com)
2.U-Boot的编译
U-Boot的源码是通过GCC和Makefile组织编译的。顶层目录下的Makefile首先可以设置开发板的定义,然后递归地调用各级子目录下的Makefile,最后把编译过的程序链接成U-Boot映像。
顶层目录下的Makefile负责U-Boot的整体配置编译。每一种开发板在Makefile都需要有板配置的定义。除了编译过程Makefile以外,还要在程序中为开发板定义配置选项或者参数。这个头文件是include/configs/<board_name>.h。<board_name>用相应的BOARD定义代替。
这个头文件中主要定义了两类变量:
●一类是选项,前缀是CONFIG_,用来选择处理器、设备接口、命令和属性等。例如:
●另一类是参数,前缀是CFG_,用来定义总线频率、串口波特率和Flash地址等参数。例如:
根据对Makefile的分析,编译分为2步。第1步配置,例如:makesmdk2410_config;第2步编译,执行make就可以了。
编译完成后,可以得到U-Boot各种格式的映像文件和符号表,见表3-2。
表3-2 U-Boot编译生成的映像文件
3.U-Boot的移植
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)为开发板添加新的配置文件。
4)配置开发板。
5)编译U-Boot。
6)添加驱动或者功能选项。在能够编译通过的基础上,还要实现U-Boot的以太网接口和Flash擦写等功能。
7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。
调试的过程可能是很艰难的,需要借助工具,并且有些问题可能会困扰很长时间。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。