嵌入式系统BOOTLOADER的设计与实现
- 格式:pdf
- 大小:1.73 MB
- 文档页数:77
文章标题:深入探讨STC8 Bootloader 例程1.引言在嵌入式系统设计和开发中,Bootloader 例程扮演着至关重要的角色。
STC8系列单片机作为一种常用的嵌入式芯片,其Bootloader 例程更是备受关注。
本文将深入探讨STC8 Bootloader 例程,从概念到实践,带您全面了解这一重要的技术。
2. 什么是Bootloader 例程Bootloader 例程,简称Bootloader,是一种在嵌入式系统中用于引导程序和初始化硬件的特殊程序。
在STC8单片机中,Bootloader 例程具有独特的设计和功能,可以实现固件更新、自主程序下载等重要功能。
考虑到STC8单片机在各类应用中广泛应用,Bootloader 例程的设计与应用显得尤为重要。
3. STC8 Bootloader 例程的特点STC8 Bootloader 例程具有以下几个突出的特点:- 稳定可靠:STC8 Bootloader 例程经过严格测试和验证,具有良好的稳定性和可靠性,可以满足各类应用的需求。
- 高度定制:STC8 Bootloader 例程支持用户自定义设置,可以根据具体应用的需求进行灵活配置,满足不同场景的需求。
- 易于集成:STC8 Bootloader 例程提供了完善的API接口和文档说明,方便用户在实际项目中快速集成和应用。
- 安全性保障:STC8 Bootloader 例程采用了多重安全机制,保障固件更新和程序下载的安全性,有效防止恶意攻击和非法篡改。
4. 深入探讨STC8 Bootloader 例程的实现在实际项目中,如何针对STC8 Bootloader 例程进行实现和优化是一个关键问题。
首先需要考虑Bootloader例程的整体架构和设计思路,具体包括Bootloader程序的存储器分配、引导流程设计、固件更新机制等方面。
其次需要考虑如何与应用程序进行有效的通信和数据传输,确保Bootloader 例程与用户程序的无缝衔接。
stm32f103vet bootloader例程摘要:1.STM32F103vet Bootloader 简介2.Bootloader 例程的作用3.Bootloader 例程的结构和主要功能4.Bootloader 例程的编写方法5.Bootloader 例程的应用实例6.总结正文:【1.STM32F103vet Bootloader 简介】STM32F103vet Bootloader 是一款基于STM32F103 微控制器的嵌入式系统引导程序。
Bootloader,意为“引导程序”,在嵌入式系统中主要用于初始化硬件、加载操作系统等。
STM32F103vet Bootloader 例程则是实现Bootloader 功能的具体代码示例。
【2.Bootloader 例程的作用】Bootloader 例程的主要作用包括以下几个方面:1) 硬件初始化:对嵌入式系统的硬件进行初始化,如时钟、串口等。
2) 软件配置:配置Bootloader 运行时的软件环境,如内存分配、外设配置等。
3) 加载操作系统:将操作系统从存储器中读取到内存中并执行。
4) 诊断与测试:对嵌入式系统进行自检和诊断,确保系统正常运行。
【3.Bootloader 例程的结构和主要功能】STM32F103vet Bootloader 例程主要包括以下几个部分:1) 系统初始化:初始化硬件、时钟、串口等。
2) 系统配置:配置内存分配、外设、时钟等。
3) 操作系统加载:将操作系统从存储器中读取到内存中并执行。
4) 诊断与测试:对嵌入式系统进行自检和诊断。
【4.Bootloader 例程的编写方法】编写Bootloader 例程需要对STM32F103 微控制器的架构和外围设备有一定了解。
以下是编写Bootloader 例程的基本步骤:1) 配置开发环境:搭建针对STM32F103 微控制器的开发环境,包括编译器、调试器等。
2) 编写代码:按照Bootloader 例程的结构和功能,编写相应的代码。
stc8 bootloader 例程摘要:一、引言二、STC8 Bootloader简介1.背景介绍2.功能概述3.优点三、STC8 Bootloader例程详解1.代码结构2.关键功能模块分析3.功能实现过程四、如何使用STC8 Bootloader1.硬件准备2.软件配置3.下载与调试五、注意事项与建议六、总结正文:一、引言随着嵌入式系统应用的不断普及,bootloader 在嵌入式开发中扮演着越来越重要的角色。
本文将为大家介绍一款名为STC8 的Bootloader 例程,并通过详细解析其代码,帮助大家更好地理解和使用这款实用的工具。
二、STC8 Bootloader 简介1.背景介绍STC8 是一款由STMicroelectronics 推出的8 位单片机,广泛应用于各种嵌入式系统中。
为了方便用户进行编程和调试,STC8 提供了一款功能强大的Bootloader 例程。
2.功能概述STC8 Bootloader 具有以下功能:(1)支持串口通信:可通过串口与上位机进行通信,实现程序的下载、调试等功能。
(2)支持多种编程模式:支持ISP(在系统编程)和IAP(在应用编程)两种模式。
(3)自适应波特率:根据上位机的波特率自动调整,实现顺畅的通信。
(4)加密功能:可对下载的程序进行加密,保护用户代码的安全性。
3.优点STC8 Bootloader 具有以下优点:(1)稳定性高:经过长时间的使用和验证,稳定性得到充分保障。
(2)兼容性强:支持多种单片机型号,满足不同用户的需求。
(3)易于使用:简洁的代码结构,便于用户上手和二次开发。
三、STC8 Bootloader 例程详解1.代码结构STC8 Bootloader 代码分为以下几个部分:(1)初始化模块:对单片机硬件进行初始化,包括时钟、串口等。
(2)通信模块:实现与上位机的通信,包括数据的接收与发送。
(3)加密模块:对下载的数据进行加密和解密。
主题:STM32F030 Bootloader 例程一、简介STM32F030是STMicroelectronics公司推出的一款32位ARM Cortex-M0内核的微控制器。
它具有丰富的外设,如GPIO、UART、SPI、I2C等,适用于各种嵌入式系统应用。
在嵌入式系统开发中,Bootloader是一个重要的组成部分,它能够实现固件的更新和管理,提高系统的灵活性和可靠性。
本文将介绍如何使用STM32F030的Bootloader例程进行固件升级。
二、准备工作在使用STM32F030的Bootloader例程之前,我们需要准备好以下工具和材料:1. STM32F030开发板2. USB转TTL串口模块3. ST-Link下载器4. 针对STM32F030系列的Bootloader例程源码三、下载和安装Bootloader例程源码1. 在STMicroelectronics官全球信息站下载针对STM32F030的Bootloader例程源码2. 将下载的源码解压缩到本地3. 打开Keil MDK-ARM开发环境,导入源码并进行编译四、烧录Bootloader程序1. 使用ST-Link下载器将编译好的Bootloader程序烧录到STM32F030开发板上2. 确保烧录成功后,通过串口工具连接USB转TTL串口模块到STM32F030的串口引脚上五、固件升级测试1. 将需要升级的固件通过串口工具上传到开发板2. 在Bootloader程序中编写相关代码来实现固件的升级和校验3. 运行Bootloader程序,进行固件升级测试六、总结通过本文的介绍,我们了解了如何使用STM32F030的Bootloader 例程进行固件升级。
在实际的嵌入式系统开发中,Bootloader的作用不仅局限于固件升级,还可以实现固件的管理和安全验证。
掌握Bootloader的开发和使用对于提高系统的稳定性和可靠性是非常重要的。
合肥学院嵌入式系统设计实验报告(20 13 - 20 14 第 2 学期)专业:实验项目:BootLoader移植实验实验时间:2014年5月19日实验成员:____________________________________________________________________指导老师:电子信息与电气工程系2014 年 4 月制实验三BootLoader 移植实验一、实验目的1、熟悉 Bootloader 工作原理。
2、了解 U-Boot 的代码结构。
3、掌握 U-Boot 移植过程。
二、实验内容本实验熟悉 Bootloader 工作原理,了解 U-Boot 源码结构,基于 S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过。
三、实验设备硬件: 1、 pc 机2、 FriendlyARM开发套件即MIRCO2440 核心板软件: 1、虚拟机( VMware )2、U-Boot 源码( u-boot-2011.03.tar )四、实验过程1、 Micro2440配置在mini2440/micro2440上的移植准备工作,我们仍然将开发板文件建立在board/samsung 下,2、配置时出现错误,字体要修改,复制粘贴的时候出现的错误,有的地方有中文,去掉就行了。
3、编译完成失败,只有上网查找错误,最后解决了错误。
11124、编译完成后将u-boot.bin下载到SDRAM的 0x33f80000地址处, u-boot已经能在RAM中运行。
二、支持DM90001、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。
三、支持内核启动1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。
四、支持Nand Flash1、编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处。
五、实验小结本实验需要熟悉Bootloader 工作原理,了解U-Boot 源码结构,基于S3C2440 处理器,完成 U-Boot 移植,并在目标开发板上测试通过,首先可以看到实验指导书上的介绍,了解U-Boot 的移植。
基于Xilinx FPGA特点的嵌入式Bootloader设计与实现Bootloader程序是指嵌入式系统在正常工作之前,配置系统运行环境,引导操作系统的一小段程序。
通过这段程序,我们可以初始化硬件设备、建立内存空间映射等,从而将系统的软硬件环境带到一个合适的环境,为系统的正常运行做好准备。
对于不使用操作系统的嵌入式系统而言,应用程序的运行同样也需要依赖一个准备好的软、硬件环境,因此从这个意义上来讲,BootLoader程序对于嵌入式系统是必需的。
BootLoader程序与硬件系统密切相关,依赖于具体的嵌入式板级硬件设备的配置。
比如板卡的硬件地址配置、微处理器的类型和其他外设的类型等。
也就是说,即使是基于相同嵌入式微处理器构建的不同嵌入式目标板,BootLoader程序也不是完全通用的,仍需要修改其源程序。
与ARM等嵌入式系统的启动过程所不同的是,FPGA必须先将内部硬件逻辑配置完成之后,才能运行程序代码。
虽然可以直接将程序代码例化到片内BRAM中,但是由于FPGA 内部的BRAM资源有限,而且硬件逻辑配置时就会占用其中的资源,因此遇到大型系统设计时(例如带有TCP/IP协议的大型程序),片内BRAM资源不够,就必须使用外部的RAM来储存程序代码和堆栈,这就需要设计Bootloader程序来完成用户程序的引导。
本文结合Xilinx FPGA的特点详细给出了Bootloader程序设计和实现过程。
本设计所实现的Bootloader程序是在FPGA硬件配置完毕之后在MicroBlaze软核处理器上运行的一段启动代码,用来把Flash中的用户程序传输至外部RAM,并引导系统从用户程序中开始运行。
一、系统硬件平台的实现本设计的实现是以Xilinx公司的Spartan-3E FPGA、STMicroelectronics公司的SPI串行Flash(M25P16)、Micron Technology公司的DDR SDRAM (MT46V32M16)为主要器件构建硬件平台。
课程实验报告实验名称:嵌入式系统实验专业班级:计算机科学与技术x班学号:Ux姓名:x合作者:x实验时间:xxxx年xx月xx日计算机科学与技术学院试验一:bootloader (ads、引导)一、实验任务1、熟悉ADS 1.2开发工具创建、编译、下载、调试工程2、串口通讯串口控制器初始化、收/发数据3、配置主机端的nfs服务器配置主机端的nfs服务器,以连接linux核心4、下载并运行linux核心使用自己的串口程序下载并运行linux核心二、实验内容编写串口接收数据函数编写串口发送数据函数学习ads、jtag调试、flash烧写打印菜单,等待用户输入下载并运行linux核心配置主机的nfs服务器,与linux核心连接三、实验步骤1.编写串口接收数据函数编写串口发送数据函数修改bootloader:菜单、串口收发、命令行;接收串口数据并做相应处理:while(1){打印菜单并等待用户输入;switch(ch) //根据用户输入做相应处理{case '1':imgsize=xmodem_receive((char *)KERNEL_BASE, MAX_KERNEL_SIZE);if(imgsize==0) //下载出错;else //下载成功;break;case '3':nand_read((unsigned char *)KERNEL_BASE, 0x00030000, 4*1024*1024);case '2':BootKernel(); //这里是不会返回的,否则出错;break;default:break;}}Bootloader的main()函数打印菜单:int main(void){ARMTargetInit(); //目标板初始化;//接收用户命令,传递linux核心;Uart_puts("Menu:\n\r");Uart_puts("1.Load kernel via Xmodem;\n\r");Uart_puts("2.Boot linux; \n\r");Uart_puts("3.Load kernel from flash and boot; \n\r");Uart_puts("Make your choice.\n\r");do{ch=Uart_getc();}while(ch!='1' && ch!='2' && ch!='3');return 0;}串口读写:void Uart_putc(char c){while(!SERIAL_WRITE_READY());((UTXH0) = (c));}unsigned char Uart_getc( ){while(!SERIAL_CHAR_READY());return URXH0;}2.使用ads1.2编译bootloader;3.使用uarmjtag下载、调试bootloader;4.使用axd查看变量、内存,单步跟踪;5.配置超级终端,与bootloader通讯;6.配置nfs;编辑/etc/export文件:/home/arm_os/filesystem/rootfs 目标板ip(rw,sync)/home/arm_os/filesystem/rootfs 主机ip(rw,sync)启动nfs服务器:/etc/init.d/nfs restart测试nfs服务器是否正常运行:mount 主机ip:/home/arm_os/filesystem/rootfs /mnt7.以root用户启动cutecom,将cutecom配置改为115200 bps,8位,1位停止位,无校验,xmodem,no line end;8.使用bootloader重新下载Linux核心映像,启动核心运行后,察看是否成功加载nfs上的root文件系统;9.启动Linux核心运行,察看结果;10.linux核心能够运行到加载root步骤,说明bootloader正常运行;11.将bootloader烧写到flash中,重启目标板电源,察看bootloader是否烧写正常,下载核心测试;目标板linux系统正常运行到命令行模式下,能够正常输入linux命令,说明实验成功。
DSP程序在线升级Bootloader开发指南一、介绍在嵌入式系统中,程序在线升级是一项非常重要的功能,能够提高系统的灵活性和可靠性。
而DSP程序在线升级则是特定于数字信号处理器(DSP)的一种实现方式,可以通过网络或其他通信方式,将新的程序固件传输到DSP芯片中,并进行升级。
二、准备工作在进行DSP程序在线升级的开发之前,需要完成以下准备工作:1.确定升级方式:选择升级的通信方式,如以太网、串口等。
2.备份原有程序:在进行升级前,应对原有程序进行备份,以防升级过程中出现问题导致程序丢失。
三、Bootloader设计1.引导程序:设计一个简单轻量的引导程序,用于控制DSP芯片的启动和升级过程。
引导程序需要能够读取外部存储器中的新程序固件,并将其加载到DSP芯片的指定存储区域中。
2.通信接口:根据选择的升级方式,设计相应的通信接口和协议。
接口可以是以太网、串口等,协议可以是TCP/IP、XMODEM等。
3.升级流程:设计升级的整个流程,包括连接建立、数据传输、校验验证等。
在升级过程中应提供重试机制和错误处理,确保升级的可靠性。
4.升级验证:设计升级完成后的验证机制,可以通过计算CRC校验、程序版本号等方式,验证新程序是否成功升级。
四、开发步骤1.编写引导程序:根据DSP芯片的文档和开发工具,编写引导程序,并将其烧录到DSP芯片中。
引导程序应能够读取外部存储器中的新程序固件,并将其加载到指定存储区域中。
2.设计通信接口:根据选择的升级方式,设计相应的通信接口和协议。
例如,如果选择以太网作为升级方式,则需要设计相应的网络通信协议,并编写相应的通信代码。
3.实现升级流程:在引导程序中实现升级的整个流程,包括连接建立、数据传输、校验验证等。
可以利用现有的通信库或协议栈来简化开发。
4.添加错误处理机制:在升级流程中添加错误处理机制,包括重试机制、错误提示等,确保升级的可靠性。
5.实现升级验证:在引导程序中添加升级完成后的验证机制,可以通过计算CRC校验、程序版本号等方式,验证新程序是否成功升级。
bootloader详细介绍Bootloader对于计算机系统来说,从开机上电到操作系统启动需要⼀个引导过程。
嵌⼊式Linux系统同样离不开引导程序,这个引导程序就叫作Bootloader。
6.1.1 Bootloader介绍Bootloader是在操作系统运⾏之前执⾏的⼀段⼩程序。
通过这段⼩程序,我们可以初始化硬件设备、建⽴内存空间的映射表,从⽽建⽴适当的系统软硬件环境,为最终调⽤操作系统内核做好准备。
对于嵌⼊式系统,Bootloader是基于特定硬件平台来实现的。
因此,⼏乎不可能为所有的嵌⼊式系统建⽴⼀个通⽤的Bootloader,不同的处理器架构都有不同的Bootloader。
Bootloader不但依赖于CPU的体系结构,⽽且依赖于嵌⼊式系统板级设备的配置。
对于2块不同的嵌⼊式板⽽⾔,即使它们使⽤同⼀种处理器,要想让运⾏在⼀块板⼦上的Bootloader程序也能运⾏在另⼀块板⼦上,⼀般也都需要修改Bootloader 的源程序。
反过来,⼤部分Bootloader仍然具有很多共性,某些Bootloader也能够⽀持多种体系结构的嵌⼊式系统。
例如,U-Boot就同时⽀持PowerPC、ARM、MIPS和X86等体系结构,⽀持的板⼦有上百种。
通常,它们都能够⾃动从存储介质上启动,都能够引导操作系统启动,并且⼤部分都可以⽀持串⼝和以太⽹接⼝。
本章将对各种Bootloader总结分类,分析它们的共同特点。
以U-Boot为例,详细讨论Bootloader的设计与实现。
6.1.2 Bootloader的启动Linux系统是通过Bootloader引导启动的。
⼀上电,就要执⾏Bootloader来初始化系统。
可以通过第4章的Linux启动过程框图回顾⼀下。
系统加电或复位后,所有CPU都会从某个地址开始执⾏,这是由处理器设计决定的。
⽐如,X86的复位向量在⾼地址端,ARM处理器在复位时从地址0x00000000取第⼀条指令。
复旦大学硕士学位论文嵌入式系统BOOTLOADER的设计与实现姓名:朱晶申请学位级别:硕士专业:计算机应用技术指导教师:涂时亮20040427摘要y-一651830嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的工作和生活中,它在当今的应用正变得越来越广泛。
BOOTLOADER作为嵌入式系统软件的重要组成部分,对它的研究和实现无疑也具有重要的现实意义。
本文首先对嵌入式系统BOOTLOADER的特点和作用进行了介绍。
然后从嵌入式系统的角度对如何实现BOOTLOADER进行了比较全面的分析。
本文对嵌入式系统的硬件初始化,串u驱动及传输协议,网口驱动及传输协议,USB驱动及传输协议,FLASH的驱动等等都做了比较洋细的分析。
并结合EV4480丌发板,给出了实现的具体细节。
最后,对已经实现的BOOTLOADER进行了测试和评估,并就今后的改进方向提出了自己的意见。
关键字:嵌入式系统;BOOTLOADER;UCLINUXAbstractVirtuallyeveryelectronicdevicedesignedandmanufacturedtodayisallembeddedsystem.Briefly,BOOTLOADERisthefirstsoftwareprogramthatrunswhenacomputerstarts.Itisresponsibleforloadingandtransferringcontroltotheoperatingsystemkernelsoftware.ThisessayintroduceshowtodesignBOOTLOADERinanembeddedsystem.FirstthepaperintroducesthefeaturesandthnctionofBOOTLOADER,thenindetailanalyzesBOOTLOADERfromviewofembeddedfield,andbringsupasystemmodelofBOOTLOADER.Inthispaper,italsohaveadetailresearchonsomepartofBOOTLOADER,suchashardwareinitial,UARTdriverandtransferprotocai,lancarddriverandtflp/ipprotocai,USBdriverandtransferprotocal,FLASHdriveretc.Finally,thispaperimplementsandtestsBOOTLOADERinEV4480evaluationboard,thenbringsupsortieadviceontheimprovementinthefuture.Keyword:BOOTLOADER,embeddedsystem,UCLINUX第一章绪论第一节引言嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的JT作和生活中。
嵌入式处理器是嵌入式系统的核心,RISC型处理器具有结构简单,处理速度快和处理功能强等特点,新型的嵌入式系统大多采用RISIC型处理器作为核,如ARM公司的ARM。
ARM公司是嵌入式RISC处理器的知识产权IP提供商,它为ARM架构处理器提供了ARM处理器内核,如ARM7TDMI。
在本应用中,采用的s3c44BO处理器就是ARM7TDMI的内核。
简单的嵌入式系统一般并不使用操作系统,只包含一些控制流程。
但是当系统所提供的功能复杂化以后,比如需要提供图形界面等等,这个时候就必须考虑使用操作系统。
如今,在专用的嵌入式板子运行Uclinux系统已经变得越来越流行。
一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1.引导加载程序。
包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
2.Linux内核。
特定于嵌入式板子的定制内核以及内核的启动参数。
3.文件系统。
包括根文件系统和建立于Flash内存设备之上文件系统。
通常用ralTldisk来作为rootfilesystem。
4.用户应用程序。
特定于用户的应用程序。
有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。
常用的嵌入式GUI有:MicroWindows和MiniGUI等。
引导加载程序是系统加电后运行的第一段软件代码。
回忆一下Pc的体系结构我们可以知道,Pc机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(比如,LILO和GRUB等)一起组成。
BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OsBootLoader。
BootLoader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全4由BootLoader来完成。
比如在一个基于ARM7TDMI内核的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
在把Uclinux移植到开发板后,这段引导程序的软件模块就是hcad—micetek.O,它随后调用misc.O这个解压缩模块中的解压缩函数,解压piggy.o这个Uelinu_x内核,把内核解到开发板的rain中后,跳到内核入口处执行。
下面将从BootLoader的概念、BootLoader的主要任务、BootLoader的框架结构等三个方面来讨论嵌入式系统的BootLoader。
第二节BOOTLOADER的概念简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立~个通用的BootLoader几乎是不可能的。
尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以应用于各种特定的BootLoader设计与实现。
1.BootLoader所支持的CPU和嵌入式板每种不同的CPU体系结构都有不同的BootLoader。
有些BootLoader也支持多种体系结构的CPU,比如U—Boot就同时支持ARM体系结构和MIPS体系结构。
除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。
这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。
2.BootLoader的安装媒介(InstallatiOnMedium)系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。
比如,基于ARM7TDMIGore的CPU在复位时通常都从地址Ox00000000取它的第一条指令。
而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。
因此在系统加电后,CPU将首先执行BootLoader程序。
3.用来控制BootLoader的设备或机制主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。
4.BootLoader的启动过程是单阶段(SingleStage)还是多阶段(Multi—Stage)通常多阶段的BootLoader能提供更为复杂的功能,以及更好的可移植性。
从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为stagel和stage2两部分。
而至于在stage1和stage2具体完成哪些任务将在下面讨论。
5.BootLoader的操作模式(OperationMode)大多数BootLoader都包含两种不同的操作模式:”启动”模式和”下载调试”模式,这种区别仅对于开发人员才有意义。
但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动模式与下载调试模式的区别。
启动模式:这种模式也称为”自主”(Autonomous)模式。
也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式下。
下载调试模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。
从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。
BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader的这种工作模式。
工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。
像Blob或U.Boot等这样功能强大的BootLoader通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。
比如,Blob在启动时处于正常的启动加载模式,但是它会延时10秒等待终端用户按下任意键而将blob切换到下载模式。
如果在10秒内没有用户按键,则blob继续启动Linux内核。
6.BootLoader与主机之间进行文件传输所用的通信设备及协议最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输协议通常是Xmodem/Ymodem/Zmodem/Kermit协议中的一种。
在本应用中,开发了串口驱动,使用了Xmodem作为传输协议。
但是,串口传输的速度是有限的,因此可以通过其它方式来下载文件。
一种是通过以太网连接并借助TFTP协议来下载文件。