用SD卡方式进行嵌入式设备操作系统的自动升级的实现

2018-02-12 21:32:12编辑:什么鱼 关键字:SD卡方式  设备操作系统  自动升级

    本文提出了一种扩展Uboot实现嵌入式设备操作系统维护与升级的方法。该方法将待升级的内核和文件系统映像放入SD卡中,当系统重启时,扩展后的Uboot会自动检测并读取SD卡中的映像文件,再烧写到嵌入式设备实现自动升级。该方法较传统的通过JTAG口、串口或者网口连接到主机,在主机上通过手动输入控制命令完成内核或者文件系统的升级方式更为便捷高效。

    随着现代工业社会逐步向智能化社会的过度,嵌入式在现代经济生活中扮演着至关重要的角色。32位的高性能、低成本、低功耗的嵌入式RISC(Reduced InstructionSet Computer)微处理器——ARM(Advanced RISC Machines)已经成为应用最广泛的嵌入式微处理器。
    目前,基于ARM的嵌入式系统在各个领域都有着广泛的应用,嵌入式系统的维护与升级也变的日益重要。由于新技术的不断涌现和对系统功能、性能等要求的不断提高,开发者必须能够针对系统进行升级和维护,以延长系统的使用周期,改善系统性能,增强系统适应性。
    传统的嵌入式系统升级,首先通过JTAG接口将Bootloader烧写到目标板的Flash中,然后在Bootloader中,将内核映像文件和文件系统映像文件通过串口或者网络下载并烧写到Flash。若需对内核或文件系统升级,则要按照上述方法重新烧写新的映像文件,直接覆盖原来的映像文件。这类方法,一方面必须将嵌入式设备和主机通过串口线或者网线相连接;另一方面需要人工手动输入控制命令,而且通过串口或网络下载映像文件速度非常慢。
    本文针对嵌入式Linux操作系统提出了一种新的升级机制,即通过将映像文件拷贝到SD卡中,由扩展后的Uboot实现系统自动升级,这个方法可以有效克服传统升级方法的局限,简化系统升级步骤,提高升级速度。

1 工作原理
    
一个嵌入式Linux系统从软件的角度看通常可以分为4个层次:Bootloader、Linux内核、文件系统和用户应用程序。这4个层次中,Boot loader一般是按照嵌入式系统的硬件配置定制的,是嵌入式系统加电以后运行的第一段软件代码。要对Bootloader升级只能通过人工手动完成,不过一般嵌入式系统在硬件平台没有变化的情况下是不需要对Bootloader进行升级的。用户应用程序只是运行在Linux操作系统上的一个程序,其升级方法简单,一般可以通过网络直接进行升级。Linux内核和文件系统的升级不像Bootloader那样基本不需要升级,也不像应用程序那样很容易完成升级。目前,对于Linux内核和文件系统的升级一般都是在Bootloader中实现的。
    通过对Uboot的功能进行扩充,加入了系统升级的功能。例如,用户需要对嵌入式设备上的Linux内核或文件系统进行升级,只需要将新的Linux内核或文件系统映像,命名为指定的名称拷贝到SD卡中。如果此时系统处于非运行状态,只需要重新启动嵌入式设备即可进行升级
