阐述对BootLoader的理解和分析

阐述对BootLoader的理解和分析
阐述对BootLoader的理解和分析

`

物理与电子工程学院

《嵌入式系统设计》

设计性实验报告

题目阐述对BootLoader的理解和分析

系别

年级专业

班级学号

学生姓名

指导教师

实验时间

目录

课题要求 ................................................................ 错误!未定义书签。

1.本课题的目的.............................. 错误!未定义书签。

2.运行环境.................................. 错误!未定义书签。正文 . (2)

一.BootLoad简介 (2)

二.系统设计 (5)

三.技术实现问题 (7)

四.总结与体会 (8)

设计性实验报告成绩:指导教师签名: (10)

摘要

在嵌入式系统中,由于不具有自举开发的能力,其BootLoader除了引导操作系统之外,还要担负辅助开发的责任,如与主机通信、与用户交互、更新系统等功能。

虽然嵌入式系统不可能实现通用的BootLoader,但是各系统的BootLoader依然具有一定的相同性,因此,嵌入式系统中常用的BootLoader也都具有可移植性,可以在大部分代码不更改的情况下,根据本系统的情况,通过修改具体硬件相关的代码并进行相应的配置来使用。

关键字:概述,作用,操作模式,分类,基本原理。

正文

一.BootLoad简介

1.1 BootLoader的概述

BootLoader是操作系统和硬件的纽带,它负责初始化硬件,引导操作系统内核,检测各种参数给操作系统内核使用。事实上,一个功能完备的大型BootLoader,就相当于一个小型的操作系统。在嵌入式领域中,操作系统移植的关键在于BootLoader的移植以及操作系统内核与硬件相关部分的移植。Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而将系统软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Bootloader是严重依赖于硬件而实现的,特别是在嵌入式世界里,嵌入式产品型号众多,硬件环境复杂,建立一个通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出一些通用的概念来,以指导特定的Bootloader设计与实现。因此,正确进行Linux移植的条件是具备一个与Linux配套、易于使用的Bootloader,它能够正确完成硬件系统的初始化和Linux的引导。

Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于两块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种结构的嵌入式系统。通常它们能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。

1.2 Bootloader 的作用

图1—1Bootloader 的作用

如图1-1所示,一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次:

1) 引导加载程序,包括固化在固件(firmware )中的boot 代码和Bootloader 两大部分。

2) Linux 内核,特定于嵌入式硬件的定制内核以及内核的启动参数。

3) 文件系统,包括根文件系统和建立于Flash 内存设备之上的文件系统。通常用ram

disk 来作为根文件系统。

4) 用户应用程序,特定于用户的应用程序。有时在用户应用层序和内核层之间可能

还会包括一个嵌入式图形用户界面GUI 。

引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC 的体系结构可以知道,PC 中的引导加载程序有BIOS (其本质就是一段固件程序)和位于硬盘MBR 中的OS BootLoader(如LILO 和GRUB 等)一起组成。BIOS 在完成硬件测试和资源分配后,将硬盘MBR 的Bootloader 读到系统的RAM 中,然后将控制权交给OS Bootloader 。Bootloader 的主要运行任务就是将内核映像从硬盘上读到RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

而在嵌入式系统中,通常并没有像BIOS 那样的固件程序(注:有的嵌入式CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Bootloader

来完成。例如在一个基于

ARM7TDMI core的嵌入式系统中,系统在上电或复位是通常从地址0X00000000处开始执行,而在这个地址处安排的通常就是系统的Bootloader程序。

简单地说,就是在操作系统内核运行的一段小程序。通过这段小程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

1.3Bootloader操作模式

大多数Bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。但从最终客户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载(Bootloading)模式:这种模式也称“自主”(Autonomous)模式,即启动(Bootloader)从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Bootloader的正常模式,因此在嵌入式产品发布的时候,Bootloader显然必须工作在这种模式下。

下载(Downloading)模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,如下载内核映像和根据文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader 写到目标机上的Fiash类固态存储设备中。Bootloader的这种模式通常在第一次安装内核与根文件系统是被占用;此外,以后的系统更新也会使用Bootloader的这种工作模式。工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。因此产品开发时通常使用这种模式。

像Blob或U-Boot等这样功能强大的Bootloader通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。例如,Blob在启动是处于正常的启动加载模式,但是它会延时10S等待终端用户按下任意键而将blob切换到下载模式。如果在10S 内没有用户按键,则blob继续启动Linux内核。

最常见的情况是,目标机上的Bootloader通过串口与主机之间进行文件传输,传输协议通常是xmodem/ymodem/zmodem协议中的一种。但是,串口传输的速度是有限的,因此通过以太网连接并借助TFTP协议来下载文件是个更好的选择。

二.常用的BootLoader

2.1 ARMBoot

ARMBoot是一个BootLoader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash;允许映像文件经由bootp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。ARMboot发布的最后版本为ARMboot-1.1.0,2002年ARMboot终止了维护,其发布网址为:https://www.360docs.net/doc/012301204.html,/projects/armboot.

Armboot对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux 内核完成板上系统的加载.总得来说,ARMboot介于大、小型Boot Loader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。

2.2RedBoot

RedBoot是一个专门为嵌入式系统定制的开发工具,是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目. Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点.它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动).Redboot可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序.Redboot为管理FLASH映像,映像下载,Redboot配置以及其他如串口、以太网口提供了一个交互式命令行接口,自动启动后,REDBOOT用来从TFTP服务器或者从Flash下载映像文件加载系统的引导脚本文件保存在Flash上.

2.3U-Boot

U-Boot是sourceforge网站上的一个开放源代码的项目。U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM

(ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader.

U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作.U-Boot1.1.1版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board 的移植,包括FLASH、内存配置以及串口波特率等等.U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便.

2.4 Vivi

Vivi是韩国mizi公司开发的BootLoader,适用于ARM9处理器。Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后自行启动Linux内核,这是默认模式。在下载模式下,已为用户提供一个命令行接口,通过接口可以使用Viivi提供的一些命令。

三. BootLader基本原理

3.1 BootLader的结构

从结构上,BootLoader的各项功能之间有一定的依赖关系,某些功能是与硬件相关的,某些功能是纯软件的。芯片的启动代码是BootLoader必备的基础,不同处理器启动需要的设置是不同的。即使是相同的处理器,其内存空间的配置也是不一样的。因此,各个嵌入式系统的启动代码一般都是不相同的。

运行操作系统是BootLoader的核心功能,包括将操作系统加载到内存,开辟操作系统所需要的数据代码区域,然后跳转到操作系统的代码处运行。

在嵌入式统统中,BootLoader运行操作系统和操作运行应用程序的过程有所不同。操作系统内核一般被编译成纯二进制代码,BootLoader运行操作系统内核主要是内存加载和跳转两个步骤;操作系统运行应用程序则复杂得多,需要进行程序头的解析。

根据BootLoader的功能,可以支持不同操作系统的引导。一般情况下,BootLoader在引导操作系统的时候,是运行纯二进制操作系统映像,本质是将其加载到内存、创建运行环境和跳转运行,附加的功能还包括传递一些参数。对于这种引导模式,运行不同操作系统映像文件的差异不大。某些功能强大的BootLoader可以支持不同格式的操作系统映像的加载。在这种情况下,BootLoader对操作系统的加载过程类似于BootLoader运行一个应用程序。

在一般BootLoader的功能框架中,人机交互的功能是系统的逻辑核心,它将BootLoader各部分的功能组织在一起,并向外部提供交互的接口,用户可以通过命令行控制BootLoader。人机交互功能本身是一个与具体硬件相关的功能,但是它一般需要建立在目标机---主机通信机制之上,如使用系统的串口。

BootLoader的通信功能主要完成目标机到主机的通信,通信模块主要依赖的硬件机制包括串口、网络、USB等。一般来说,串口可以实现目标机-主机控制台的功能,实现人机交互的基础;而网络和USB 的速度较快,可以实现较大的文件传输,它们通常建立在TCP/IP网络的协议之上。在通信功能中,通信层接口、网络协议等功能是和硬件无关的,而串口、网络USB等模块的驱动是与硬件有关的,需要不同的嵌入式系统根据自身的情况实现或者移植。

Flash相关的功能也是BootLoader常见的功能,这是由于嵌入式系统中BootLoader需要烧写自身系统,完成系统的更新。功能强大的BootLoader还可以支持Flash上的分区和文件系统的功能。

3.2 BootLader的启动程序

对于PC机,其开机后的初始化处理器配置、硬件初始化等操作是由BIOS完成的,但是对于嵌入式系统说,出于经济型、价格方面的考虑,一般不配置BIOS,因此必须自行编写完成这些工作的程序。

系统加电复位后,几乎所有CPU都从复位地址上取指令。例如,基于ARM7TDMI核的CPU复位时,通常都从地址0X00000000取它的第一条指令。而以处理器为核心的嵌入式系统,通常都有某种类型的固态存储设备被映射到这个预先设置好的地址上。在系统内核或者用户应用程序运行之前,首先必须运行一段程序代码。通过这段程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核,运行用户应用程序准备好正确的环境。对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,比如功能简单仅包括应用程序的系统,但是在系统启动时,都必须运行BootLoader,为系统运行准备好软硬件环境。BootLoader依赖于硬件和应用环境,因此嵌入式系统建立一个通用、标准的BootLoader的有困难的。

系统的启动通常有两种方式:一种是可直接从Flash启动;另一种是可将压缩内存的内存映像文件从Flash中复制、解压到RAM,再从RAM启动。当电源打开时,一般的系统会去执行ROM里面的启动代码。这些代码是用汇编语言编写的,其主要作用在于初始化CPU和板子上的必备硬件、系统代码完成基本软硬件环境初始化后,对于有操作系统的情况,启动操作系统,启动内存管理、任务调用,加载驱动程序等,最后执行应用程序或等待用户命令;对于没有操作系统的系统,直接执行应用程序或等待用户命令。

四. BootaLoader的实现

4.1 自己实现BootLoader

对于一个特定的嵌入式系统,实现BootLoader并不是一件很复杂的事情。在实现的过程中,主要包含以下几个工作点:

1)启动代码

在启动代码中,需要完成处理器异常向量表、处理器初始化代码、内存处理等等工作。启动代码一般需要使用汇编语言实现,启动代码的最后跳转到C语言执行程序。

控制台功能

2)控制台功能实包含两个方面:

一方面是信息的输出,开发者必需得到程序的输出信息,才能得知程序的运行状态,在BootLoader中,可以通过直接使用UART串口,实现信息输出的功能。

另一方面是控制的输入,开发者如果需要控制系统的运作,必须要有输入的功能,只有这样才能控制程序中得分支跳转。

3)启动操作系统内核

启动操作系统内核是BootLoader的本职工作。为了启动操作系统的内核,BootLoader 需要将操作系统内核加载到RAM,初始化内核的数据段,跳转到内核运行及传递参数。4)基本通信功能

简单的通信功能可以建立在串口基础上,虽然串口速度比较慢,但是可以和控制台使用一个串口通道,方便易行。由于串口硬件传输方式的限制,要通过UART传输二进制信息,需要实现简单的编码程序。

4.2 移植BootLoader

BootLoader的移植过程中,需要实现引导代码、串口通信功能、Flash烧写等部分的移植。各个处理器和系统的引导代码都不相同;串口通信是人机交互的硬件基础,在BootLoader的移植过程中是必不可少的;Flash烧写是固化操作系统时需要的功能,某些BootLoader提供了Flash烧写的功能,这种功能一般和具体的硬件平台关系不大,只和具体的Flash芯片相关。

五. 参考文献

[1] 周立功. ARM嵌入式系统软件开发实例[M]. 北京:北京航天航空大学出版社,2004.

[2] 黄智伟,邓月明,王彦. ARM9嵌入式系统设计基础教程[M]. 北京:北京航天航空大学出版社,2008.

[3] . 徐英慧,马忠梅,王磊,王琳ARM9嵌入式系统设计[M]. 北京:北京航天航空大学出版社,2007.

[4] 刘洪涛,孙天泽. 嵌入式系统技术与设计[M]. 北京:人民邮电出版社,2009.

[5] 作者. 书名[M]. 版本(第一版不标注).出版地:出版者,出版年.

[序号] 作者. 书名[M]. 版本(第一版不标注).出版地:出版者,出版年.

基于AT89C51控制的0.01℃数显温度计的设计

万方数据

万方数据

万方数据

基于AT89C51控制的0.01℃数显温度计的设计 作者:罗兴垅, 黄隆胜, Lou Xinglong, Huang Longsheng 作者单位:罗兴垅,Lou Xinglong(341000,江西赣州,赣南师范学院物理与电子信息科学系), 黄隆胜,Huang Longsheng(341000,江西赣州,赣南师范学院物理与电子信息科学系;341000,江西赣 州,江西理工大学机电工程学院) 刊名: 微计算机信息 英文刊名:CONTROL & AUTOMATION 年,卷(期):2006,22(14) 被引用次数:12次 参考文献(3条) 1.万永波;张根宝;田泽;杨峰基于ARM的嵌入式系统Bootloader启动流程分析[期刊论文]-微计算机信息 2005(11) 2.谈文心;钱聪;宋云购模拟集成电路原理及应用 1995 3.潘学军0.01℃的数显温度计[期刊论文]-物理实验 2003(05) 引证文献(12条) 1.姚勇哲.张荣.邹志荣.张智日光温室温湿度自动监测预警器的研制[期刊论文]-农机化研究 2010(2) 2.符时民.于震数显测温系统设计与特性的研究[期刊论文]-辽宁石油化工大学学报 2010(2) 3.李铁军.何永洪基于单片机的IC卡系统设计[期刊论文]-微型机与应用 2009(21) 4.任小青.王晓娟基于AT89C51单片机的频率计设计方法的研究[期刊论文]-青海大学学报(自然科学版) 2009(2) 5.关玉明.程琪.肖艳春.姜云峰触摸屏变频器与PLC在调速系统中的设计[期刊论文]-机械设计与制造 2009(3) 6.关玉明.程琪.杨戈.姜云峰基于AT89C51的锌空电池温控系统设计[期刊论文]-微计算机信息 2008(32) 7.高海东.钱江基于HT48R30A-1的自动寻星系统[期刊论文]-微计算机信息 2008(29) 8.李邕数字式热敏电阻温度计设计[期刊论文]-甘肃科技纵横 2008(1) 9.张平川.许兴广基于单片机电热水器模糊控制系统设计[期刊论文]-微计算机信息 2007(32) 10.李宝营.赵永生.祖龙起.牛悦苓基于单片机的等精度频率计设计[期刊论文]-微计算机信息 2007(26) 11.肖艳军.程琪.许波基于AT89C51单片机的自动纠偏仪的设计[期刊论文]-微计算机信息 2007(23) 12.李学聪.万频.邓庆华.李军一种新型温盐深传感器的数据采集与应用[期刊论文]-微计算机信息 2007(10) 本文链接:https://www.360docs.net/doc/012301204.html,/Periodical_wjsjxx200614026.aspx

bootloader

Boot Loader的启动流程和开发经验总结 Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬 件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。 1.什么是BootLoader 嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。 (1)什么是板级BSP? BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上 层OS保持正确的接口,良好的支持上层OS。 (2)什么是Boot Loader

在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。 一般来说,在嵌入式世界里BootLoader 是严重地依赖于硬件的,因此想建立一个通用的 BootLoader 几乎是不可能的。不同的 CPU 体系结构有不同的BootLoader,而且除了依赖于 CPU的体系结构外,BootLoader还依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 结构而构建的,要想让运行在一块板子上的 BootLoader 程序也能运行在另一块板子上,通常也都需要修改 BootLoader 的源程序。 2.BootLoader在PC机与嵌入式的区别比较 (1)引导程序在PC机和嵌入式上的区别 一般来说,在PC的硬件平台上,由于硬件启动根本就不是通过BootLoader(而是通过BIOS),所以BootLoader就不需要对CPU加电后的初始化做任何工作。在桌面系统中,有以下几种设备可以作为启动设备使用:硬盘、USB盘、光盘驱动器、还有网卡的Boot ROM 等。但无论选择了哪一种启动设备,操作系统都会去将该设备起始地址的内容读入内存,BIOS 将控制移交给引导装载程序。如果启动设备是IDE硬盘,这时通常将引导装载程序装入第一个扇区(通常被称做主引导扇区,MBR),然后将内容读入内存再运行。 在嵌入式平台上,引导装载程序是在硬件上执行的第一段代码,通常将引导程序放置在不易丢失的存储器的开始地址或者是系统冷启动时PC寄存器的初始值。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由BootLoader来完

Stm8s_IAP_Bootloader设计

项目实践2:Bootloader 1.项目介绍 在之前的例程和实践中,我们都是使用st-link调试下载的方式进行程序烧录。大家可能已经认识到这种烧录方式的弊端了。因为这种烧录方式首先必须要有以下几个工具或者软件: 1.烧录工具(不能芯片支持的工具不一样,有ST-Link,JTAG等) 2.已经安装了IDE(IAR或者SVD或者CCS等)或者与烧录工具匹配的烧录软件的电脑 3.烧录前后需要物理上电掉电(不建议ST-Link进行热插拔),即开/关电源. 也许大家会觉得,对于学习而言,这些都能忍受。但是如果真正做成产品,如果还是用这种方式进行升级,那代价就太大。举个例子吧,我之前的工作是开发和维护大功率的UPS(不间断电源),主要客户是一些大型企业,例如银行的数据中心,中国移动网络中心。UPS内 部有许多ARM芯片,DSP芯片。这类应用场合,即便给程序升级,客户也不会让你断电的,而且因为安全性要求,一般MCU,DSP都是在产品内部,根本无法对外开放烧录盒的烧录 接口。所以绝大部分嵌入式产品,都会开发Bootloader程序。 那么什么是Boot Loader呢?一般来说,嵌入式产品的软件都会分为两部分,第一部分 为Bootloader,第二部分为主程序(Main APP),它们存放在flash的不同区域。Bootloader 是上电或者复位以后先执行的,通过它,我们可以初始化硬件设备、建立内存空间的映射图,检测程序的完整性,判断是否需要从Bootloader跳转到APP或者更新APP。而主程序呢,则是真正用来实现产品面向客户的功能的。 通常呢,在Bootloader会实现一种或者一种以上的IAP方式,可能是UART,SPI,CAN 或者Ethernet等。本次例程呢,就是设计一个Bootloader,允许用户用电脑的串口+超级终 端实现烧录功能

单片机自编程及Bootloader设计

单片机自编程及Bootloader设计 Bootloader是在单片机上电启动时执行的一小段程序。也称作固件,通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用应用程序准备好正确的环境。 Boot代码由MCU启动时执行的指令组成。这里的loader指向MCU的Flash中写入新的应用程序。因此,Bootloader是依赖于特定的硬件而实现的,因此,在众多嵌入式产品中目前还不可能实现通用Bootloader。 Bootloader的最大优点是:在不需要外部编程器的情况下,对嵌入式产品的应用代码进行更新升级。它使得通过局域网或者Intemet远程更新程序成为可能。例如,如果有5 000个基于MCU的电能表应用程序需要更新,电能表制造商的技术人员就可以避免从事对每一个电能表重新编程的巨大工作量,通过使用Bootloader的功能,由控制中心通过电能表抄表系统网络,远程对5 000个电表重新编程。可见,Bootloader功能对于嵌入式系统的广泛应用具有十分重要的意义。 1 78K0/Fx2系列单片机简介 78K0/Fx2系列是带CAN控制器的8位单片机,该系列单片机广泛应用于汽车电子,智能仪表等领域。其内置POC(可编程上电清零电路)/LVI(可编程低电压指示器),单电压自编程闪存,引导交换功能(闪存安全保护),具有低功耗、宽电压范围、超高抗干扰等性能。 78K0系列单片机支持自编程(Self-programming)。所谓自编程,是指用Flash存储器中的驻留的软件或程序对Flash存储器进行擦除/编程的方法。通过单片机的自编程功能,可以设计Bootloader程序,通过串口等通信接口实现对产品重新编程、在线升级的功能。 以μPD78F0881为例。μPD78F0881为78KO/Fx2系列中的一款44管脚单片机,内置32 KB Flash ROM,2 KB RAM,自带2个串行通信接口。其内部Flash结构。为了方便实现擦除和编程,人为地将整个Flash分成若干个block,每个block大小为1 KB。block为自编程库函数中空白检测、擦除、校验的最小单位。blockO从地址0000H开始,程序都从0000H 开始执行。block0~block3共4 KB存储空间为Bootloader程序存储区域。block4~block31为应用程序存储区域。 为了防止Bootloader自身的升级失败,设计了引导交换功能。该功能定义2个簇,即Boot cluster0和Boot cluster1。Boot clustee0为block0~block3的4 KB存储空间,Boot cluster1为block4~block7的4 KB存储空间。因此,实际运用过程中,一般把应用程序的开始定义在2000H,也就是从block8开始。 Flash地址为0000H~FFFFH。7FFFFH~FFFFH存储空间为保留区域以及特殊功能寄存器区域等,用户无法对其进行编程。 2 自编程 2.1 自编程环境 2.1.1 硬件环境 FLMDO引脚是78KO/Fx2系列单片机为Flash编程模式设置的,用于控制MCU进入编程模式。在通常操作情况下,FLMDO引脚下拉到地。要进入自编程模式,必须使FLMDO引脚置成高电平。因此,通过一个普通I/O接口控制FLMD0引脚的电平。。 2.1.2 软件环境 1)使用通用寄存器bank3,自编程库函数,需要调用通用寄存器bank3。因此,在自编程时,不能对通用寄存器bank3操作。

引导加载程序

1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。 引导加载程序是系统加电后运行的第一段软件代码。回忆一下 PC 的体系结构我们可以知道,PC 机中的引导加载程序由 BIOS(其本质就是一段固件程序)和位于硬盘 MBR 中的 OS Boot Loader(比如,LILO 和 GRUB 等)一起组成。BIOS 在完成硬件检测和资源分配后,将硬盘 MBR 中的 Boot Loader 读到系统的 RAM 中,然后将控制权交给 OS Boot Loader。Boot Loader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序(注,有的嵌入式 CPU 也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由 Boot Loader 来完成。比如在一个基于 ARM7TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址 0x00000000 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序。 本文将从 Boot Loader 的概念、Boot Loader 的主要任务、Boot Loader 的框架结构以及Boot Loader 的安装等四个方面来讨论嵌入式系统的 Boot Loader。 2. Boot Loader 的概念 简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。 1. Boot Loader 所支持的 CPU 和嵌入式板 每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。

tms320c6000系列二次bootloader的设计与实精)

TMS320C6000系列二次Bootloader的设计与实 (精) TMS320C6000系列二次Bootloader的 设计与实现,DSP,二次 Bootloader,Flash存储器,中断向 引言随着DSP(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的Boot-loader通过Flash存储器来引导DSP程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。系统上电后,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM、SDRAM等)中。由于Flash存储器具有 引言 随着DSP(数字信号处理器)系统的广泛应用,其程序规模也随之不断扩大,使用芯片本身自带的Boot-loader通过Flash存储器来引导DSP程序,往往受到程序大小和结构的制约,比如程序很大超过厂商固化boot的范围,再如中断向量表的不同位置对程序boot跳转的影响,等等,因此越来越需要更加灵活的引导方式。 系统上电后,由引导程序将DSP的应用程序从该存储器引导到DSP应用板上的高速存储器(如内部SRAM、SDRAM等)中。由于Flash存储器具有电信号删除功能,且删除速度快,集成度高,因此已成为此种存储器的首选。由于Flash存储器的存取

速度较慢,写入Flash存储器的程序将在系统上电时被DSP装载到快速的存储器中运行,这个过程称为Boot loader。不同的DSP有不同的引导方式。以TI公司TMS320C6000系列芯片为例,自举方式有3种:无自举(No Boot),CPU直接开始执行地址0处的指令;主机自举(Host Boot),系统复位后主机通过CPU的HPI(主程序设计接口)初始化DSP的存储空间;ROM自举(ROM Boot),DMA控制器从CEl 空间复制固定长度程序的地址0处,然后从地址0处开始执行。对于620x/670x DMA,复制64 kB数据从CEl到地址0;而对于621x/671x EDMA,复制1 kB数据从CEl地址开始到地址0。 关于TI公司的C6000芯片二次Bootloader在许多文献都介绍过,包括二次Bootloader的PLL、EMIF的设置和搬移表的设置和Flash存储器的烧写过程,但是对于有中断向量表的二次Bootloader实现的文献很少。本文以TI公司高性能DSP的代表作TMS320C6000系列芯片为例,介绍了一种带中断向量表的二次Bootloader 的新途径,从而为TMS320C6000系列DSP的开发提供了一种新的思路。该方法在实际中得到具体应用,系统运行稳定可靠。 1 二次Bootload的过程 TMS320C6713是TI公司推出的TMS320C67xx系列浮点DSP中最新的一种芯片。TMS320C6713每周期可以执行8条32位指令;支持32/64位数据;具有最高225MHz的运行速度和1800 MIPs(百万次运算每秒)或1350 MFLOPS(百万次浮点运算每秒)的处理能力;同时是有强大的外设支持能力;EMIP(外部存储器接口)可以很方便地与SDRAM、SBSRAM、Flash存储器、SRAM等同步和异步存储器相连,16位EHPI接口可以与各种处理器接口;另外,还有优化的多通道缓存串口和多通道音频串口,这些外部接口使设计人员可以很容易实现自己的应用系统。 在选择ROMBoot方式时,RESET由低变高后,C6713的CPU内核处于复位状态,而C6713的其他部分则开始工作,此时EMIF的CEl空间根据ROM Boot的方式

Boot_Loader介绍

Boot Loader Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发最基本的一步是板级支持包(BSP),而BootLoader 设计则在BSP开发中具有极为关键的地位。 1.什么是BootLoader 嵌入式系统的启动代码一般由两部分构成:引导代码和操作系统执行环境的初始化代码。其中引导代码一般也由两部分构成:第一部分是板级、片级初始化代码,主要功能是通过设置寄存器初始化硬件的工作方式,如设置时钟、中断控制寄存器等,完成内存映射、初始化MMU等。第二部分是装载程序,将操作系统和应用程序的映像从只读存储器装载或者拷贝到系统的RAM中并执行。 (1)什么是板级BSP? BSP(Board Support Package)是板级支持包,是介于主板硬件和操作系统之间的一层,主要是为了支持操作系统,使之能够更好的运行于硬件主板。不同的操作系统对应于不同形式的BSP,例如WinCE的BSP和Linux的BSP相对于某CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的。所以,BSP一定要按照该系统BSP的定义形式来写,这样才能与上层OS保持正确的接口,良好的支持上层OS。 (2)什么是Boot Loader 在BSP中有一个重要的组成部分就是BootLoader,它是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,为调用操作系统内核准备好环境。

嵌入式linux学习心得(精选多篇)

嵌入式linux学习心得(精选多篇) 第一篇:嵌入式linux学习内容 知识结构 1嵌入式处理器与裸机程序开发2linux系统管理3linux 应用程序开发4linux驱动程序开发5linux内核开发与系统移植 一、处理器 1arm处理器工作模式2arm系统寄存器3arm寻址方式4arm汇编指令集5arm环境c语言编程6arm中断与异常7ads 集成开发环境 8裸机程序开发(串口、lcd、时钟、led、按键……) 二、系统管理 1linux定制安装2linux命令详解 3samba、nfs、tftp、wireshark使用4shell编程 三、应用程序开发 1gcc、gdb、makefile2文件、时间编程

3多进程、多线程程序设计4进程间通讯5网络编程 6qt图形化应用程序开发7android图形化应用程序开发 四、内核开发 1linux内核配置与裁剪2linux内核模块开发3根文件系统制作4进程子系统5内存子系统6proc文件系统7系统调用8内核定时器9内核异常分析 五、驱动程序开发 1字符设备驱动程序2总线、设备、驱动模型3硬件访问技术4中断处理5input设备驱动6platform驱动程序7pci、usb 驱动程序8网卡驱动程序9触摸屏驱动程序xx串口驱动程序 学习顺序 1嵌入式处理器与裸机程序开发2linux系统管理3linux 应用程序开发4linux内核开发基础5嵌入式linux环境搭建6linux驱动程序开发7深入学习linux内核 第二篇:嵌入式linux学习步骤 嵌入式linux学习步骤 作者:phantom时间:xxxx-8-6文章来源:来自网络

单片机自编程及Bootloader设计

?Bootloader是在单片机上电启动时执行的一小段程序。也称作固件,通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用应用程序准备好正确的环境。 Boot代码由MCU启动时执行的指令组成。这里的loader指向MCU的Flash中写入新的应用程序。因此,Bootloader是依赖于特定的硬件而实现的,因此,在众多嵌入式产品中目前还不可能实现通用Bootloader。 Bootloader的最大优点是:在不需要外部编程器的情况下,对嵌入式产品的应用代码进行更新升级。它使得通过局域网或者Intemet远程更新程序成为可能。例如,如果有5 000个基于MCU的电能表应用程序需要更新,电能表制造商的技术人员就可以避免从事对每一个电能表重新编程的巨大工作量,通过使用Bootloader的功能,由控制中心通过电能表抄表系统网络,远程对5 000个电表重新编程。可见,Bootloader功能对于嵌入式系统的广泛应用具有十分重要的意义。 1 78K0/Fx2系列单片机简介 78K0/Fx2系列是带CAN控制器的8位单片机,该系列单片机广泛应用于汽车电子,智能仪表等领域。其内置POC(可编程上电清零电路)/LVI(可编程低电压指示器),单电压自编程闪存,引导交换功能(闪存安全保护),具有低功耗、宽电压范围、超高抗干扰等性能。 78K0系列单片机支持自编程(Self-programming)。所谓自编程,是指用Flash存储器中的驻留的软件或程序对Flash存储器进行擦除/编程的方法。通过单片机的自编程功能,可以设计Bootloader程序,通过串口等通信接口实现对产品重新编程、在线升级的功能。 以μPD78F0881为例。μPD78F0881为78KO/Fx2系列中的一款44管脚单片机,内置32 KB Flash ROM,2 KB RAM,自带2个串行通信接口。其内部Flash结构如图1所示。为了方便实现擦除和编程,人为地将整个Flash分成若干个block,每个block 大小为1 KB。block为自编程库函数中空白检测、擦除、校验的最小单位。blockO从地址0000H开始,程序都从0000H开始执行。block0~block3共4 KB存储空间为 Bootloader程序存储区域。block4~block31为应用程序存储区域。

U-Boot从NAND Flash启动的实现

U -Boot 从NAND Flash 启动的实现 王磊 (太原理工大学信息工程学院,山西太原030024) 摘要:U -Boot 不能从NAND Flash 启动给应用带来些不便,因此修改U -Boot 使其支持从NAND Flash 启动。分析了 U -Boot 启动流程的两个阶段及实现从NAND Flash 启动的原理和思路,并根据NAND Flash 的物理结构和存储特 点,增加U -Boot 对NAND Flash 的操作支持,从而完成把存储在NAND Flash 上的U -Boot 代码复制到SDRAM 中执行,实现从NAND Flash 的启动。修改过后的U -Boot 可以直接从NAND Flash 启动,给应用带来便利。关键词:U -Boot ;NAND Flash ;Bootloader ;S3C2440;移植中图分类号:TP316 文献标识码:A 文章编号:1674-6236(2010)05-0098-03 Realization of U -Boot booting through NAND Flash WANG Lei (Department of Information Engineering ,Taiyuan University of Technology ,Taiyuan 030024,China ) Abstract:It is not convenient that U -Boot can ’t boot through NAND Flash.In this paper ,the codes of U -Boot is modified to support that.This paper analyzes two steps of U -Boot and the method of supporting that the U -Boot boots from NAND Flash.Based on the memory characteristics and the physical structure of NAND Flash ,this paper adds the codes of NAND Flash in order to carry the codes to SDRAM that stored in the NAND Flash ,thus realizes U -Boot boots from NAND Flash.The modified U -Boot runs through NAND Flash straightly ,it is a great convenience to the application of U -Boot.Key words:U -Boot ;NAND Flash ;Bootloader ;S3C2440;porting 电子设计工程 Electronic Design Engineering 第18卷 Vol.18 第5期No.52010年5月May.2010 收稿日期:2009-10-11 稿件编号:200910032 作者简介:王磊(1985—),男,山西河津人,硕士研究生。研究方向:嵌入式系统、DCS 、自动控制。 Bootloader 引导装载程序是系统上电后运行的第一段程 序,其作用是完成基本的硬件初始化工作,所以引导装载程序跟硬件有着紧密的联系。因此必须根据开发板的硬件配置对引导装载程序进行修改才可以使其运行起来。随着嵌入式系统的复杂化,大容量数据存储的NAND Flash 的应用会越来越广泛,同时U -Boot 是功能最丰富的Bootloader ,但遗憾的是U -Boot 不支持从NAND Flash 启动。所以如果能实现 U -Boot 从NAND Flash 启动的话将会给应用带来很大的方 便。本文讨论修改U -Boot 使其支持从NAND Flash 启动,采用基于S3C2440的开发板。 1U -Boot 简介及流程分析 U -Boot ,全称universal boot loader ,是遵循GPL 条款的开 放源代码项目。可以引导多种操作系统,支持多种架构的 CPU 。它支持如下操作系统:Linux 、NetBSD 、VxWorks 等,支持 如下架构的CPU :PowerPC 、MIPS 、X86、ARM 、NIOS 、XScale 等,同时支持NFS 挂载,是一个功能丰富的BootLoader 。它的整个程序框架清晰,易于移植,许多设计人员将自己的移植代码上传到网站(http ://https://www.360docs.net/doc/012301204.html,/projects/u-boot/)上,更新速度很快。目前的版本是1.1.6,本论文正是采用此版本进行说明,U -Boot 的目录结构参见U -Boot 源代码。要进行U -Boot 的修改移植必须了解U -Boot 的程序运行流程,这是必要的一步。U -Boot 属于两阶段的BootLoader ,其启动流程如图1所示。第一阶段的文件为cpu/arm920t/start.S 和board/smdk2410/lowlevel_init.S ,用ARM 汇编语言编写,前者是平台相关的,后者是开发板相关的[1]。第一阶段主要是关于基本硬件的初始化,包括关闭MMU 、CACHE 、设置PLL 时钟比例、关闭看门狗;初始化SDRAM ,为复制第二阶段代码做准备,最后复制第二阶段代码到SDRAM 中,然后跳到 图1 U -Boot 启动流程 -98-

BootLoader—vivi注释

s3c2410 bootloader vivi完全注释 四.Bootloader vivi 为了将linux移植到ARM上,碰到的第一个程序就是bootloader,我选用韩国mizi公司的vivi。您可以在以下地址下载: https://www.360docs.net/doc/012301204.html,/developer/s3c2410x/download/vivi.html 如果您对bootloader没有什么概念,在学习VIVI的代码之前,建议您阅读一篇文章《嵌入式系统 Boot Loader 技术内幕》(詹荣开著)。链接地址如下:https://www.360docs.net/doc/012301204.html,/developerworks/cn/linux/l-btloader/ 当您阅读了上述文章后,我再企图在理论上罗嗦什么就不合适了(这篇文章实在太好了)。vivi也可以分为2个阶段,阶段1的代码在 arch/s3c2410/head.S 中,阶段2的代码从init/main.c的main函数开始。您可以跳到实验部分先感受一下vivi。 (1)阶段1:arch/s3c2410/head.S 沿着代码执行的顺序,head.S完成如下几件事情: 1、关WATCH DOG:上电后,WATCH DOG默认是开着的 2、禁止所有中断:vivi中没用到中断(不过这段代码实在多余,上电后中断默认是关闭的) 3、初始化系统时钟:启动MPLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。请参考实验十一:CLOCK 4、初始化内存控制寄存器:还记得那13个寄存器吗?请复习实验五:MEMORY CONTROLLER 5、检查是否从掉电模式唤醒,若是,则调用WakeupStart函数进行处理——这是一段没用上的代码,vivi不可能进入掉电模式 6、点亮所有LED 7、初始化UART0: a.设置GPIO,选择UART0使用的引脚 b.初始化UART0,设置工作方式(不使用FIFO)、波特率115200 8N1、无流控等,请参考实验七:UART 8、将vivi所有代码(包括阶段1和阶段2)从nand flash复制到SDRAM中:a.设置nand flash控制寄存器 b.设置堆栈指针——调用C函数时必须先设置堆栈 c.设置即将调用的函数nand_read_ll的参数:r0=目的地址(SDRAM的地址),r1=源地址(nand flash的地址),r2=复制的长度(以字节为单位) d.调用nand_read_ll进行复制 e.进行一些检查工作:上电后nand flash最开始的4K代码被自动复制到一个称为“Steppingstone”的内部RAM中(地址为0x00000000-0x00001000);在执行nand_read_ll之后,这4K代码同样被复制到SDRAM中(地址为 0x33f00000-0x33f01000)。比较这两处的4K代码,如果不同则表示出错 9、跳到bootloader的阶段2运行——就是调用init/main.c中的main函数:a.重新设置堆栈 b.设置main函数的参数 c.调用main函数

stm32f103rb的bootloader软件安全设计方案

STM32F103RB的Bootloader软件安全设计 方案 时间:2009-10-19 12:31:50 来源:单片机与嵌入式系统作者:深圳大学林郭安黄强许文焕 引言 随着嵌入式系统产品的发展,其功能趋向系统化、复杂化,不同场合和具体应用对产品的升级维护提出了更多的需求。厂商针对这一问题普遍采用。Bootloader引导应用程序结构的嵌入式软件,在产品升级和维护过程中只需提供升级程序包由Bootloader在升级模式下更新产品的应用程序,即可快捷地实现产品升级。 一直以来,嵌入式软件的安全和知识产权保护是厂商面对市场竞争着重关心的焦点。嵌入式系统处理器的有限硬件资源和高效率要求使得其难以应用复杂和大运算量的加密算法,对代码的保护更多依赖于硬件,这往往具有很多潜在的安全隐患。本文就.Bootloader引导应用程序结构的软件在STM32F103RB芯片上应用时,遭到篡改攻击后所面临的代码泄漏风险进行研究和验证,并提出了改进Bootloader的安全设计方案,加强代码的安全性。 1 篡改攻击风险研究 1.1 研究的意义 嵌入式系统产品的开发往往成本高、开发周期长,一旦产品中的嵌入式软件被抄袭或盗窃都将给厂商带来巨大的损失。随着嵌入式处理器设计技术的发展,对片内Flash 中的代码保护也日渐完善。芯片在保护状态下,可以完全禁止通过调试接口或SRAM中运行的程序读取Flash内容,但产品阶段保存在Flash中的代码运行时对自身的读取是允许的,如果非法使用者通过特殊手段篡改了Flash中的部分代码为非法读取程序,并使之在Flash 中成功运行,将使产品代码发生部分泄漏,这就是产品面临的篡改攻击风险。针对这一风险的研究在实际应用中显得十分重要。 ST公司推出的STM32系列微处理器采用ARM新一代Cortex-M3内核,其中增强型的STM32F103RB具有72 MHz主频、20 KB片内SRAM、128 KB片内Flash以及丰富的接口资源,可以很好地满足广泛的嵌入式产品的应用需求。较低的芯片价格和简单的开发方式使之应用前景非常广阔,对该芯片上代码的安全研究也具有深远意义。 1.2 风险研究 Bootloader引导应用程序结构的嵌入式软件可以满足产品功能升级和维护的需求,在实际应用中被厂商普遍采用。Bootloader程序是在系统上电复位后在Flash中首先执行的一小段代码,其基本功能模块如图1所示。

基于MC9S12XS128 的BootLoader设计

基于MC9S12XS128 的BootLoader 设计 前言 接触飞思卡尔芯片大概有4个月的时间了,对这款16位寄存器有了一定的了解,但是因为飞思卡尔单片机的资料特别少,bootloader相关资料几乎没有,为此写下这篇设计书,方便大家学习参考交流,其中有不对的地方还请大家批评指正。本设计书主要讲解bootloader的实现过程,需对飞思卡尔16位单片机有一定的基础,了解该系列芯片的开发环境CodeWarrior5.1。 一、BootLoader的基石Prm 文件 我们在用CodeWarrior创建一个工程后会产生很多文件,其中有一个连接用的Prm文件,他的位置如图1.1所示。 图1.1 Codewarrior的Prm文件是用来划分代码段、数据段的,这类似于liunx中的连接脚本文件。程序一开始是进行初始化,然后跳转到main函数执行的,这段代码全部放在了ROM_C000处,而ROM_C000对应的地址是0xC000 到0xFEFF,具体实现代码如图1.2所示。第一部分是指明ROM_C000对的地址,第二部分是指明代码所存放的位置是ROM_C000。 我们知道bootloader和app必须在不同的ROM区域,bootloader接收到上位机发送的程序,先将其存储,后再跳转到app位置执行,所以prm文件可以帮我们实现bootloader与app程序的分离。 具体实现方法如下: 1、将原来的ROM_C000分成两个部分,ROM_BootLoader和ROM_App,因为bootloader代码较小需要保护,所以将其地址设置成0xf000-0xfeff,App的地址设置成0xc000-0xefff,这样这两块的总地址大小正好是原ROM_C000的大小。

S3C2410 bootloader ----VIVI阅读笔记

S3C2410 bootloader ----VIVI阅读笔记 建议读一读《嵌入式系统BootLoader技术内幕》(詹荣开著),google一下就会找到一片。什么是Bootloader就不再这里废话了,看看上面的文章就明了了。Bootloader有非常多种,如本文将要阅读的vivi,除此之外更有uboot,redboot,lilo等等。Vivi 是韩国mizi公司专门为三星s3c2410芯片设计的Bootloader。 先来看看vivi的源码树: vivi-+-arch-+-s3c2410 |-Documentation |-drivers-+-serial | …-mtd-+-maps | |-nor | …-nand |-include-+-platform | |-mtd | …-proc |-init |-lib-+-priv_data |-scripts-+-lxdialog |-test |-util 能google一下,搜到源码vivi.tar.gz。 前面提到的文件已系统的分析了bootloader的,这里就按原始码来具体说事。vivi也能分为2个阶段,阶段1的代码在arch/s3c2410/head.S中,阶段2的代码从init/main.c的main函数开始。 1.阶段1 阶段1从程式arch/s3c2410/head.S开始,按照head.S的代码执行顺序,一次完成了下面几个任务: u 1、关WA TCH DOG (disable watch dog timer) 上电后,WATCH DOG默认是开着的 u 2、禁止所有中断(disable all interrupts) vivi中不会用到中断,中断是系统的事,bootloader可不能去干这事的(不过这段代码实在多余,上电后中断默认是关闭的) u 3、初始化系统时钟(initialise system clocks) 启动MPLL,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz,“CPU bus mode”改为“Asynchronous bus mode”。 u 4、初始化内存控制寄存器(memsetup) S3c2410共有15个寄存器,在此开始初始化13个寄存器。 u

飞思卡尔关于Bootloader的设计

Implement UART Boot-loader On Coldfire V1 Products Paul Zhang, Freescale Shanghai. (paul.zhang@https://www.360docs.net/doc/012301204.html,) Boot-loader is commonly needed when designing such an embedded system which requires frequent firmware upgrade in the field or via remote. Most of Freescale’s flash based microcontrollers are capable to do flash-programming in the application and on-the-fly. The newly released Coldfire V1 core 32-bit MCU is no exception. This article is aimed at revealing some implementation details to design a boot-loader via conventional UART data port. We’ll use the 1st released V1 part MCF51QE128 and its accompanied evaluation board DEMOQE128 (Figure-1) as hardware platform to test and demonstrate the application. This demo board is easily orderable via 3rd party P&E Microcomputer System (https://www.360docs.net/doc/012301204.html,/). We use Freescale’s own software IDE CodeWarrior as the software development platform. The latest version who supports CF V1 parts is CW V6.1. You can download a special edition free of charge after logged or registered in Freescale’s web site: https://www.360docs.net/doc/012301204.html,/ 1. Simple theory of Boot-loader Boot-loader by any means is just a section of specially designed executable code which resides in a carefully allocated memory area in a chosen MCU. It’ll be largely, if not absolutely, transparent to normal user application code flow. However, once activated by some pre-set conditions, it can take over the full control of all MCU resources, receive new code data via any possible communication channels, re-program the partial or even entire Flash code memory and finally kick off a brand new application code to run with the same hardware system. 2. Introduction of V1 memory map Before designing a boot-loader on a specific MCU, it’s essential to fully understand its memory map. We need to put the boot-loader at a specific memory area where it has least intrusion to normal user application code. We must well understand how the reset & interrupt vector scheme works on this particular MCU so that the boot-loader can manipulate some or all vectors behind the scene to give the highest efficiency and flexibility for user applications. Figure-2 shows the entire memory map on MCF51QE128. In overall it has 128K bytes on-chip Flash memory and 8K DEMOQE128 Figure-1 Memory map on MCF51QE128 Figure-2

相关文档
最新文档