`
ackerman
  • 浏览: 75056 次
  • 性别: 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

分享到:
评论

相关推荐

    boot.rar_ dsp boot _DSP烧写程序_dsp boot_dsp 引导_dsp 烧写

    标题中的"boot.rar_ dsp boot _DSP烧写程序_dsp ...总的来说,这个压缩包提供了一个学习和实践DSP系统启动及固件烧写的良好起点,特别是对于那些希望深入嵌入式系统开发的初学者而言,这是一份非常有价值的参考资料。

    s3c44b0x_bootloader_BIN的烧写方法及bootloader.bin源文件

    本篇将详细阐述s3c44b0x处理器上的Bootloader烧写方法,以及如何处理bootloader.bin源文件。 首先,s3c44b0x是一款由Samsung制造的ARM7TDMI-S架构的微处理器,广泛应用于各种嵌入式设备。Bootloader针对不同的...

    flash-utils-davinci.tar.gz_flash烧写

    总的来说,"flash-utils-davinci.tar.gz_flash烧写"是一个涉及嵌入式系统开发、尤其是TI DM6467平台的高级主题,涵盖了Bootloader设计、Flash编程和系统初始化等多个方面。对这些知识点的掌握将有助于开发者提升其在...

    STM32F4_YMODEM_BootLoader.rar

    STM32F4_YMODEM_BootLoader是...总的来说,STM32F4_YMODEM_BootLoader是一个实用的工具,简化了STM32F4设备的固件升级过程,通过Y-MODEM协议实现了远程烧录,对于开发人员来说,这大大提高了工作效率并降低了维护成本。

    正点原子修改过的MFG_TOOL烧写工具(出厂固件烧录).zip

    在嵌入式开发领域,固件烧写是至关重要的步骤,尤其对于基于特定处理器的设备,如本例中的IMX6ULL芯片。"正点原子修改过的MFG_TOOL烧写工具(出厂固件烧录)"是专为IMX6ULL设计的一个定制版烧录工具,主要用于在Win...

    bootloader烧写说明

    ### Bootloader烧写说明 #### 一、Bootloader的重要性及作用 Bootloader是嵌入式系统启动时运行的第一段小程序,其主要功能是初始化硬件设备、建立内存空间映射图,为最终调用操作系统内核做好准备。对于基于ARM...

    JLink-v9_bootloader可升级固件 亲测好用

    1. **JLink**:JLink是一款流行的调试器和编程器,由SEGGER公司提供,广泛用于嵌入式系统开发。它支持多种微处理器和微控制器,为开发者提供硬件调试和编程功能。 2. **Bootloader**:Bootloader是设备启动时的第一...

    DSP2812通过串口烧写程序具体步骤.rar_dsp2812串口烧写_dsp2812更新程序_dsp芯片写程序_串口烧写_串口

    在嵌入式系统开发中,TMS320F281x系列是Texas Instruments(TI)公司推出的一款高性能数字信号处理器(DSP),常用于控制、信号处理等应用。本教程将详细介绍如何使用串口(Serial Communication Interface, SCI)对...

    2440_jlink烧写GPS2440的过程._

    这个过程对于开发、调试和更新嵌入式系统的固件至关重要。 首先,我们需要确保具备以下硬件和软件条件: 1. GPS2440开发板,其内部搭载了需要烧写的MCU。 2. JLink硬件设备,这通常是通过USB接口连接到电脑的。 3. ...

    用JLink(V8)_+_AXD烧写FL2440开发板的BootLoader并利用USB线下载WinCE和Linux(V1[1].0)

    整个过程涉及了嵌入式系统开发的多个环节,包括硬件连接、软件烧写、系统构建和启动配置等。对于初学者,这是一个很好的实践项目,能加深对嵌入式系统工作原理的理解。而对于经验丰富的开发者,这也是日常工作中不可...

    实验2bootloader烧写内核文件系统下载汇编.pdf

    通过这个实验,我们不仅可以掌握Bootloader烧写的基本流程,还能了解内核和文件系统下载的方法,这对于理解和开发嵌入式系统至关重要。同时,实践操作也将增强我们对相关工具和技术的理解,提升解决问题的能力。在...

    实验2bootloader烧写内核文件系统下载.pdf

    标题和描述中提到的“bootloader烧写内核文件系统下载”,指的是在嵌入式系统开发和固件升级过程中的一项关键步骤,即烧写bootloader、内核以及文件系统到目标设备上。这通常涉及以下几个技术点: 1. **Bootloader...

    烧写固件.rar,对飞控进行bootloader烧录

    固件烧写是无人机、机器人或者嵌入式设备等硬件设备的重要步骤,它涉及到系统启动、设备控制和功能实现的核心部分。在这个过程中,"烧写固件.rar" 提供了一个针对 PX4 飞控的简便方法,尤其适用于对 PX4 进行二次...

    MPC5748G_bootloader+app

    《MPC5748G Bootloader与应用程序...它涵盖了Bootloader的开发,包括硬件初始化和应用程序加载,以及具体应用程序的编写,涉及了嵌入式系统开发的多个环节,对于理解PowerPC架构和掌握嵌入式系统开发流程具有重要价值。

    h-jtag 烧写bootloader软件

    【嵌入式开发中的H-JTAG工具】 在嵌入式系统开发中,烧写Bootloader是至关重要的步骤,它相当于设备的操作系统启动器,负责初始化硬件、加载操作系统映像到内存并启动执行。H-JTAG是一款强大的烧写工具,专为这种...

    MX8Mmini_4.14.78_ga_BootLoader_V1-20190118_chn.pdf

    文档中强调了开发环境的搭建步骤,包括编译和烧写BootLoader的详细过程。具体的知识点包括: 1. i.MX8M Mini开发环境搭建: - 首先需要下载相应的板级开发包,并创建YOCTO编译环境,以便于能够编译出适用于i.MX8M ...

    bootloader,内核与文件系统烧写

    ### 嵌入式Linux开发环境的Bootloader、内核与文件系统烧写详解 #### 实验背景与目的 在嵌入式系统开发过程中,**Bootloader**、**内核**以及**文件系统**的烧写是至关重要的基础步骤。**Bootloader**作为系统的...

    STM32局域网远程烧录APP示例_APP_Bootloader_STM32F103_stm32远程_STM32烧录_

    Bootloader是嵌入式系统中的第一段运行代码,负责初始化硬件,为操作系统或应用程序提供加载环境。在STM32中,Bootloader通常存储在芯片的闪存中,用于加载和启动应用程序。远程Bootloader则允许通过网络接口,如...

    基于嵌入式系统的BootLoader设计与应用

    ### 基于嵌入式系统的BootLoader设计与应用 #### 一、嵌入式系统及...通过将硬件初始化和内核加载两个模块分离,并提供一个易于使用的命令行接口,不仅可以简化调试流程,还能显著提高嵌入式系统的开发效率。

    ESP32烧写固件软件_esp32烧写_esp32能刷哪些_esp32cam烧写_esp32固件地址_Esp32下载固件_

    ESP32是一款强大的、集成Wi-Fi和蓝牙双模的微控制器,广泛应用于物联网(IoT)设备、智能家居、智能穿戴以及各种嵌入式系统。在开发过程中,经常需要对ESP32进行固件烧写,以更新或安装新的功能。本指南将详细解释如何...

Global site tag (gtag.js) - Google Analytics