过程;如果系统处于运行状态,Linux系统会自动检测SD卡是否存在相应的升级文件,存在则自动reboot,这样也完成了系统的升级。
    不论系统是否处于运行状态,真正的系统升级过程都是在Uboot中完成的。设备重启时,首先运行Uboot,在这过程中Uboot完成系统初始化之后,在引导内核之前先检查SD卡中是否有Linux内核或文件系统映像文件。若有,则读取映像文件到SDRAM当中,然后通过Uboot中的Flas h命令将内核或者文件系统映像烧写到相应的分区当中来完成升级;若无,则直接启动系统,具体流程如图1所示。


  2 关键技术

  2.1 Uboot工作原理

  Uboot是一个由德国DENX发起的,遵循GPL条款的开源项目,支持ARM、X86、MIPS、PowerPC等处理器,可启动Linux、VxWorks、TREMS等嵌入式操作系统,其提供了丰富的配置、管理以及运行命令。

  Uboot与大多数Bootloader一样都包含两种操作模式:

 

  ①启动加载(Bootloading)模式:即Uboot从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程都是自动完成的。

  ②下载(Downloading)模式:在这种模式下,目标机的Uboot将通过串口或网络等通信方式将内核或文件系统印象下载到RAM当中,然后再写入相应的存储设备中。这种工作模式通常在系统初次安装和更新时使用。

  Uboot的实现依赖于CPU的体系结构,它分为stage1和stage2两大部分。stage1存放用汇编语言实现的依赖于CPU体系结构的代码,比如设备初始化代码等;stage2则通常用具有更好的可读性和可移植性的C语言来实现。

  Uboot Stage1的主要功能有:

  ①硬件设备初始化;

  ②为Uboot重定位至RAM中,准备RAM空间;

  ③重定位Uboot代码到RAM中;

  ④设置堆栈,将BSS段清零;

  ⑤跳转到第二阶段的C程序入口点。

  Uboot Stage2的主要功能有:

  ①初始化硬件设备;

  ②将内核和文件系统映像从Flash读到RAM中;

  ③设定内核启动参数和调用内核。

  通过上面这两个阶段,Uboot就完成了引导内核启动的任务。

  2.2 Uboot扩展升级功能

  Uboot本身并不带有系统升级功能,本文在Uboot现有的功能上做扩展,使其完成系统升级的功能,将新的内核或者文件系统映像烧写到Flash的相应分区中。本文的实验对象是Samsung公司的S3C2440微处理器,该设备上有64 MB的SDARM和256 MB的NAND Flash,NAND Flash的起始地址映射到0x00000000,SDRAM的起始地址映射到0x30000000。设备上的Uboot将256 MBNAND Flash分为Bootloader、Bootloader参数、ker nel和rootfs四个区。其中,Bootloader分区是用于存放Uboot映像,它的起始地址为NAND Flash的起始地址0x00000000;Bootloader参数区是用于存放Uboot的参数;kernel区用于存放Linux内核;rootfs区用于存放文件系统,在我们的设备上使用的文件系统是Yaffs2。这4个分区的起始地址和大小如表1所列。

  升级功能的扩展主要在Uboot的第二阶段完成,在Uboot完成外围硬件设备初始化之后,检测是否有SD卡插入,如果有,再检测SD卡中是否有相应的内核或者文件系统映像。如果有相应的映像文件,就进行升级工作,升级完成后再启动新的系统。系统升级核心工作可以分为两步,第一步是将相应的映像文件读取到SDRAM当中;第二步则将SDRAM中的映像写入到相应Flash分区当中,详细流程如图2所示。

 

  2.3 具体实现

  通过上面的分析可以看出,扩展一个支持SD自动升级功能的Uboot需要完成如下步骤。

  (1)判断是否存在SD卡

  判断SD卡是否存在,通过使用Uboot当中提供的find_mmc_devICe函数,这里只要判断该函数的返回值即可知道SD卡是否存在,实现代码如下:

    (2)判断SD卡中是否有内核映像文件
    如果存在,则将其烧写到Flash相应的分区当中。实现这个功能需要使用到Uboot中的run_command函数,由于kernel的映像文件一般不会超过5 MB,所以在烧写kernel的时候不需要检查映像文件的大小。检查内核映像文件是否存在也是通过执行命令的方式,如果存在,那么Env环境变量fileexist的值就是YES,并且此时的内核映像已经存在于SDRAM当中,可以直接通过命令烧写到Flash相应的分区当中。具体的代码如下:
    
    (3)判断SD卡中是否有文件系统映像文件
    如果存在,则写入到相应的Flash分区当中。本实验设备上使用的文件系统是Yaffs2,通过Uboot命令烧写Yaffs2文件系统的时候,必须要知道它的实际大小。由于升级很可能导致文件系统大小的变化,所以这里必须将读取到SDRAM当中的文件大小记录下来,这个工作在Uboot中已经完成,我们只需要通过getenv(filesize)就可以获得载入SDRAM当中的文件大小,其他的步骤和烧写内核映像是一样的。具体代码如下:
    
    经过上面3个步骤修改的Uboot程序可支持SD卡自动升级的功能,需要注意这段代码应该放在Uboot自动加载系统之前,推荐将这些代码放在main_loop函数中。

      结语

    本文通过定制扩展Uboot实现了用SD卡方式进行嵌入式设备操作系统的自动升级,这种方式不但克服了传统升级方式的局限性,而且具有一定商业价值。目前,该方法经过调试,系统运行正常。显然,要通过SD卡实现系统升级,需要嵌入式设备具有SD卡接口,因此,它并不适合所有的嵌入式系统,但是这种实现机制可供借鉴。

