欢迎访问ic37.com |
会员登录 免费注册
发布采购

Bootloader的工作原理与功能

日期:2012-8-21标签: (来源:互联网)

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减、适应应用系统对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统是一个层次性结构,从底层到应用分别是:硬件、启动引导程序、嵌入式操作系统(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段初始化是运行C代码前必要条件。C语言函数编译必须提供堆栈存放临时变量、调用位置、寄存器信息。除堆栈外,需DATA段和BSS段存放C代码中有初始值的全局或静态变量以及没有指定初始值的全局变量。