PXA272启动引导程序的实现和功能扩展
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减、适应应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统是一个层次性结构,从底层到应用分别是:硬件、启动引导程序、嵌入式操作系统(Linux)、文件系统、应用系统。系统上电或硬件复位后,CPU执行的第一段代码就是启动引导程序,启动引导程序在嵌入式Linux系统的设计与实现的过程中起着重要的作用。
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硬件平台
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,PXA272片载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:PXA272提供动态时钟和电源管理,可以根据应用负荷,选择CPU的工作模式;PXA272电源管理提供四种工作模式:Turbo模式、运行模式、空闲模式、睡眠模式。
建立堆栈和清除数据区:堆栈、DATA、BSS段初始化是运行
功能 扩展 实现 程序 启动 引导 PXA272 相关文章:
- 基于DSP数字多功能板的实现(09-08)
- 基于DSP2407的多功能电源控制系统设计(09-08)
- DVR操作系统分析(07-23)
- 基于PROTEUS技术的ARM7显示系统设计与仿真实现(11-22)
- 一种大型软件测试方法(08-01)
- 嵌入式软件三大潜在问题及其测试技术(01-13)