新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PXA272启动引导程序的实现和功能扩展

PXA272启动引导程序的实现和功能扩展

作者:时间:2012-04-16来源:网络收藏

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减、适应应用系统对、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统是一个层次性结构,从底层到应用分别是:硬件、、嵌入式操作系统(Linux)、文件系统、应用系统。系统上电或硬件复位后,CPU执行的第一段代码就是在嵌入式Linux系统的设计与的过程中起着重要的作用。

本文引用地址:http://www.eepw.com.cn/article/171602.htm

1、Bootloader的工作原理与

1.1 工作原理

Bootloader是系统内核运行之前运行的代码,BootLoader完成内核加载启动。嵌入式系统开发过程,常涉及底层BOOT LOADER移植,操作系统引导、应用程序运行都与Bootloader有关,所以说Bootloader移植是嵌入式系统开发基础。不同CPU体系结构对应不同Bootloader,另外Bootloader的也依赖于具体板级硬件。

嵌入式开发首先根据目标板特性开发Bootloader,依次完成下面任务:初始化底层硬件(CPU、存储器);设置堆栈、Cache;代码重定向;加载内核、文件系统映像;设置内核启动参数;启动内核,控制权转交给操作系统。

1.2 Bootloader主要
设计一个Bootloader,须具备以下基本功能:
l 正确初始化硬件,使系统平台正常启动。
l 提供映像文件加载接口,通过串口、网口下载映像到Flash,为内核启动作准备。
l 加载Linux内核到RAM中,启动内核和文件系统,并进一步启动应用程序。

而完备的Bootloader,还可以测试功能:
l 开发板设计开发调试过程,Bootloader通过交互界面与系统平台交互,测试平台器件。
l 开发阶段,可以用于调试内核。系统内核能正常启动是Bootloader的最终目标。
l 提供串口交互的命令控制台。支持配置功能:设置IP,MAC,系统时间等。

Bootloader有两种操作模式:启动加载模式和下载模式;启动加载模式是开发板发布后提供的稳定工作模式;下载模式一般是在开发阶段的工作模式,提供串口交互界面。

2、硬件平台

Pxa272是最新推出的32位XScale RISC核心微处理器,兼容ARMv5TE指令;工作频率可达520MHz;采用7级超流水线结构;支持Intel Wireless MMXTM指令集增强多媒体处理功能;动态电源管理低功耗;提供32KB D/I Cache;集成64M Flash和265K SRAM;

硬件平台是基于Pxa272微处理器的自研发的开发板Uranium V0.90。硬件结构中的主要器件:AC97、SDRAM、TFT LCD、触摸屏、网络LAN、PCMCIA插槽等外设。

3、Bootloader映像文件结构设计

Bootloader结构由链接脚本决定,链接脚本用于控制目标文件格式。决定如何将各目标文件合并起来并安排数据和符号的位置。通常在编译的最后一步完成。脚本主要目的描述如何将输入文件的各段映射到输出文件中,控制目标文件的布局。脚本文件Uranium.lds的结构:
OUTPUT_ARCH(arm)//指定ARM目标板体系结构
ENTRY(_start) //_start为程序入口
SECTIONS { . = 0x00000000;
__boot_start = .; //汇编中指定的boot起址
.start ALIGN(4) : { *(.text.start)} //文件text段
.text ALIGN(4) : { *(.text) }
.rodata ALIGN(4) : {*(.rodata)} //只读data段
.data ALIGN(4) : {*(.data) } //可读写data段
.got ALIGN(4) : {*(.got) } //全局偏移量表
__boot_end = .; //bootloader终址
.bss ALIGN(16) :{*(.bss) } //未初始化data段
……}

ARM体系结构微处理器在复位后PC指向0x00000000,片载Flash连接在nCS0上,将Flash映射到0x00000000作为启动存储器。

4、Bootloader的实现与

启动引导程序分成硬件初始化(Boot)和内核加载两个部分(Loader);Boot部分与处理器体系结构紧密相关,通常用汇编语言实现;Loader部分在完成硬件初始化后,将加载映像文件并启动内核,这部分一般用C语言实现。

4.1硬件初始化(Boot)

可执行Boot映像必须且只有一个全局入口。在汇编文件Start.S中指定入口:
_start : b start
Bootloader由多个文件组成。首先是汇编语言实现的Start.S,完成底层硬件初始化:
start: bl define_gpio //设置gpio
bl enable_cpu //设置CPU时钟
bl setup_memory //初始化静动态存储器
bl relocate_boot //复制boot代码
bl setup_stack //建立堆栈
bl clear_bss //清除bss段
ldr pc, =main //跳转到C代码

切换CPU工作模式、屏蔽中断。启动引导程序不需要处理中断,所以要屏蔽所有中断。

设置CPU:提供动态时钟和电源管理,可以根据应用负荷,选择CPU的工作模式;PXA272电源管理提供四种工作模式:Turbo模式、运行模式、空闲模式、睡眠模式。

建立堆栈和清除数据区:堆栈、DATA、BSS段初始化是运行C代码前必要条件。C语言函数编译必须提供堆栈存放临时变量、调用位置、寄存器信息。除堆栈外,需DATA段和BSS段存放C代码中有初始值的全局或静态变量以及没有指定初始值的全局变量。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