在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 存储卡对内核或文件系统映像文件的自动升级,对需要经常为内核或文件系统升级的嵌入式系统来说,克服了传统升级方法的局限,简化了升级方法,提高了升级速度。
基于Uboot的嵌入式系统远程更新设计
基于Uboot的嵌入式系统远程更新设计罗正华;唐帅【摘要】提出了一种基于Uboot的嵌入式系统远程更新设计,主要由三星S5PV210微处理器、DM9000网卡芯片、NAND Flash芯片以及SDRAM随机存储芯片组成,结合MTD分区技术和tftp下载命令,通过对系统内核和Uboot的修改,添加自定义启动命令,从而实现Flash分区设计和远程映像文件自动更新.【期刊名称】《成都大学学报(自然科学版)》【年(卷),期】2018(037)002【总页数】4页(P173-175,190)【关键词】嵌入式系统;Uboot;NAND Flash;tftp;远程更新【作者】罗正华;唐帅【作者单位】成都大学信息科学与工程学院,四川成都610106;成都大学信息科学与工程学院,四川成都610106【正文语种】中文【中图分类】TP368.10 引言随着嵌入式系统在各个领域的广泛应用,嵌入式软件的维护变得日益重要.事实上,当嵌入式系统投入实际环境运行后,一方面,在软件开发过程中无法充分测试的错误会暴露出来,另一方面,用户也会对嵌入式软件提出新的功能要求和性能要求.因此,嵌入式软件的更新与升级逐渐成为嵌入式系统实际应用的一个重要方面[1].目前,对嵌入式系统的更新主要还是通过开机自动运行的引导代码Bootloader实现.Bootloader的主要任务包括:初始化最基本的硬件;将Bootloader本身拷贝到RAM中运行;将内核拷贝到 RAM中并调用内核等[2].由此可见,该更新过程会覆盖原来的镜像文件,一旦更新失败则会导致系统瘫痪.为解决此问题,本研究采用Uboot作为Bootloader,并提出一种可靠的更新机制.1 系统设计1.1 系统硬件平台结构本系统硬件平台结构设计采用三星S5PV210芯片作为微处理器.S5PV210采用ARM Cortex-A8内核,ARM v7指令集,主频可达1 GHZ,内部集成了PowerVR SGX540的高性能图形引擎,支持3D图形流畅运行[3].Flash设计采用4 GB Nand Flash作为外部储存器,内存设计为DRR2 512 MB,以太网适配器采用DM9000CEP芯片,并提供SD卡启动支持、以太网接口和其他外围接口.系统硬件平台功能框图如图1所示.图1 系统硬件平台功能框图1.2 系统软件更新流程本研究设计的Bootloader和系统内核采用Uboot-1.3.4和Linux kernel,通过对Uboot和系统内核kernel的改造实现对ARM程序的更新,并通过挂载文件系统实现对应用程序的更新.系统上电后,首先运行的是Uboot程序,通过对Uboot内部分区表的修改对传统的Flash布局进行重新分区设计,保证了即使更新过程失败也不会损坏原来的系统[4].同时,通过编写的C语言程序,实现上电检测是否更新.当检测到更新的系统内核映像和文件系统映像后,将TFTP下载到SDRAM中(为表述方便,以下将内核映像和文件系统映像统称为映像),再判断映像下载是否成功和校验映像是否正确,读取设置的启动点值,判断将映像烧录到存储区0还是存储区1,烧录完成后校验映像文件,修改启动点值,跳转到SDRAM中加载映像文件,然后启动系统.Uboot工作流程图如图2所示.图2 Uboot工作流程图2 其他相关设计2.1 Flash分区设计2.1.1 Flash分区机制.为避免更新失败而导致初始系统瘫痪及提高系统更新的可靠性,本研究对Flash存储器的布局进行了重新设计,具体方法是:将内核存储区和文件系统存储区(为方便起见,统称为映像文件存储区),即将原来的1个映像文件存储区,设计为2个映像文件存储区,分别为存储区0和存储区1.其中,存储区0为默认存储区,在第1次烧录时,默认烧录到存储区0,并且将启动点值置1,等更新映像文件下载到SDRAM后,读取启动点值,将更新映像文件烧录到Flash中,并将启动点值清0,完成更新.当进行下次更新时,读取启动点值,将其烧录到存储区0,再将启动点值置1,这样如此循环完成每次更新.同时,为保证启动点值掉电不丢失,将其固化到Flash中高地址的参数分区.Flash布局如图3所示.2.1.2 MTD分区技术.本设计通过MTD分区技术对Nand Flash进行分区[5],内核中的MTD分区信息在kernel/arch/arm/plat-s3c24xx/common-smdk.c中,通过结构体static struct mtd-partition smdk-default-nand-part[]实现.要在Uboot中通过MTD 技术修改内核分区表,则需在Uboot中添加mtdparts命令,然后通过Uboot向内核传递参数来改变分区信息,图3 Flash布局示意图set bootargs ′mtdparts=nand-flash:128k(u-boot)ro,64k(u-boot envs),3m(kernel),30m(root.yaffs)′为使这个参数起作用,必须要支持内核中的MTD驱动,即在内核配置时,需要选择,Device Drivers->Memory Technology Device(MTD) support->Command line partition table parsing.由于本设计包含存储区0和存储区1,那么,就会有2个不同的kernel和文件系统分区,通过修改kernel/arch/arm/kernel/head.S文件,设置2个不同的内核和文件系统启动地址,映像文件存储区0启动地址,# override for SMDKV210zreladdr-(CONFIG-MACH-SMDKV210):=0x30008000params-phys-(CONFIG-MACH-SMDKV210):=0x30000100再通过判断启动点值,在不同的启动地址加载内核和文件系统.此过程在启动后的那段检测更新的C程序里实现.2.2 更新程序设计为实现上电后自动检测是否更新,本设计通过运行自定义的Uboot命令myuboot实现,再通过tftp命令下载更新,设置启动点值,判断是否下载成功,并烧写映像文件到相应存储区.在Uboot中,每个命令都使用一个struct cmd-tbl-s结构体定义,该定义在uboot/include/command.h中实现,添加自定义命令:1)添加命令行配置信息,在uboot/include/configs/x210-sd.h中添加#define CONFIG-CMD-MYUBOOT;2)编写命令行对应的源程序,在uboot/common中添加文件cmd-myuboot.c(对应的命令名叫myuboot,对应的函数叫do-myuboot函数);3)在添加编译uboot/common/Makefile中,添加COBJS-y+=cmd-myuboot.o;4)更改环境变量bootcmd=myuboot(开机首先执行此命令),执行set bootcmd myuboot,然后,执行save;5)重新编译烧录.编译步骤为:make distclean;make x210-sd-config;make.2.3 TFTP下载映像及烧写到Flash本设计采用简单文件传输协议TFTP,利用以太网接口快速烧写映像文件到Flash存储区.其中,Uboot程序基于TFTP通信协议,这样,能充分提高对文件的下载速度,以PC机作为TFTP服务器端,嵌入式目标平台作为TFTP客户端[6],通过Uboot中自带的tftp命令,将PC机/tftpserver目录下的映像文件下载到SDRAM,再烧写到Flash中.将网线的一端连接到硬件平台的以太网口,一端连接到PC机的以太网口,其中,PC机为Windows操作系统,通过安装在PC机的TFTP服务器上位机,实现与开发板之间的通信,再通过movi命令将映像文件烧写到Flash中,具体步骤为:设置好PC机的IP地址,如:192.168.1.10;设置好TFTP服务器的指定目录,如:/tftpserver;设置Uboot的ipaddr(保证与主机在同一个网段):set ipaddr 192.168.1.20;设置Uboot的serverip为主机的IP地址:set serverip192.168.1.10;开始tftp下载,执行命令tftp 30008000 zImage和tftp30B00000 rootfs.ext3;开始烧写内核到Flash,执行命令movi write kernel 30008000;开始烧写文件系统到Flash,执行命令movi write rootfs 30B00000 300000;执行save,保存所有环境变量.需注意的是,由于TFTP是基于UDP协议,因此,必须在程序中添加能够保证数据有效传输的机制来及时处理分组丢失的情况,在程序中设置定时机制来达到超时重传的目的,同时,采用CRC32来校验最终内核文件是否完好,以确保传输数据的可靠性.3 测试与结果在测试中,用网线将PC机与硬件平台以太网口相连,用USB转串口线,将硬件平台的串口与PC端的USB口相连,用于检测是否更新成功,同时,接上电源线.系统硬件连接如图4所示.当系统上电启动后,Uboot加载映像文件之前,先执行自定义myuboot命令,判断是否接收更新,更新则通过tftp命令下载到SDRAM中,然后烧写到Flash 相应分区中.PC端软件监视结果如图5所示.图4 系统硬件连接图图5 软件监视图测试结果表明,系统各项功能运行正常.4 结语本研究提出了一种通过向Uboot中添加自定义命令实现远程更新的方案,并基于三星S5PV210微处理器进行开发实现,具体包括:Flash分区思路与实现技术,自定义命令设计理念及添加方法,TFTP烧写映像文件过程.同时,为保证传输的可靠性,对Flash进行了分区设计,并对传输文件进行超时重传、CRC32校验等处理.采用本研究的设计方案,可以实现一种既可靠又快捷的嵌入式系统远程更新升级机制.参考文献:【相关文献】[1]高文玉.利用Nand Flash实现嵌入式系统的远程更新[J].单片机与嵌入式系统应用,2011,11(12):76-77.[2]邵新颜,蔡梅琳.在Bootloader中实现嵌入式系统自动升级[J].单片机与嵌入式系统应用,2006,6(11):33-35.[3]曾海峰.基于以太网的嵌入式系统远程固件更新设计与实现[J].网络安全技术与应用,2015,15(1):59-59.[4]王恒,王,王泉,等.基于Bootloader的可靠嵌入式软件远程更新机制[J].微计算机信息,2007,23(20):57-59.[5]赵炯,贾培源,李中山,等.嵌入式设备远程在线升级技术[J].计算机工程,2010,36(12):262-264.[6]汪小燕,连晓平,董燕,等.基于TFTP协议的嵌入式系统开发方法设计与实现[J].华中科技大学学报(自然科学版),2006,34(12):56-58.。
嵌入式系统启动与加载过程(BootLoader)的原理及实现
上海交通大学硕士学位论文嵌入式系统启动与加载过程(BootLoader)的原理及实现姓名:郑进申请学位级别:硕士专业:计算机技术指导教师:张爱新20090201嵌入式系统启动与加载过程(BootLoader)的原理及实现摘要随着后PC时代的来临,很多原先基于PC才能实现的应用都逐渐向嵌入式设备发展,这得益于集成电路及芯片技术的跨越式发展。
目前嵌入式设备的处理器性能和集成度使低功耗、高性能、小型化成为不可避免的趋势,针对这些技术的发展使嵌入式开发越来越受到重视。
但随之而来也存在诸多需要提升的技术面,如缺乏统一的硬件架构标准使得软件也变得难以统一。
本文通过描述复杂嵌入式系统的加载启动过程并给出完整的软件实现来解决不同系统的不同启动方案,这样能实现基于硬件的改变而使软件尽可能少的修改代码以提高通用性,提高开发效率。
本文首先从介绍嵌入式系统概念和软硬件构成框架、嵌入式系统的启动过程入手,再阐述从芯片内部到外部的整个启动流程,最后针对不同产品或硬件需特殊处理的特点,以当今最流行的手持嵌入式设备中需要USB接口为例,实现基于USB接口的“启动加载”模式和“下载”模式的过程,重点阐述了如何实现这些主要功能和实现时对遇到技术难点的解决办法。
在整个项目过程中,我主要参与嵌入式系统启动过程的软件实现。
针对不同的项目所采取不同的硬件部件,按照本文所提供的实现过程而仅修改必要的XLoader、USB BootLoader硬件相关的配置参数,能简便快捷的完成系统的加载和启动,基于通用型USB BootLoader的正常运行从而使剩下的嵌入式操作系统移植、开发、调试等工作变得快速而高效。
关键词:嵌入式系统;启动过程;Bootloader4AbstractExcept the normal bootup process,The core chipset usually may provide a way to allow the system to communicate with external devices.This is an essential function to facilitate the development process and more for the maintenance work later on.Actually, This so called “second bootup process” is mandatory for versatile processor platform.Most of the key functions during development stage are implemented by this way.There is no mass flash memory burning during the development process.So for a new develop board should have the way to operating the flash memory freely.This time we need this “second bootup process” to finish these functions.And more we also can use it to implement something like initialize USB/Ethernet card ports so as we can transport bulk firmware freely and quickly.If only based on UART transport.There must be over hours for only coulpe of mega bytes transportation.This is really unacceptable for reflashing with high frequency during the development stage.Key words: Embedded System, Boot procedure;Ⅱ上海交通大学学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。
基于ARM的嵌入式Bootloader实现自动升级
基于ARM的嵌入式Bootloader实现自动升级
廖永军;喻国平
【期刊名称】《微计算机信息》
【年(卷),期】2008(024)008
【摘要】本文阐述了ARM7嵌入式系统Bootloader的基本流程.重点分析了在Bootloader中通过CF存储卡或硬盘实现对内核或文件系统进行升级.并通过
EM8624L在ARM+uClinux下实验实现了对嵌入式系统的自动升级,比传统通过串口或网口来完成升级的方法更为方便.
【总页数】3页(P159-160,31)
【作者】廖永军;喻国平
【作者单位】330029,南昌,南昌大学计算中心;330029,南昌,南昌大学计算中心【正文语种】中文
【中图分类】TP39
【相关文献】
1.基于ARM7TDMI的嵌入式系统BootLoader的设计与实现 [J], 汪金宝;陶玉贵;陈付龙
2.基于ARM嵌入式开发的BootLoader设计与实现 [J], 徐磊
3.在Bootloader中实现嵌入式系统自动升级 [J], 邵新颜;蔡梅琳
4.浅析基于ARM嵌入式开发的BootLoader设计及其实现 [J], 刘坤;韩朝智;
5.基于ARM-Linux嵌入式系统Bootloader的自动升级设计 [J], 郑克龙;蒋明;陈小朋
因版权原因,仅展示原文概要,查看原文内容请购买。
嵌入式设备软件更新系统设计与实现
嵌入式设备软件更新系统设计与实现关峰;谢晓明【摘要】随着嵌入式系统在各行各业的广泛使用,嵌入式软件的更新维护也变得日益重要。
传统的嵌入式软件更新工作繁琐,需要专业人员使用专用的仿真器并且要经过打开设备、手工安装跳线等步骤。
本文在IAP、分散加载、MFC等技术的基础上,以lpc1768为平台设计了一套嵌入式软件更新系统。
此系统操作简单,并解决了传输误码、更新过程中掉电等关键技术问题。
%With the embedded systems widely applied in various fields,maintenance of embedded software has become very important.The old update method is actually cumbersome.The steps include taking out the chip and manually installing wire.In this paper,an update mechanism for embedded system based on IAP,scatter loading and MFC is proposed.The method in this paper is more convenient and fast.Accidental interruption and transmission error during updating were settled in this paper.【期刊名称】《电子测试》【年(卷),期】2013(000)020【总页数】2页(P11-12)【关键词】IAP;分散加载;lpc1768【作者】关峰;谢晓明【作者单位】北京化工大学研究生院,北京,100029;北京化工大学研究生院,北京,100029【正文语种】中文【中图分类】TP3110 引言随着计算机技术、电子技术和通信技术的迅猛发展,DSP、单片机等嵌入式系统已广泛应用于通信、工业及家电等领域。
嵌入式系统的BootLoader技术
PPT文档演模板
嵌入式系统的BootLoader技术
• 2)为加载阶段2准备RAM空间
– 必须确保所安排的地址范围的的确确是可读写的RAM 空间
1. 先保存memory page一开始两个字的内容 2. 向这两个字中写入任意的数字 3. 立即将这两个字读回,若不是,则说明不是一段有效
的RAM空间 4. 再向这两个字写入任意数字 5. 立即将这两个字读回。若不是,则说明不是有效的
.text .globl _trampoline _trampoline:
bl main /* if main ever returns we just call it again */ b _trampoline
PPT文档演模板
嵌入式系统的BootLoader技术
2.2 Boot Loader阶段2介绍
– 设置堆栈指针是为了执行C语言代码做好准备
– 通常可以设置为sp = stage2_end – 4
– 此时, Boot Loader 的 阶段2 可执行映象刚 被拷贝到 RAM 空间时的系统内存布局,如下 图:
• 5)跳转到阶段2的C入口点
– 修改PC寄存器为合适地址来实现
PPT文档演模板
嵌入式系统的BootLoader技术
PPT文档演模板
嵌入式系统的BootLoader技术
1. Boot Loader程序的基本概念
• 一个嵌入式 Linux 系统从软件的角度看通常可以 分为四个层次:
– 1. 引导加载程序。
• 包括固化在固件(firmware)中的 boot代码(可选),和 Boot Loader 两大部分。
– 2. Linux 内核。
• 在 linux内核启动前, boot loader 会将存储介 质中的 initrd 文件加载到内存,内核启动时会在 访问真正的根文件系统前先访问该内存中的 initrd 文件系统。
- 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卡接口,因此,它并不适合所有的嵌入式系统。