- 浏览: 75487 次
- 性别:
- 来自: 北京
1.Bootloader的作用
- 对于无OS的arm,可以将其用作一般的单片机使用。不带OS的arm另外一种开发方式就是用Bootloader来引导应用程序的下载,如通过串口或网口(具体实现依赖于Bootloader的代码功能)。
- 要在arm上运行OS,就必须要有Bootloader了。之所以依赖Bootloader引导内核,是因为ARM无法完成大系统映像的下载工作,而Bootloader下载可以有更多的自由度,可以制定内核映像和文件系统映像的下载地址等。Bootloader的职责包括硬件检测、硬件初始化和加载kernel,这些工作按照功能可以分为两个部分:硬件检测和初始化功能实现作为stage1;加载kernel作为stage2。stage1完全依赖于硬件,这一部分用汇编语言实现;stage2与操作系统有关,一般用C语言来实现。
2.Bootloader的工作模式
在开发时,通常使用各种命令操作Bootloader,一般通过串口来连接PC和开发板,可以在串口上输入各种命令、观察运行结果、烧写内核和文件系统等。这也只是堆开发人员才有意义,用户使用产品时是不用串口来控制Bootloader的。从这个观点看,bootloader可以分为以下两种工作模式:
-
启动加载模式
上电后,Bootloader从板子上的某个固态存储设备上将操作系统加载到RAM运行,这个过程没有用户的介入。 -
下载模式
这种模式下,开发人员使用各种命令,从主机上将文件(内核映像、文件系统映像)下载到目标机上。板子与主机间传输文件时,可以用串口的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
发表评论
-
排序算法---计数排序
2011-11-27 14:57 611#include <stdio.h> vo ... -
排序算法---归并排序
2011-11-26 19:33 748#include <stdio.h> vo ... -
排序算法---交换排序(冒泡排序、快速排序)
2011-11-26 19:32 702#include <stdio.h> vo ... -
排序算法---选择排序(简单插入排序、堆排序)
2011-11-26 19:31 649#include <stdio.h> vo ... -
排序算法---插入排序(简单排序、shell排序)
2011-11-26 19:29 650#include <stdio.h> vo ... -
删除字符串中的特定字符和重复字符
2011-11-26 13:45 666#include <stdio.h> vo ... -
Linux编程-多线程、同步和互斥(转载)
2011-11-14 15:27 1209http://www.cnblogs.com/skynet/a ... -
寻找字符串中的最大数字子串
2011-09-22 17:17 1523#include <stdio.h> int f ... -
删除子字符串
2011-09-21 15:27 604#include <stdio.h> #incl ... -
c语言随机数
2011-09-18 17:15 687#include <stdio.h> #i ... -
带头结点有序单链表的合并
2011-09-08 14:21 1186typedef int Item; typedef s ... -
链表逆序的递归/非递归算法
2011-09-01 23:37 1412/** *链表逆序的递归/非递归算法 */ # ... -
递归算法---字符串---全/部分组合和全排列
2011-08-30 23:01 1222#include <stdio.h> #i ... -
递归算法---0-1背包问题(面试宝典)
2011-08-28 21:11 1901/** *正整数n,m,从数列1、2、3、...、n中随 ... -
递归算法---字符串全组合(面试宝典)
2011-08-28 17:24 1257/** *求一字符串所有字串的组合 */ #i ... -
递归算法---求解多元一次方程
2011-08-28 10:38 1898/** * 求解x1+x2+x3+...+x10 = ... -
(zz)关于类的sizeof
2011-08-27 18:16 587http://blog.sina.com.cn/s/blog_ ... -
(zz)结构体字节对齐原则
2011-08-27 17:53 1579结构体默认的字节对齐一般满足三个准则: 结构体变量的首 ... -
list.h from linux-2.4
2011-08-25 09:59 607#ifndef _LIST_H_ #define _L ... -
The C Programming Lang (K&R) hash table
2011-08-25 09:52 936hash.h #include <stdio.h ...
相关推荐
标题中的"boot.rar_ dsp boot _DSP烧写程序_dsp ...总的来说,这个压缩包提供了一个学习和实践DSP系统启动及固件烧写的良好起点,特别是对于那些希望深入嵌入式系统开发的初学者而言,这是一份非常有价值的参考资料。
本篇将详细阐述s3c44b0x处理器上的Bootloader烧写方法,以及如何处理bootloader.bin源文件。 首先,s3c44b0x是一款由Samsung制造的ARM7TDMI-S架构的微处理器,广泛应用于各种嵌入式设备。Bootloader针对不同的...
总的来说,"flash-utils-davinci.tar.gz_flash烧写"是一个涉及嵌入式系统开发、尤其是TI DM6467平台的高级主题,涵盖了Bootloader设计、Flash编程和系统初始化等多个方面。对这些知识点的掌握将有助于开发者提升其在...
STM32F4_YMODEM_BootLoader是...总的来说,STM32F4_YMODEM_BootLoader是一个实用的工具,简化了STM32F4设备的固件升级过程,通过Y-MODEM协议实现了远程烧录,对于开发人员来说,这大大提高了工作效率并降低了维护成本。
在嵌入式开发领域,固件烧写是至关重要的步骤,尤其对于基于特定处理器的设备,如本例中的IMX6ULL芯片。"正点原子修改过的MFG_TOOL烧写工具(出厂固件烧录)"是专为IMX6ULL设计的一个定制版烧录工具,主要用于在Win...
### Bootloader烧写说明 #### 一、Bootloader的重要性及作用 Bootloader是嵌入式系统启动时运行的第一段小程序,其主要功能是初始化硬件设备、建立内存空间映射图,为最终调用操作系统内核做好准备。对于基于ARM...
在嵌入式系统开发中,TMS320F281x系列是Texas Instruments(TI)公司推出的一款高性能数字信号处理器(DSP),常用于控制、信号处理等应用。本教程将详细介绍如何使用串口(Serial Communication Interface, SCI)对...
这个过程对于开发、调试和更新嵌入式系统的固件至关重要。 首先,我们需要确保具备以下硬件和软件条件: 1. GPS2440开发板,其内部搭载了需要烧写的MCU。 2. JLink硬件设备,这通常是通过USB接口连接到电脑的。 3. ...
整个过程涉及了嵌入式系统开发的多个环节,包括硬件连接、软件烧写、系统构建和启动配置等。对于初学者,这是一个很好的实践项目,能加深对嵌入式系统工作原理的理解。而对于经验丰富的开发者,这也是日常工作中不可...
通过这个实验,我们不仅可以掌握Bootloader烧写的基本流程,还能了解内核和文件系统下载的方法,这对于理解和开发嵌入式系统至关重要。同时,实践操作也将增强我们对相关工具和技术的理解,提升解决问题的能力。在...
标题和描述中提到的“bootloader烧写内核文件系统下载”,指的是在嵌入式系统开发和固件升级过程中的一项关键步骤,即烧写bootloader、内核以及文件系统到目标设备上。这通常涉及以下几个技术点: 1. **Bootloader...
1. **JLink**:JLink是一款流行的调试器和编程器,由SEGGER公司提供,广泛用于嵌入式系统开发。它支持多种微处理器和微控制器,为开发者提供硬件调试和编程功能。 2. **Bootloader**:Bootloader是设备启动时的第一...
固件烧写是无人机、机器人或者嵌入式设备等硬件设备的重要步骤,它涉及到系统启动、设备控制和功能实现的核心部分。在这个过程中,"烧写固件.rar" 提供了一个针对 PX4 飞控的简便方法,尤其适用于对 PX4 进行二次...
《MPC5748G Bootloader与应用程序...它涵盖了Bootloader的开发,包括硬件初始化和应用程序加载,以及具体应用程序的编写,涉及了嵌入式系统开发的多个环节,对于理解PowerPC架构和掌握嵌入式系统开发流程具有重要价值。
【嵌入式开发中的H-JTAG工具】 在嵌入式系统开发中,烧写Bootloader是至关重要的步骤,它相当于设备的操作系统启动器,负责初始化硬件、加载操作系统映像到内存并启动执行。H-JTAG是一款强大的烧写工具,专为这种...
文档中强调了开发环境的搭建步骤,包括编译和烧写BootLoader的详细过程。具体的知识点包括: 1. i.MX8M Mini开发环境搭建: - 首先需要下载相应的板级开发包,并创建YOCTO编译环境,以便于能够编译出适用于i.MX8M ...
### 嵌入式Linux开发环境的Bootloader、内核与文件系统烧写详解 #### 实验背景与目的 在嵌入式系统开发过程中,**Bootloader**、**内核**以及**文件系统**的烧写是至关重要的基础步骤。**Bootloader**作为系统的...
Bootloader是嵌入式系统中的第一段运行代码,负责初始化硬件,为操作系统或应用程序提供加载环境。在STM32中,Bootloader通常存储在芯片的闪存中,用于加载和启动应用程序。远程Bootloader则允许通过网络接口,如...
### 基于嵌入式系统的BootLoader设计与应用 #### 一、嵌入式系统及...通过将硬件初始化和内核加载两个模块分离,并提供一个易于使用的命令行接口,不仅可以简化调试流程,还能显著提高嵌入式系统的开发效率。
ESP32是一款强大的、集成Wi-Fi和蓝牙双模的微控制器,广泛应用于物联网(IoT)设备、智能家居、智能穿戴以及各种嵌入式系统。在开发过程中,经常需要对ESP32进行固件烧写,以更新或安装新的功能。本指南将详细解释如何...