微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于PXA272的Bootloader的设计与实现

基于PXA272的Bootloader的设计与实现

时间:09-17 来源:互联网 点击:
1前言

PC机中的引导程序一般由BIOS和位于MBR的OSBootloader(例如LILO或者GRUB)一起组成。然而在嵌入式系统中通常没有像BIOS那样的固件程序(有的嵌入式CPU有),因此整个系统的加载启动任务就完全由Bootloader来完成。但是随着嵌入式系统的发展,Bootloader已经逐渐在基本功能的基础上进行了扩展,Bootloader可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。编写BootLoader是开发WinCE系统第一步,也是关键的一步。只有得到一个稳定工作的Loader程序,才能够更进一步开发WinCE的BSP,直至最后整个系统的成功。

2硬件平台结构

我们的硬件平台采用PXA 272 作为处理器,工作频率为512M HZ,内部集成了64 M bytes NOR Flash。Intel PXA27X处理器是Intel公司推出的32位,基于Xscale架构的高性能的嵌入式芯片。硬件平台结构中主要还包括了如下的主要器件:128 M SDRAM、AC97 codec、 LCD 控制器、IrDa芯片、蓝牙UART、USB控制器。另外还集成了3.5吋、240×320 QVGA的TFT-LCD 触摸屏、PCMCIA、SD/MMC等外设接口,WLAN模块。

Intel的PXA 27X内部支持SD Host的控制模块,有SD Host控制寄存器和可以用于SD Host控制器的IO引脚,可用编程的方法对其功能进行选择;但对于SD卡的检测,写保护和插槽的电源使能

等功能没有专门的引脚。在本文实现中,对于卡检测、电源引脚,通过GPIO扩展来实现。和SD卡硬件相关的部分引脚定义如表1所示:

表1 PXA 272部分GPIO引脚功能定义

信号

方向

Intel 272功能引脚

说明

SD_nPWREN

输入

SDPWEN/GPB2

SD插槽电源使能信号线

SD_DATA3

输入/输出

SDDATA0/GPF5

4bit模式:DATA3

SD_DATA2

输入/输出

SDDATA0/GPF4

4bit模式:DATA2

SD_DATA1

输入/输出

SDDATA0/GPE5

4bit模式:DATA1

SD_DATA0

输入/输出

SDDATA0/GPG2

4bit模式:DATA0

SD_CMD

输入/输出

SDCMD/GPG1

SD命令线

SD_CLK

输入

SDCLK/GPF3

SDIO/SD卡时钟线

SD_nCD

输出

EINT23/GPF1

SD卡检测引脚

SD_WP

输出

GPC3

SD卡写保护引脚

3Bootloader的设计和实现

一个嵌入式WinCE系统从软件的角度看通常可以分为两部分:Bootloader 和 Wince嵌入式系统。从Bootloader和Wince嵌入式系统的关系看,Bootloader包含两种不同的操作模式:“本地启动”模式和“下载启动”模式。在本地启动模式下Bootloader从Flash上将Wince操作系统加载到RAM中运行。在下载启动模式下,目标机上的Bootloader将通过串口或者网络连接或者USB等从主机下载操作系统文件,也可以直接从SD/MMC卡、CF卡上加载操作系统镜像文件。在下载启动模式下,Bootloader通过串口给用户提供简单的命令行接口。

3.1Bootloader的流程

当系统上电后,ARM CPU会从物理地址零处开始执行第一条指令的执行,通常会在该地址处放置一条跳转指令。在我们的硬件平台中物理地址零是64M Flash的物理起始地址。这里值得需要说明的是64M Flash 是固化在Intel PXA 272中的。所以我们的Bootloader烧入也必须从Flash的物理地址零开始。Bootloader二进制文件的最前面的4个字节就是一条跳转指令。

接着系统会跳转到一段用ARM汇编编写的代码中去执行。其作用是完成系统启动所必须的最小配置,例如配置cpu的工作频率,配置GPIO,配置时钟等。然后为我们处理器的工作模式设置栈指针。

接着把Bootloader从Flash搬运到SDRAM中,配置MMU,创建页表,使能MMU,然后把自己后半部重定位到SDRAM中去执行。在后半部的执行中会根据用户做的动作(是否按住一个按钮)来判断是要本地启动还是下载启动。具体的流程图如图1所示。

当用户选择特定下载启动方式后,就进入具体的下载流程。首先需要对用户选定的介质的硬件进行必要的初始化。之前做的一些硬件的初始化是不够的,因为没必要在前面进行全面的硬件初始化,现在要具体使用了就需要进行具体的配置。

3.2软件实现的关键

Bootloader是依赖于硬件而实现的,特别是在嵌入式系统中。不同的体系结构需求的Bootloader是不同的;除了体系结构,Bootloader还依赖于具体的嵌入式板级设备的配置。所以根据不同的板级配置需要修改相应的Bootloader。我们使用的bootloader是Microsoft提供的和Wince配套的Eboot。下面几点是在我们的硬件平台上修改Eboot的关键。

3.2.1配置内存映射表

WinCE嵌入式系统通过定义OEMAddressTable来定义虚拟内存到物理内存的映射表.这个表在我们的实现中是bootloader和WinCE系统公用的。当然这不是强制性的.我们需要根据硬件平台的不同定制自己的映射表。在我们的设计中,这个表把4GB的物理空间映射到512M的

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

网站地图

Top