导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→Bootloader的工作原理与功能[原创][sz20120406]

 *第30737篇: Bootloader的工作原理与功能[原创]

  
楼 主:sz20120406 2012年4月11日12:47
 Bootloader的工作原理与功能[原创]
Bootloader的工作原理与功能
工作原理
Bootloader是系统内核运行之前运行的代码,BootLoader完成内核加载启动。嵌入式系统开发过程,常涉及底层BOOT LOADER移植,操作系统引导、应用程序运行都与Bootloader有关,所以说Bootloader移植是嵌入式系统开发基础。不同CPU体系结构对应不同Bootloader,另外Bootloader的实现也依赖于具体板级硬件。
嵌入式开发首先根据目标板特性开发Bootloader,依次完成下面任务:初始化底层硬件(CPU、存储器);设置堆栈、Cache;代码重定向;加载内核、文件系统映像;设置内核启动参数;启动内核,控制权转交给操作系统。
Bootloader主要功能
    设计一个Bootloader,须具备以下基本功能:
l    正确初始化硬件,使系统平台正常启动。
l    提供映像文件加载接口,通过串口、网口下载映像到Flash,为内核启动作准备。
l    加载Linux内核到RAM中,启动内核和文件系统,并进一步启动应用程序。
而完备的Bootloader,还可以扩展测试功能:
l    开发板设计开发调试过程,Bootloader通过交互界面与系统平台交互,测试平台器件。
l    开发阶段,可以用于调试内核。系统内核能正常启动是Bootloader的最终目标。
l    提供串口交互的命令控制台。支持配置功能:设置IP,MAC,系统时间等。
Bootloader有两种操作模式:启动加载模式和下载模式;启动加载模式是开发板发布后提供的稳定工作模式;下载模式一般是在开发阶段的工作模式,提供串口交互界面。
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插槽等外设。
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作为启动存储器。
Bootloader的实现与扩展
启动引导程序分成硬件初始化(Boot)和内核加载两个部分(Loader);Boot部分与处理器体系结构紧密相关,通常用汇编语言实现;Loader部分在完成硬件初始化后,将加载映像文件并启动内核,这部分一般用C语言实现。
硬件初始化(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代码中有初始值的全局或静态变量以及没有指定初始值的全局变量。
系统存储器初始化:通过配置功能寄存器来实现;在Pxa272上电后,SDRAM处于睡眠无时钟状态,初始化必须完成SDRAM状态机转化过程,相关的寄存器:MDREFR、MDCNFG等。SDRAM的状态转换通过配置存储器的相应位,产生对应的命令实现状态机转换[1]。
(本文由Cogo商城-IC元器件在线采购平台搜集整理,浏览 了解更多详细信息)


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:EMIF和I/O配置方法[原创]

[下一篇主题]:[原创]技术在深圳,深圳嵌入式培训哪里好?嵌入式培训机构在深圳该选择哪家好?