最新BootLoader的设计与实现学习资料
- 格式:ppt
- 大小:902.50 KB
- 文档页数:7
嵌入式系统中Bootloader 的设计与实现马学文1,朱名日1,2,程小辉1 (1. 桂林工学院电子与计算机系,桂林541004;2.中南大学信息物理工程学院,长沙410083)—97—作者所承研的项目中硬件平台是基于ARM7TDMIRISC 内核的三星公司S3C4510B 微处理器,采用的嵌入式Linux 系统为uCLinux。
系统有64MB SDRAM, 其地址从0x 0800.0000 ~0x0bff.ffff, 还有32MB Flash, 其地址从0x0c00.0000~0x0dff.ffff。
32MB Flash 具体规划如下:从0x0c00.0000 开始的第1 个1MB 放Bootloader,从0x0c10.0000开始的2MB放Linux kernel, 从0x0c30.0000开始的余下部分都给rootdisk。
64MB SDRAM 启动后的具体程序分布示意图如图2 所示。
图2 64MB SDRAM 的程序分布示意图Bootloader 一般有几个文件组成。
先是START.s,也是唯一的一个汇编程序,其余的都是C 语言写成的,START.s主要用来初始化堆栈:_start:ldr r1,=StackInit /* r1 是参数字符串的地址*/ldr sp,[r1]int main().equ StackInitValue,_end_data+0x1000/* 在连结脚本中指定4K __end_data*/StackInit:.long StackInitValue.global JumpToKernelJumpToKernel: /*拷贝内核的代码*/mov pc, r0 /*获得Kernel 地址*/.global JumpToKernel0x /*用来扩展内核*/JumpToKernel0x: /*拷贝获得的扩展内核*/mov r8, r0mov r0, r1mov r1, r2mov r2, r3mov r3, r4mov pc, r8.section“.data.boot”.section“.bss.boot”其中main 函数的C 语言实现过程如下:int main(){U32 *pSource, *pDestin, count;U8 countDown, bootOption;U32 delayCount;U32 fileSize, i;char c;char *pCmdLine;char *pMem;init(); /*初始化Flash 控制器和CPU 时钟*/EUARTinit(); /*串口初始化*/EUARTputString("\n\n Linux Bootloader\n"); /*打印信息*/ EUARTputString((U8 *)cmdLine); /*command_line 支持, 用于定制内核*/EUARTputString("\n\n");用command_line 可以给内核传一些参数,自己定制内核的行为。
BootLoader 实验【实验目的】1、了解BootLoader 的基本概念和框架结构2、了解BootLoader 引导操作系统的过程3、掌握bootloader 程序的编译方法4、掌握BootLoader 程序的使用方法【实验原理】1、bootLoader 的作用PC 机中的引导加载程序由BIOS 和位于硬盘MBR 中的OS Boot Loader 一起组成。
BIOS 在完成硬件检测和资源分配后,将硬盘MBR 中的Boot Loader 读到系统的RAM中,然后将控制权交给OS Boot Loader。
Boot Loader 的主要运行任务就是将内核映象从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
嵌入式系统中,通常并没有像BIOS 那样的固件程序,因此整个系统的加载启动任务完全由bootLoader 来完成。
bootloader 的主要作用:(1)、初始化硬件设备(2)、建立内存空间的映射图(3)、完成内核的加载,为内核设置启动参数2、bootLoader 程序结构框架嵌入式系统中的boot Loader 的实现完全依赖于CPU 的体系结构,因此大多数Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU 体系结构的代码,比如设备初始化代码等,通常都放在阶段1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。
而阶段2 则通常用C 语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的可读性和可移植性。
(1)、Boot Loader 的阶段1 通常主要包括以下步骤:. 硬件设备初始化;. 拷贝Boot Loader 的程序到RAM 空间中;. 设置好堆栈;. 跳转到阶段2 的C 入口点。
(2)、Boot Loader 的阶段2 通常主要包括以下步骤:. 初始化本阶段要使用到的硬件设备;. 系统内存映射(memory map);. 将kernel 映像和根文件系统映像从Flash 读到RAM 空间中;. 为内核设置启动参数;. 调用内核。
设计与应用计算机测量与控制.2009.17(2) Computer Measurement &Control ・389・中华测控网收稿日期:2008-07-03; 修回日期:2008-08-13。
基金项目:陕西省自然科学基金(2007F29);陕西省科技攻关项目(2007K04-01)。
作者简介:袁 磊(1983-),男,湖南衡阳人,硕士生,主要从事嵌入式系统方向的研究。
朱怡安(1960-),安徽人,教授,博导,主要从事嵌入式计算,移动计算方向的研究。
文章编号:1671-4598(2009)02-0389-03 中图分类号:TP36812 文献标识码:A嵌入式系统BootLoader 设计与实现袁 磊,朱怡安,兰 婧(西北工业大学计算机学院,陕西西安 710072)摘要:如何根据开发板的硬件资源,设计bootloader (引导加载程序)是嵌入式系统设计的重点与难点;通过分析系统的硬件组成,对bootloader 的功能,特点,结构及其主要任务进行了研究,对比分析了intel pxa250和intel pxa270的主要异同,以加载linux 操作系统内核为例,针对intel pxa270&linux 嵌入式系统开发平台,提出了一种利用uboot 实现bootloader 的软件设计与实现的新方法,从而成功引导加载操作系统内核;该设计具有一定的通用性,可广泛地应用到其他的处理器及其应用系统中;同时,详细阐述了uboot 的执行流程及其移植方法。
关键词:引导加载程序;PXA270;嵌入式系统;U -boot ;嵌入式linuxDesign and Implementation of BootLoader in embedded systemYuan Lei ,Zhu Y ian ,Lan Jing(College of Computer Science ,Northwestern Polytechnical University ,Xi πan 710072,China )Abstract :How to develop Bootloader on t he basis of specific hardware platform is a key point and difficulty of embedded system design.The paper do research on t he function ,character ,architecture and main tasks of bootloader t hrough analysing to t he organizition of system hardware.It compares t he main diferences and similarities between intel pxa250and intel pxa270.Taking loading linux operation system kernal as a example ,it introduces a new met hod on how to design and implement bootloader on t he basis of intel pxa270&linux embedded system platform.So as to sucessfully loading t he operation system kernel.The design has some flexibility and can be used to ot her proces 2sors and applications system easily.At t he same time ,it introduces how t he uboot is executed and how to transplant t he U -boot to PXA270in particular.K ey w ords :boot loader ;PXA270;embedded system ;U -boot ;embedded linux0 引言PXA270是Intel 公司生产的一款基于ARM9内核的32位RISC 芯片。
在嵌入式系统学习过程中涉及到了在嵌入式系统学习过程中涉及到了Bootloader,下面讲述了Bootloader的基本作用,在后续的文章中我将对如何编写自己的Bootloader进行介绍。
1. Bootloader的基本概念:简单地说,bootloader就是在操作系统内核运行前运行地一段小程序。
通过这段小程序,可以对硬件设备,如CPU、SDRAM、Flash、串口等进行初始化,也可以下载文件到系统板、对Flash进行擦除和编程,真正起到引导和加载内核镜像的作用,但是随着嵌入式系统的发展,bootloader已经逐渐在基本功能的基础上,进行了扩展,bootloader可以更多地增加对具体系统的板级支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。
从这个层面上看,功能扩展后bootloader可以虚拟地看成是一个微小的系统级的代码包。
bootloader是依赖于硬件而实现的,特别是在嵌入式系统中。
不同的体系结构需求的bootloader是不同的;除了体系结构,bootloader还依赖于具体的嵌入式板级设备的配置。
也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU构建,运行在其中一块电路板上的bootloader,未必能够运行在另一块电路开发板上。
BootLoader为系统复位或上电后首先运行的代码,一般应写在起始物理地址0x0开始。
Bootloader的启动过程可以是单阶段的,也可以是多阶段的。
通常多阶段的bootloader能提供更为复杂的功能,以及更好的可移植性。
从固态存储设备上启动的bootloader大多数是二阶段的启动过程,也即启动过程可以分为stage 1和stage 2两部分。
2. ARM Bootloader的一般作用对于一个ARM系统来说,本质上,bootloader作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:(1)初始化RAM(必需):bootloader必须能够初始化RAM,因为将来系统要通过它保存一些Volatile数据,但具体地实现要依赖与具体的CPU以及硬件系统。
讲解BOOTLOADER(启动代码)的运行机制,代码功能与实现方法。
1.为什么要编写启动代码启动代码是系统上电或复位以后运行的第一段代码,他的作用是在用户程序运行之前对系统硬件及软件环境进行必要的初始化并在最后使程序跳到用户程序.在此之前系统的所有硬件都是不好用的,初始化代码直接对ARM处理器内核及硬件控制器进行编程,所执行的操作与具体的目标系统紧密相关。
2.两种启动方式以及其中的区别根据代码存放位置,以及地址启动位置的区别,ARM支持两种方式的启动:Nor FLASH和 Nand FLASH2.1Nor FLASH启动代码运行方式从Nor FLASH启动时,与nGCS0相连的Nor FLASH就被映射到了nGCS0片选的空间,其地址被映射为0x00000000;因为Nor FLASH支持系统运行,所以不必考虑程序的搬移,只需保证系统上电后或者复位时代码从0开始即可。
2.2Nand FLASH启动代码运行方式从Nand FLASH启动时,芯片内部自带一块容量为 4K的BootSRAM会被映射到nGCS0片选的空间,起始地址被映射为0x00000000,因此,编写的启动代码要保证在0开始的地址处。
系统上电后,BootSRAM没有任何代码,ARM芯片通过硬件机制将Nand FLASH前4K的内容拷贝到其中,然后在BootSRAM中运行这4K的代码(0地址处),此种情况下要保证启动代码放在Nand FLASH的0地址处,启动代码要小于4K(只要RAM 初始化,搬移程序小于4K即可)。
所有程序编译链接后代码量小于4K时,程序不用考虑从 Nand FLASH搬移到SDRAM的问题,因为所有程序在启动时已全部在BootSRAM中,运行即可。
所有程序编译链接后代码量大于4K时,启动代码不只要有初始化内容,还要有一段搬移代码,将全部程序从Nand FLASH搬移到SDRAM,也就是系统启动时需要两次搬运,第一次将前4K搬移到BootSRAM,第二次将所有代码搬移到SDRAM中,其中第一次无需人工干预,硬件机制自动实现,第二次需要程序员编写代码实现。
基于ARM嵌入式系统的通用bootloader的设计与实现摘要随着移动设备的流行和发展,嵌入式系统已经成为一个热点。
它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。
它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要求。
嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。
最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE等等。
相应地,这也给处理器提出了要求。
当今,众多的半导体厂商都生产基于ARM体系结构的通用微处理芯片,ARM技术已经在当今的嵌入式微处理器领域中占据了它的领先地位。
究其原因,它的精简指令构架为主又不放弃与复杂指令平衡的设计,使得在获得高性能的同时又能做到低功耗。
本文所要研究的就是基于ARM嵌入式系统通用bootloader的设计与实现。
Bootloader是嵌入式系统中执行在核操作系统前的一段代码,它的基本作用就是加载核镜像。
在实践平台上,本课题硬件上采用了Intel Xscale系列的PXA255作为处理器,Xscale核心是与ARM V5TE构架兼容的,因此具有一定的代表性,并以此来搭建课题的硬件实践平台,软件上以Linux作为操作系统。
而在具体的实现上目标是除了实现bootloader的基本功能外,还将它实现成一个更加复杂的系统,即增加对硬件电路板的支持,以方便开发人员进行调试以及开发。
因此,本文重点阐述了实践上具体的设计,具体的实现以及简单评估了它的作用。
最后,对实现的bootloader进行了扩展:即在阐明ARM嵌入式系统中bootloader的一些共同点之后,介绍了如何对其他ARM系统进行移植,以做到通用性。
关键词:嵌入式系统 ARM Bootload目录摘要IAbstract II目录III绪言11.背景............................................................................. 12.主要研究工作.................................................................... 13.主要容........................................................................... 2第一章ARM简介.......................................................................... 31.1 ARM 简介........................................................................ 31.1.1 ARM处理器介绍.............................................................. 31.2 ARM处理器的优势特点.......................................................... 61.2.1 RISC指令集 ................................................................. 61.2.2低功耗....................................................................... 7第二章 ARM体系结构介绍................................................................... 82.1 ARM core描述.................................................................. 82.2编程模型介绍................................................................. 102.2.1 ARM处理器模式............................................................ 102.2.2 ARM寄存器组介绍.......................................................... 102.2.3 ARM存储系统 .............................................................. 122.2.4 ARM指令集介绍............................................................ 132.2.5 ARM体系的异常中断 ....................................................... 142.3 ARM最小系统描述............................................................. 152.4 Intel Xscale系统构架....................................................... 162.4.1 PXA255介绍 ............................................................... 18第三章 Bootloader的概念................................................................. 193.1 Bootloader的基本概念....................................................... 193.2 Bootloader的操作模式....................................................... 203.3 Bootloader的概念扩展....................................................... 203.4 ARM Bootloader的共性....................................................... 20第四章 Bootloader的设计与实现......................................................... 224.1研究的平台环境 .............................................................. 224.1.1硬件平台.................................................................. 224.1.2软件环境以及软件开发工具................................................ 234.2 Bootloader的总体设计....................................................... 234.2.1阶段设计.................................................................. 234.2.2地址规划设计.............................................................. 244.2.3模式设计.................................................................. 254.3 Bootloader的具体实现....................................................... 254.3.1阶段1的代码实现......................................................... 254.3.2阶段2的代码实现......................................................... 284.3.3代码的编译................................................................ 354.3.4目标文件的与转换......................................................... 364.4代码组织结构................................................................. 424.5使用操作..................................................................... 43第五章实验结果与测评................................................................. 445.1实验结果..................................................................... 445.1.1基本功能的实现结果....................................................... 445.1.2扩展功能的实现结果....................................................... 455.2程序性能..................................................................... 465.2.1扩展功能的功能性测试数据................................................ 465.2.2程序的可移植性 ........................................................... 46第六章总结与展望..................................................................... 47绪言1. 研究背景随着人民生活水平提高带来巨大的消费需求、信息化进程的推进、电信运营业的发展,信息产业市场空间将得到进一步拓展。
Bootloader学习笔记一.what is bootloader?Bootloader是一种独立的程序,类似于Application程序,尽管体积小,但具备启动代码、中断、主程序(Boot_main函数)和操作系统(可选)等“全部五脏”。
百度百科的词条解释:Bootloader是在加电后执行的第一段代码,完成CPU及相关硬件的初始化后,将操作系统映像或固化的嵌入式应用程序装载到内存,并跳转到操作系统空间启动运行。
下面是学习bootloader的系统路线:1.了解bootloader的定义:Bootloader是嵌入式系统在启动时执行的第一段代码,它完成硬件初始化,加载操作系统或固件。
2.掌握bootloader的工作原理:当系统开机时,CPU执行的是bootloader的代码,它读取存储设备(如硬盘,U盘,SD卡等)中的操作系统镜像或固件,加载到内存中,并进行跳转。
3.了解常见的bootloader的类型:如U-Boot,Grub等,并了解它们的特点和适用场景。
4.学习bootloader的开发:包括硬件初始化,文件系统的读取,代码的跳转等。
5.掌握bootloader的应用:比如系统升级,系统恢复等。
二.为什么需要bootloader?Bootloader是用于启动操作系统的引导程序,它是计算机启动过程中的第一个执行的程序。
需要Bootloader的原因有以下几点:1.引导操作系统:Bootloader负责读取和加载操作系统,并将控制权转交给操作系统。
2.进行硬件初始化:Bootloader初始化计算机硬件,确保操作系统能够正确识别和使用硬件。
3.提供系统恢复选项:Bootloader可以提供系统恢复选项,例如进入安全模式或恢复到原始配置。
4.实现多操作系统启动:Bootloader可以用于启动多个操作系统,例如通过引导菜单选择启动Windows或Linux操作系统。
因此,Bootloader是计算机启动过程中不可或缺的一部分,它起到了重要的辅助作用。
基于ARM 嵌入式系统的通用bootloader 的设计与实现绪论:随着嵌入式产品中高端微处理器ARM 的加入以及软件上操作系统的支持,使得整个嵌入式系统拥有了完整的构架.现在,专门为嵌入式产品开发的各个操作系统层出不穷,WINDOW CE,POCKET PC,Linux 等等,各界关注地也特别多.然而,如何进行加载操作系统这个问题却很少有人提出。
这就产生了另一个相关主题bootloader 。
Bootloader 本身的功能就是引导与加载内核镜像。
如何实现bootloader 的基本功能,如何针对基于ARM 体系的微处理器来实现bootloader ,就成为本课题的一个基本论题。
,除了基本功能,bootloader 还能有什么更加具体的扩展功能来方便各个系统开发者,都属于本课题讨论的范畴。
第一章:ARM 简介第一节:ARM 微处理器嵌入式系统的核心部件是各种类型的嵌入式处理器。
目前据不完全统计,全世界嵌入式处理器的品种总量已经超过1000多种,流行体系结构有30多个系列。
嵌入式微处理目前主要有Am186/88、386EX 、SC-400、Power PC、MIPS 、ARM 系列等。
其中,ARM 是一种今年来在嵌入式系统中有着强大影响力的微处理器设计商和制造商,ARM 的设计非常适合与小的电源供电系统.特别是,随着近年来,微处理器结构由RISC (精简指令集)全面取代传统的CISC (复杂指令集),因为ARM 是著名的RISC 的拥护者。
采用RISC 结构的ARM 微处理器一般具有如下特点:1.体积小、低功耗、低成本、高性能;2.支持Thumb (16位)/ARM(32位)双指令集,能很好地兼容8/16位器件;3.大量使用寄存器,指令执行速度更快;4.大多数数据操作都在寄存器中完成;5.寻址方式灵活简单,执行效率高;6.指令长度固定;下图所示的是ARM 构架图。
它由32位ALU 、若干个32位通用寄存器以及状态寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令译码以及控制逻辑、指令流水线和数据/地址寄存器组成。
PIC18单片机的一种新颖的Bootloader设计引言 Bootloader是操作系统在内核运行之前运行的一段小程序,其功能主要是完成软硬件设备初始化,建立内存空间映射,从而将系统的软硬件环境带到一个合适的状态,或者加载操作系统映像文件实现系统软件升级。
针对PIC18系列单片机,目前市面上仅存在HI-TECH 公司提供的Bootloader程序,并且需要借助串口调试助手。
本文基于Microchip公司的MPLAB 软件开发环境设计了一种新颖的Bootloader,并配套编写了PC机端上位机界面程序。
其特点是控制灵活,使用便利,系统升级安全可靠。
1 Bootloader的实现1.1 Bootloader的操作模式 Bootloader在单片机上电/复位后、用户程序之前先运行,运行后判断当前是否需要进入升级状态。
如果不需要升级,就直接运行原有的程序;如果需要升级,首先擦除旧的程序,然后从串口接收用户程序,同时写入Flash中。
Bootloader有2种操作模式:①启动加载模式,也称为“内核启动”模式。
即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
②下载模式。
在这种模式下,目标机上的Bootloader将通过串口、网络连接或者USB等,从上位机下载操作系统文件,然后保存到目标机上的Flash类固态存储设备中。
Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用,此外,以后的系统更新也会使用Bootl-oader的这种工作模式。
本文设计的Bootloader同时支持这两种工作模式,一开始启动时处于正常的启动加载模式,但并不立即启动进入内核,而是提示延时 3 s,上位机用户如果发送某些信息给目标机,则切换到下载模式,否则继续启动内核。
1.2 Intel HEX文件 Intel HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。