在Bootloader中实现嵌入式系统自动升级
利用SD卡实现嵌入式Linux系统的自动升级

利用SD卡实现嵌入式Linux系统的自动升级冯海洋;马维华【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2012(12)11【摘要】An extension Uboot which achieves the method of maintaining and upgrading embedded device operating system is proposed. The method sends the kernel to be upgraded and file system image into the SD card, the extended Uboot can automatically detect and read the image file of SD card, and then program it to the embedded device for automatic update. Compared to through JTAG port, seri- al port or Ethernet port to connect the host and completes the upgrade of the kernel or file system on the host by manually entering con- trol commands, this method is more convenient and efficient.%提出了一种扩展Uboot实现嵌入式设备操作系统维护与升级的方法。
该方法将待升级的内核和文件系统映像放入SD卡中,当系统重启时,扩展后的Uboot会自动检测并读取SD卡中的映像文件,再烧写到嵌入式设备实现自动升级。
该方法较传统的通过JTAG口、串口或者网口连接到主机,在主机上通过手动输入控制命令完成内核或者文件系统的升级方式更为便捷高效。
stm32f030 bootloader 例程

主题: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的开发和使用对于提高系统的稳定性和可靠性是非常重要的。
嵌入式系统的Bootloader

• 应用程序部分 ➢构建基本的嵌入式Linux文件系统 ➢应用程序开发与移植
嵌入式系统设计
-目标机开发模式
并口/串口
嵌入式系统设计
JTAG
BootLoader和嵌入式Linux嵌入式系统计BootLoader分类
• BootLoader ➢LILO ➢GRUB ➢U-BOOT
嵌入式系统设计
嵌入式系统的BootLoader
嵌入式系统设计
• 嵌入式Linux系统从整体上讲,可以分为五大部分:
– BootLoader(引导加载程序) – Kernel(内核) – File System(文件系统) – Device drivers(驱动程序) – Applications(应用程序)
Stage1:(阶段一主要通过汇编语言实现,依赖cpu体系结构初始化 • 进行硬件的初始化(watchdog,ram初始化)。复制Stage2阶段代码到RAM空间。 • 为Stage2加载代码准备RAM空间。 • 设置好栈。
• 跳转到第二阶段代码的入口点。
Stage2:(阶段2主要通过c语言实现,具有好的可读性和移植性) • 初始化该阶段所用到的硬件设备。 • 检测系统内存映射。 • 将uImage, Rootfs, dtb文件从flash读取到RAM内存中。 • 设置内核启动参数。(如通过寄存器传递设备树文件的内存地址)
包括正确地设置系统的内存控制器的功能寄存器以及各内存控 制寄存器等
➢ 初始化 LED
典型地,通过 GPIO 来驱动 LED,其目的是表明系统的状态是 OK 还是 Error。如果板子上没有 LED,那么也可以通过初始化 UART 向串口打印 BootLoader 的 Logo 字符信息来完成这一点 ➢ 关闭 CPU 内部指令/数据 cache
STM32的BootLoader 从SD卡更新固件

目录一、什么是BootLoader (2)二、BootLoader的作用 (2)三、BootLoader预备知识 (2)3.1 复位序列 (3)3.2 重定位中断向量表 (3)3.3 C语言函数的地址 (3)3.4 hex文件和bin文件 (5)四、分几步实现BootLoader (7)4.1 跑FAT文件系统 (7)4.2 读写Flash程序 (7)4.3 跳转到新程序运行 (8)五、具体流程 (9)5.1 主函数流程 (9)5.2 BootLoader流程 (10)5.3 跳转到新程序流程 (11)六、参考文献 (11)一、什么是BootLoader这个大家可以上网查一下,我在这里说说我自己比较片面的理解。
BootLoader就是单片机启动时候运行的一段小程序,这段程序负责单片机固件更新,也就是单片机选择性的自己给自己下程序。
可以更新也可以不更新,更新的话,BootLoader更新完程序后,跳转到新程序运行;不更新的话,BootLoader直接跳转到原来的程序去运行。
BootLoader下载新程序后并不擦除自己,下次启动依然先运行BootLoader程序,又可以选择性的更新或者不更新程序,所以BootLoader就是用来管理单片机程序的更新。
我的大概理解是这样,大家自己网上搜搜详细介绍吧。
二、BootLoader的作用BootLoader使单片机能自己给自己下载程序,所以在程序升级方面非常有作用。
比如我们的BootLoader是通过GSM更新程序的,我们在升级单片机程序的时候,只要把新程序通过GSM发送给单片机,单片机自己实现程序更新,然后跳转到新程序执行,这样就省去我们很多升级的功夫啦。
可以想象一下如果把单片机安装在非常高的地方,或者危险的工业现场,或者封装得很难拆下来,我们很难直接给单片机下载程序,那么BootLoader的作用就体现出来了。
简单的说,有了BootLoader,我们省心又省力。
在Bootloader中实现嵌入式系统自动升级

2 实 现
本 文 所 讨 论 的 实 现 方
法 , 要 是 扩 充 B ola e 主 o t dr o
P XA2 5 5 。P XA2 5具 有 1 5 6
核 映 像 文件 和 文 件 系统 映 像 文件 通 过 串 口和 网络 下 载并 烧 写 到 Fah中 。若 需 对 内 核 或 文件 系 统 升 级 , 按 照 上 述 l s 则 方 法 重 新烧 写 新 的 映像 文件 , 直接 覆 盖 原 来 的映 像 文件 。
传 统 升级 方 法 的局 限 , 简化 了升 级 方 法 , 高 了升 级 速 度 。 提
中 ,o t a e B ol d r分 区 用 于 烧 写 B o la e , 起 始 地 址 为 o o t dr 其 o 0 0 0 0 0 , 系 统加 电启 动 或 复 位 时 , P 便 跳 转 到 这 x0000当 CU
包 括 B ola e 、 o t d r 内核 和 文 件 系 统 。 B o la e o o t d r是 硬 件 系 o
重 启 时 ,系 统 首 先 运 行
B o la e , o t a e o t d r B o l d r将 检 o o
Hale Waihona Puke 统 加 电所 运 行 的 第 1 软 件 代 码 , 在 嵌 入 式 系统 中 一 般 段 但 没 有 像 P 中 的 BOS 样 的 固 件 , 此 整 个 系 统 的 加 载 C I 那 因
实 验 板 上 的 I tl taa Fa h 容 量 为 3 ne r t ls , S 2 MB, 为 分
基于Bootloader的嵌入式软件通用更新机制

【 关键词 】嵌入 式系统; 更新机制 ; 启动引导程序 【 中图分类号 】T 3 81 P 6. 【 文献标识 码】A
Ge e a Upd e M e han m nrl at c i s of Embe dde d S s e y t m So t r s d Bo to de fwa e Ba e on o la r
0 引 言
在嵌 人式系统 的使用 过程 中 , 或者在 软件开发 过程
中, 系统软件 可能经常被 损坏 。开发人员 需要能方便 地
入式操作 系统 内核 (en1 ̄I 系统 ( l ss m) kre) 文件 fe yt 。其 i e
中文件 系统是嵌 入式 系统 软件 平 台 占用存 储量 最大 的
s fwa e e in ot r d sg ba e o Phii S sd n lps TB81 i g v n. 0 s ie
【 y w rs m ed d ss m; p aemehns ;B olae Ke od 】e b d e yt u dt e ca i m ot dr o
一
部分 , 也是与用 户开发最 相关 的一部 分。它存储 了系
把嵌 入式操作 系统 、 文件 系统和 用户应用 程序下 载到特 定的硬件平 台。 目前 , 常的做法有 : 通
统配 置文件 、 系统 程序 、
用户 应用程 序等 。文件
1 )使用 专用 的仿真 器 。由于不 同的硬件 平 台都需
系统 包括根 文件 系统 映
像 ( 如 rm i .mae 例 a ds i g. k
设计一个独立的 B ood r 序 , ot ae程 l 对系统进行初始化并引 导嵌入式操 作系统 。但 由于不 同硬件平 台 的差异 , 会造
一种嵌入式系统升级的方法

一种嵌入式系统升级的方法专利名称:一种嵌入式系统升级的方法技术领域:本发明涉及嵌入式系统技术领域,特别是指一种嵌入式系统升级的方法。
背景技术:在嵌入式系统中,由系统的运行环境和产品的功能等特点决定了嵌入式系统的非开放式的运行模式。
在这种情况中,对嵌入式系统进行自动升级不但使产品延长寿命,而且保护了使用者的投资,即在不增加新投入的情况下增加了产品的新功能或修补了现有产品存在的缺陷。
所以,对于一个含有嵌入式系统的产品而言,设计良好且功能强大的升级方案能为该产品带来较强的竞争力。
现有嵌入式系统的升级方案通常为将升级文件做成镜像文件,并将嵌入式系统中的非易失性存储器上原有的数据全部擦除后,再将镜像文件写到非易失性存储器上,以达到刷新升级的目的。
上述方案的缺陷在于对于以非易失性存储器为永久存储介质的嵌入式系统而言,升级过程中一旦发生意外断电等异常情况时,系统将变得不可用,此时只能使用特殊的设备对该系统的非易失性存储器进行完整的刷新后,才能使该系统继续使用。
该方案即不安全又使升级失败后重新恢复系统的工作变得费时费力,甚至在某些条件下根本无法实现系统的恢复。
而且,上述升级方案必须对非易失性存储器的全部进行刷新升级,而不能对非易失性存储器中指定的某一个或几个部分的数据进行刷新升级操作,不便于管理。
发明内容有鉴于此,本发明的目的在于提供一种嵌入式系统升级的方法,即使系统在升级过程中意外中断,也能很方便的再次启动该系统。
为达到上述目的,本发明的技术方案是这样实现的一种嵌入式系统升级的方法,该方法包括以下步骤a、为嵌入式系统的非易失性存储器上划分逻辑区域,并指定一个区域用于保存升级操作前的待升级部分的数据;b、当该系统需要升级时,下载所需的升级文件,并将非易失性存储器上原有的待升级部分复制到非易失性存储器的指定区域后,应用所下载的数据文件对该待升级部分进行升级操作;c、该系统下一次启动时,判断上次升级过程是否正常结束,如果是,则正常启动该嵌入式系统,否则将上次升级前复制到非易失性存储器的指定区域数据恢复到原来的位置后,启动该嵌入式系统。
在Bootloader中实现嵌入式系统自动升级

paper @ (投稿专用) 2006年第11期Microcontrollers &Embedded Systems 33 3本课题为华南理工大学教学研究支持项目。
在B o o t l o a d e r 中实现嵌入式系统自动升级3■华南理工大学 邵新颜蔡梅琳 摘 要在嵌入式系统中,对内核或文件系统进行升级,一般是将目标板连接到主机,通过J TA G 口、串口或网口来完成升级过程。
本文讨论一种更为方便的升级方法,即在Bootloader 中通过CF 存储卡升级系统。
嵌入式系统中的Bootloader 通常用于引导操作系统,本文描述了如何通过增强Bootloader 的功能,实现对嵌入式系统的自动升级。
关键词Bootloader嵌入式系统CF 存储卡 自动升级 嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader 、内核和文件系统。
Bootloader 是硬件系统加电所运行的第1段软件代码,但在嵌入式系统中一般没有像PC 中的BIOS 那样的固件,因此整个系统的加载过程全部是由Bootloader 来完成的。
系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的Bootloader 。
Bootloader 的主要任务包括:初始化最基本的硬件;将Bootloader 本身拷贝到RAM 中运行;将内核拷贝到RAM 中并调用内核等。
通常在嵌入式系统中,首先通过J T A G 接口将Boot 2loader 烧写到目标板的Flash 中,然后在Bootloader 中,将内核映像文件和文件系统映像文件通过串口和网络下载并烧写到Flash 中。
若需对内核或文件系统升级,则按照上述方法重新烧写新的映像文件,直接覆盖原来的映像文件。
上述方法中,一方面必须将目标板和主机通过串口线和网线相连接,另一方面通过串口或网络下载映像文件,速度很慢。
本实验通过扩充Bootloader 功能,实现了通过CF 存储卡对内核或文件系统映像文件的自动升级,对需要经常为内核或文件系统升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Bootloader中实现嵌入式系统自动升级
嵌入式系统由硬件和软件两部分组成,软件部分主要包括Bootloader、内核和文件系统。
Bootloader 是硬件系统加电所运行的第l段软件代码,但在嵌入式系统中一般没有像PC中的BIOS那样的固件,因此整个系统的加载过程全部是由Bootloader来完成的。
系统在上电l或复位时通常都从地址Ox00000000处开始执行,而在这个地址处安排的通常就是系统的Bootloader。
Bootloader的主要任务包括:初始化最基本的硬件;将Bootloader本身拷贝到RAM中运行;将内核拷贝到RAM中并调用内核等。
通常在嵌入式系统中,首先通过JTAG接口将Bootloader烧写到目标板的Flash中,然后在Bootloader 中,将内核映像文件和文件系统映像文件通过串口和网络下载并烧写到Flash中。
若需对内核或文件系统升级,则按照上述方法重新烧写新的映像文件,直接覆盖原来的映像文件。
上述方法中,一方面必须将目标板和主机通过串口线和网线相连接,另一方面通过串口或网络下载映像文件,速度很慢。
本实验通过扩充Bootloader功能,实现了通过CF存储卡对内核或文件系统映像文件的自动升级,对需要经常为内核或文件系统升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。
1 基本原理
本实验对传统Bootloader的功能进行了扩充,加入了升级系统的功能。
例如,用户需要对目标板上的内核或文件系统进行升级,只需要将新的映像文件命名为指定的名称并拷贝到CF存储卡中。
然后,CF存储卡插入目标板的CF存储卡插槽,重新启动目标板即可完成升级过程。
重启时,系统首先运行Bootloader,Bootloader将检测CF存储卡中是否有内核或文件系统的映像文件。
若有,则读取映像文件并烧写到目标板的F1ash中,实现升级;若无,则直接启动目标板中的系统,如图1所示。
实验使用的开发板基于Intel XScale处理器PXA255。
PXA255具有16位的CF存储卡控制器,用于连接CF存储卡。
开发板上有32 MB的Flash和64 MB的SDRAM,且Flash的起始地址映射到Ox00000000,SDRAM 的起始地址映射到OxA0000000。
实验板上的InteI Strata Flash,容量为32 MB,分为Bootloader、reserved、kernel和root filesystem 四个区。
其中,Bootloader分区用于烧写Bootloader,其起始地址为Ox00000000,当系统加电启动或复位时,CPU便跳转到这个位置开始执行指令;reserved分区为保留分区,主要用于传递内核启动参数以及其他系统设置;kernel分区和root filesystem分区分别用于烧写内核和文件系统。
各分区的起始地址及大小如图2所示。
2 实现
本文所讨论的实现方法,主要是扩充Bootloader的功能,增加对CF存储卡的支持,使系统启动时,Bootloader能对CF存储卡进行文件读取。
首先,要将CF存储卡格式化成特定的文件系统格式(本实验主要支持FAT32、FATl6和EXT2三种文件系统)。
然后,将待升级的映像文件(内核映像文件、文件系统映像文件或Bootloader本身的映像文件)通过主机拷贝到CF存储卡。
因此,Bootloader可以榆测到需要升级的映像文件并对目标板上的相应部分进行更新。
2.1 Bootloader框架及工作流程
本实验所编写的Bootloader仅实现了最基本的硬件初始化功能、系统引导功能和系统升级功能,静态编译的二进制文件大小为38 KB。
Bootloader用汇编语言和C语言实现,汇编语言仅作了屏蔽所有中断、初始化相关GPIO(General Purpose IO)、初始化SDRAM、拷贝Bootloader和内核到SDRAM等简单工作,便跳转到C程序,在C程序中实现了后续的初始化工作及系统升级。
详细流程如图3所示。
2.2 对CF存储卡的支持及数据读取过程
由于是从CF存储卡上读取新的映像文件并实现系统更新,故在Bootloader中必须首先支持CF卡。
CF 卡本身提供了两个探测引脚(即Card Detect Pins),用于判断CF卡是否存在。
这两个引脚成为CDl和CD2,在CF卡内部被硬件设计为直接与地相连。
当CF卡插入时,CDl和CD2应全为低电平,因此,在Bootloader 中通过检测CDl和CD2的电平高低,可以判断CF卡是否存在。
CF卡主要由3部分组成:控制器、存储器阵列和缓冲区。
其中,内置的智能存储器可以使外围电路设计大大简化,且完全符合内存卡的PCMCIA(PersonalComputer Memory Card Intemational Association)和AIA (AdvanccdTechnology Attachment)接口规范。
因此,对CF卡的访问有基于PCMCIA规范的Memory Map 模式、I/O方式以及基于ATA规范的True IDE方式。
这里所实现的Bootloader中,CF卡工作在Truc IDE 模式下,将CF卡的0E(Output Enable)引脚设置为低电平(反之,若为高电平,则CF卡将工作在PCMCIA
规范的Memory Map模式或I/O模式下)。
对CF卡的True IDE工作模式设置完成后,通过向CF卡的寄存器写入必要的信息实现对CF卡的控制及读写。
CF卡主要包含以下寄存器:
∙数据寄存器(R/W),用于对扇区的读/写操作,主机通过该寄存器向CF卡控制器写入或从CF卡控制寄存器读出扇区缓冲区的数据;
∙错误寄存器(R),控制寄存器在诊断方式或操作方式下的错误原因;
∙扇区数寄存器(R/W)。
记录读、写命令的扇区数目;
∙扇区号寄存器(R/W),记录读、写和校验命令指定的起始扇区号;
∙柱面号寄存器(R/W),记录读、写、校验和寻址命令指定的柱面号;
∙驱动器/寄存器(R/W),记录读、写、校验和寻道命令指定的驱动器号、磁头号和寻址方式;
∙状态寄存器(R),反映CF卡驱动器执行命令后的状态,读浚寄存器要清除中断请求信号;
∙命令寄存器(W),命令寄存器接收主机发送的CF卡工作的控制命令。
从CF卡读取数据的过程如图4所示。
2.3 文件系统支持
要对CF卡进行文件存取,必须将CF卡格式化成某种文件系统。
本实验所编写的Bootloader主要支持3种文件系统:FATl6、FAT32和EXT2。
当需要对嵌入式系统的内核映像(映像文件名为zlmage)或根文件系统映像(映像文件名为tootfs.img)进行升级时,将待更新的映像文件按照指定的文件名拷贝到CF存储卡
中。
系统启动时,Bootloader首先检测CF存储卡的文件系统类型,然后按照相应的文件系统格式查询CF 卡中的所有文件。
若发现待更新的映像文件,则调用CF卡底层操作(详见2.2节),将映像文件读出到SDRAM 中,再从SDRAM烧写到嵌入式开发板的Flash中,实现升级。
有关文件系统的实现细节,详见参考文献。
3 结论
通过CF存储卡对嵌入式系统的自动升级,一方面可以简化升级过程,无需通过串口或网络将目标板与主机相连,将文件下载升级,而只需插入CF卡,启动系统便可以完成升级过程;另一方面,升级速度也大大提高,因为系统对CF卡的存取速度远远高于串口或网络。
但是,要通过CF卡实现系统升级,嵌入式板必须具有CF卡接口,因此,它并不适合所有的嵌入式系统。