`
ackerman
  • 浏览: 72764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

嵌入式开发_Bootloader的烧写

阅读更多

1.Bootloader的作用

  1. 对于无OS的arm,可以将其用作一般的单片机使用。不带OS的arm另外一种开发方式就是用Bootloader来引导应用程序的下载,如通过串口或网口(具体实现依赖于Bootloader的代码功能)。
  2. 要在arm上运行OS,就必须要有Bootloader了。之所以依赖Bootloader引导内核,是因为ARM无法完成大系统映像的下载工作,而Bootloader下载可以有更多的自由度,可以制定内核映像和文件系统映像的下载地址等。Bootloader的职责包括硬件检测、硬件初始化和加载kernel,这些工作按照功能可以分为两个部分:硬件检测和初始化功能实现作为stage1;加载kernel作为stage2。stage1完全依赖于硬件,这一部分用汇编语言实现;stage2与操作系统有关,一般用C语言来实现。

2.Bootloader的工作模式

在开发时,通常使用各种命令操作Bootloader,一般通过串口来连接PC和开发板,可以在串口上输入各种命令、观察运行结果、烧写内核和文件系统等。这也只是堆开发人员才有意义,用户使用产品时是不用串口来控制Bootloader的。从这个观点看,bootloader可以分为以下两种工作模式:

  1. 启动加载模式
    上电后,Bootloader从板子上的某个固态存储设备上将操作系统加载到RAM运行,这个过程没有用户的介入。
  2. 下载模式
    这种模式下,开发人员使用各种命令,从主机上将文件(内核映像、文件系统映像)下载到目标机上。板子与主机间传输文件时,可以用串口的xmodem/ymodem/zmodem协议,它们使用简单,只是速度比较慢;还可以使用tftp、nfs协议来传输;或者使用USB传输。

3.如何将Bootloader烧写(固化)到非易失性存储介质中去呢?(Nor Flash,Nand Flash等)

具体要分以下几种情况:

(1)使用编程器将Bootloader烧写到falsh中:

将Bootloader写入Flash,然后将烧写完毕的Flash插入板子上,这是针对Flash还没有插入板子的情形。编程器也叫device programmer,是对非易失性存储介质和其他电可编程设备进行编程的工具。传统的编程器,需要把Flash(举例)从电路板上取下来,插到编程器的接口上,以完成擦除和烧写。现在的编程器发展的方向是ISP(In-System Programming,在系统可编程),就是指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件。

(2)使用ADS软件和ARM仿真器:

先将编译后的Flash烧写程序加载到SDRAM中,运行Flash烧写程序,在指定Flash烧写的起始地址后,Flash烧写程序将从电脑上把编译好的Bootloader映像烧写到Flash的指定位置。

(3)使用Bootloader:

这是针对Bootloader已经驻留在Flash的情形,可以通过Bootloader烧Bootloader,Bootloader之所以具有这种功能,是由Bootloader的分段执行特性决定的,当Bootloader在Flash中执行时,主要是把自身剩余的代码复制到SDRAM中,然后进入到SDRAM运行后就可以反过来更新Flash中的Bootloader映像了。如果Bootloader不分段一直在Flash中执行,同时又更新Flash中的数据,这样将造成逻辑错误。

(4)处理器支持从ROM启动

有些厂商为了方便用户下载代码和调试,在其处理器内部集成了一个小的ROM,事先固化一小段代码。因为容量有限,代码的功能有限,一般只是初始化串口,然后等待从串口输入数据。这样,串口线实际上就成为了编程器的硬件连接了。比如,Cirrus Logic 的EP93XX系列,它内部集成了一个BootROM,固化代码初始化串口,支持从串口下载数据。那么在Host端只需要相应的开发一个相同串口协议的download程序,就可以完成bootloader(EP93XX系列使用的是Redboot)烧写到Falsh里【注:这里的编程器就可以认为是download+RS-232交叉线】,然后从Falsh启动,有Redboot进行下面的工作。因为Redboot实现了串口传输协议和TFTP协议,就可以通过RS-232来进行控制,通过Ethernet完成大的映象文件如kernel和fs的下载固化。这样,从硬件上电,到最后系统启动的所有环节就都很清晰了。ATMEL的AT91RM9200内部也集成了一个ROM,固化代码,同样初始化串口,启动串口传输协议Xmodem,等待输入【注:这里的编程器就可以认为是loader+RS-232交叉线】。官方提供的loader就是完成把U-boot下载固化到flash里面。因为kernel和fs比较大,可以采用压缩,官方提供boot来完成从flash启动后自动解压过程。这样,从flash启动就慢了许多。

(5)处理器不支持从ROM启动

还有些厂商为了节省ROM空间,提高集成度,不支持从ROM启动模式。比如三星公司的S3C2410等。这样一种简单的方法就是采用JTAG下载线作为编程器的硬件连接,完成其Bootloader(如Vivi)的烧写。在Windows环境下,针对JTAG硬件连接,编程器的软件有JFlash(JTAG for Flash),SJF,Flash Programmer等,还是比较丰富的。在Linux环境下,我所知道的有JFlash的Linux版本【注:在Linux下,这里的编程器就可以认为是JFlash+JTAG下载线,S3C2410是提供JTAG接口的】。

4.参考文章

bootloader与u-boot移植:http://wenku.baidu.com/view/24824feef8c75fbfc77db29b.html
烧写Bootloader的几种方法:http://blog.donews.com/tmsonhust/archive/2008/02/19/1254190.aspx
bootloader烧写 :http://blog.chinaunix.net/u1/45540/showart_513097.html

分享到:
评论

相关推荐

    bootloader,内核与文件系统烧写

    嵌入式Linux开发环境的建立,将开发板还原出厂设置

    电动汽车整车控制器BootLoader功能开发_乐志国

    摘要:传统的电动汽车整车控制器开发中,对程序的烧写是通过BDM调试接口实现的,该方 法不仅在控制器应用程序开发阶段会影响开发效率,而且会给后期整车控制器升级维护造成极 大的不便.通过嵌入式系统引导加载程序(即...

    车载控制器Bootloader开发

    传统的电动汽车整车控制器开发中,对程序的烧写是通过BDM 调试接口实现的,该方法不仅在控制器应用程序开发阶段会影响开发效率,而且会给后期整车控制器升级维护造成极 大的不便.通过嵌入式系统引导加载程序(即...

    嵌入式开发环境的建立

    浙江大学 计算机学院陈文智。讲课ppt,烧写XsBase255的BootLoader

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答]

    1.5 基于ARM和Linux的嵌入式开发平台 习题 第2章 嵌入式交叉编译环境 2.1 嵌入式交叉编译环境简介 2.2 NFS服务 2.3 Samba服务 2.4 Windows和LJnux混合开发模式 2.4.1 VMware虚拟机设置共享 2.4.2 SSH客户端...

    嵌入式系统的U—Boot移植分析

    U-Boot软件是一款功能强大的嵌入式系统Bootloader开发工具,Bootloader用来在启动时引导嵌入式系统,是进行嵌入式系统开发的基础。以华清远见的Fs4412开发板为基础,结合移植的实践过程 ,分析U—Boot移植到ARM ...

    一种用于汽车电控单元CANBootloader的设计与实现_陈彤

    摘要:传统汽车电控单元对程序的烧写一般采用BDM调试接口实现,该方法不仅影响电控单元应用程序的开发 效率,而且会给汽车电控单元后期的升级维护带来不便。使用嵌入式启动引导程序(即Bootloader),能够较好的 解决...

    嵌入式实验报告四.doc

    简述嵌入式开发中bootloader、kernel、filesystem的功能。 答:bootloader: Bootloader是系统启动后首先运行的程序,对于嵌入式linux操作系统的Bootloader,其 最基本的功能是加载linux的内核并运行。Bootloader一般...

    S3C2440嵌入式开发板基础讲解(开发环境的搭建)

    虽然针对的是飞凌TE2240-II的板子,但是好多东西都是相通的,下面是文档目录,大家看需求下载。 第一章TE2440-II开发板硬件介绍 1开发套件包含内容 2开发板主要硬件说明 3开发板支持的操作系统...7如何烧写Bootloader

    嵌入式设计及linux驱动开发指南——基于ARM9处理器.pdf

    第3章 创建嵌入式系统开发环境 3.1 嵌入式Linux的开发环境 3.2 Cygwin 3.3 虚拟机 3.4 交叉编译的预备知识 3.4.1 Make命令和Makefile文件 3.4.2 binutils工具包 3.4.3 gcc编译器 3.4.4 Glibc库 3.4.5 GDB ...

    史上最强的嵌入式底层驱动开发课程 Linux系统开发+Linux高级程序+主板开发+ARM等

    ├嵌入式开发裸板篇> │ ├01 - ARM准备工作及熟悉开发板1.mp4 │ ├02 - ARM准备工作及熟悉开发板2.mp4 │ ├03 - ARM准备工作及熟悉开发板3.avi │ ├04 - ARM准备工作及熟悉开发板4.mp4 │ ├05 - 原理图及电路图...

    嵌入式Linux应用程序开发标准教程(第2版全)

    5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入式Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植...

    PW2440嵌入式主板使用手册V1.2

    2.4 烧写Bootloader的步骤(ATBOOT) 2.4.1 JTAG下载板介绍 2.4.2 SJF2440驱动及环境安装 2.4.3 SJF2440.EXE命令 2.4.4拨码开关设置 2.4.5 SJF2440烧写ATBOOT步骤 2.5 PW2440嵌入式主板Bootloader功能介绍(ATBOOT)...

    ARM 嵌入式LINUX 系统构建与驱动开发

    实在不爽你就把自己叫“嵌入式开发工程师” 三 要不要买开发板 买哪家 我的答案是“在你个人的学习方*”,但是如果看家是需要看这骗笔记的水平,个人推荐还是买现成的。 1 买 买板子可以把注意力集中在软件开发上,...

    嵌入式Linux应用程序开发详解

    5.1 嵌入式开发环境的搭建 133 5.1.1 嵌入式交叉编译环境的搭建 133 5.1.2 超级终端和Minicom配置及使用 135 5.1.3 下载映像到开发板 142 5.1.4 编译嵌入式Linux内核 145 5.1.5 Linux内核目录结构 ...

    基于ARM 与嵌入式Linux 的GPRS 无线通讯系统

    ARM9 中Bootloader 编程与FLASH 烧写;M22 和ARM9 的外围与内部硬件电路的设计;串口通讯的原理与编程;AT 指令的收发等等。 该系统实现了以下功能:语音通讯;短信服务;电话薄的记录与修改;来电查询; 来电显示...

    STM32H7 串口IAP BootLoader程序 工程

    这是一个STM32H723的BootLoader程序,基于keil5的工程,可以使用串口UART进行烧写固件。适用于所有的STM32型号,只需要做一些小小的改动即可。

Global site tag (gtag.js) - Google Analytics