关键字:SD卡方式  设备操作系统  自动升级

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018021237770.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于LPC2210和μC/OS—II的触摸屏触摸点数据采集系统
下一篇:基于arm920T嵌入式Linux的实验平台环境的构建

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

30. SD卡硬件连接和例程测试(SPI方式)

一。 硬件连接SD_CS接STM32的PD2SD_MOSI接STM32的SPI2_MOSISD_MISO接STM32的SPI2_MISOSD_SCK接STM32的SPI2_SCKSD卡座都连了一个47K的上拉电阻二。程序1. 初始化函数  SD_Initialize(void)//SPI硬件层初始化void SD_SPI_Init(void){  GPIO_InitTypeDef  GPIO_InitStructure;   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD
发表于 2017-11-10 09:05:15
30. SD卡硬件连接和例程测试(SPI方式)

29. SD卡简介(SDIO方式)

一。 SD卡的常用寄存器SDIO可以带多个SD卡,通过RCA(相对卡地址寄存器)可以确定要访问哪个卡。二。 SD卡初始化流程通过初始化后就可以区分出四种卡。VHS的四位一般设置为0001b。所以CMD8指令一般参数为0x1AA。对于2.0的卡,CCS=1为SDHC的卡,CCS=0为SDSC的卡,对于1.0的卡忽略该位。三。 SD卡单块数据块读取流程四。SD卡多块数据块的读取流程五。 SD卡单块写数据块流程六。 SD卡多块数据块写入流程这里重点看“card status”位,SD卡的状态。
发表于 2017-11-10 09:04:35
29. SD卡简介(SDIO方式)

28.SD卡简介(SPI方式)——mini版专用

一。 SD卡简介1. 什么是SD卡2. SD卡的特点3. SD卡的寄存器CSD寄存器包括卡的容量,数据块的大小,非常重要的寄存器。二。SPI 模式如何访问SD卡1. SPI模式下,SD卡的命令格式2. SD卡命令介绍CMD0用来复位SD卡。CMD8用来区分2.0卡还是1.0卡。CMD9读取卡的特定的数据寄存器SCR。CMD10读取卡的标志寄存器CID。CMD16设置块大小,对于SDHC无效,SDHC固定是512字节。CMD17读取一个块的数据。CMD18读取多个块的数据。CMD24是写入一个块的数据。CMD25是写入多个块的数据。每个指令都有一个响应。SD卡和单片机的通信过程R2到R7响应,请参照《SD卡2.0协议.pdf
发表于 2017-11-10 09:03:46
28.SD卡简介(SPI方式)——mini版专用

SD卡的管脚排列和总线读写方式

;                注:S:电源供给  I:输入 O:采用推拉驱动的输出                        PP:采用推拉驱动的输入输出 SD卡支持两种总线方式: SD方式与SPI方式。SD模式是SD卡标准的读写方式,但是在选用SD模式时
发表于 2015-10-22 09:28:59
SD卡的管脚排列和总线读写方式

SD卡的管脚排列和总线读写方式

;           PP:采用推拉驱动的输入输出 SD卡支持两种总线方式: SD方式与SPI方式。SD模式是SD卡标准的读写方式,但是在选用SD模式时,往往需要选择带有SD卡控制器接口的MCU,或者必须加入额外的SD卡控制单元以支持SD卡的读写。然而,很多51单片机没有集成SD卡控制器接口,若选用SD模式通讯就无形中增加了产品的硬件成本。在SD卡数据读写时间要求不是很严格的情况下,选用SPI模式可以说是一种最佳的解决方案。我用软件模拟出SPI总线时序读写SD卡。 其中SD方式采用6线制,使用CLK、CMD、DAT0
发表于 2015-09-10 13:28:57
SD卡的管脚排列和总线读写方式

Enea(R) OSE被亚洲设备商选做LTE基站实时操作系统

瑞典斯德哥尔摩2016年10月12日电 /美通社/ -- Enea®(NASDAQ OMX Nordic:ENEA)已经扩充与亚洲一家全球信息与通讯设备公司的许可协议。此协议价值 77.6万美元(660万瑞典克朗),涉及预计在客户的 LTE 宏基站中使用的 Enea® OSE 64位操作系统。   作为宏基站操作系统的全球领先供应商,Enea 继续向客户提供专用和开源软件解决方案的各种组合,满足与日剧增的安全与可用性要求。Enea® OSE 是一款稳定、高性能的实时操作系统 (RTOS),其专门针对多核、多处理器系统优化,使客户能够使用64位多核处理器的所有功能。   Enea
发表于 2016-10-12 13:32:29

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved