微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > U-Boot在LPC2210上的移植分析

U-Boot在LPC2210上的移植分析

时间:03-22 来源:互联网 点击:

1.引言

Bootloader是嵌入式软件开发的第一个环节,它为最终加载操作系统内核映像建立了正确的环境。U-Boot是一个开放源代码的启动引导加载程序。笔者以PHILIP公司生产的LPC2210 处理器为硬件基础,详细分析了U-Boot软件启动流程,以及针对U-Boot源码本身并不支持的LPC2210处理器应用U-Boot作为 Bootloader的移植方法,最后给出了U-Boot在LPC2210上的移植实例。

2.Bootloader简介

Bootloader(引导加载程序)是系统加电后运行的第一段软件代码。通过运行Bootloader程序,可以初始化硬件设备,建立系统的内存空间映射图,从而将系统的软硬件环境带到一个适合的状态,以便为最终调用操作系统内核准备好正确的环境。最终,Bootloader把操作系统内核映像加载到RAM中,并将系统控制权传递给它。通常Bootloader对硬件的依赖性非常强,特别是在嵌入式系统世界,因此,在嵌入式系统世界里建立一个通用的Bootloader几乎是不可能的。这就要求开发人员根据不同的硬件环境来开发适合自己开发板的Bootloader程序。

3.U-Boot软件结构

U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持多种主流嵌入式操作系统。这是U-Boot 中universal的一层含义。另外一层含义则是U-Boot能够支持MIPS、ARM、XScale等诸多常用系列的处理器。这两个特点正是U- Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。U-Boot软件在顶层目录下有18个子目录,分别存放和管理不同的源程序。这些目录按照其不同的规则可以分为三类:

(1)与处理器体系或开发板硬件直接相关,例如:/board,/cpu,/include等;

(2)一些通用的函数或者驱动程序,例如:/lib_arm,/driver,/Dtt,/common等;

(3)U-Boot的应用程序,工具或者文档,/tools,/Doc,/Fs,/Post,/net等。

4.启动流程分析

U-Boot软件的启动程序分为Stage1和Stage2两个阶段。依赖于CPU体系结构的代码,通常都放在Stage1中,Stage1主要完成:硬件设备初始化;为加载Stage2准备RAM空间,复制Stage2到RAM空间中;设置堆栈;跳转到Stage2的C入口点。Stage2通常用 C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和移植性,在Stage2主要完成:初始化本阶段要使用的硬件设备;检测系统内存映射;将kernel映像和根文件系统映像从Flash上读到RAM空间;设置内核启动参数,调用内核。

5.LPC2210下移植实例

5.1移植前准备工作

移植过程中要从软件和硬件两个方面准备。首先在Linux操作系统平台下移植适合LPC2210处理器的交叉编译环境,直接下载arm-elf- tools-20040427.sh,将它拷贝到根目录并增加其可执行权限,通过/arm-elf-tools-20040427.sh命令运行脚本,查看/usr/local/bin目录下有arm-elf开头的编译环境文件则证明交叉编译环境安装成功。

开发板硬件平台是基于ARM7TDMI RISC内核的LPC2210处理器,由于Bootloader软件是和底层的硬件是紧密相关的,所以在移植前要充分了解与移植有关的开发板硬件信息包括:系统硬件器件地址空间分配,初始化CPU流程、NOR FLASH,RAM驱动及擦写芯片时序、网络芯片驱动等。移植相关的硬件框图如图1所示:

硬件框图 图1

U-Boot移植相关硬件地址空间分配为:FLASH 2MB 0x80000000~0x801FFFFF;PSRAM 8MB 0x81000000~0x817FFFFF;以太网控制器RTL8019 0x83400000~0x8340001F。由于U-Boot源码包中已经包含强大的网络技术的支持和丰富的硬件驱动代码,因此移植U-Boot到新的开发板我们上只需修改和硬件相关代码。

移植U-Boot工作就是添加开发板硬件相关文件、配置选项、然后配置编译。由于目前U-Boot并不支持LPC2210处理器,比较后我们选择与 LPC2210同基于ARM7TDMI-S架构的S3C44B0处理器及相关的B2开发板,以S3C44B0和B2开发板为基础来完成移植工作。

首先在cpu目录下建立lpc2210目录并在其下建立和处理器移植相关文件,为开发板取名为dx2210并在board文件夹下建立dx2210 子目录,在SHELL环境下输入命令cp –rf board/dave/B2 board/dx2210将B2开发板的内容复制到dx2210中,并注意修改文件中开发板名称;在include/configs文件夹中建立配置头文件dx2210.h,用命令cp include/configs/B2.h include/configs/dx2210.h将B2.h文件的内容复制到dx2210.h中以便与后面修改;修改顶层Makefile文件为开发板建立新的编译选项,由于U-Boot的源代码是通过GCC和Makefile组织编译的。在源代码顶层目录下的Makefile首先设置开发板的定义,然后递归

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top