历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2018年02月12日 | 用SD卡方式进行嵌入式设备操作系统的自动升级的实现

2018-02-12 来源:eefocus

    本文提出了一种扩展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卡接口,因此,它并不适合所有的嵌入式系统,但是这种实现机制可供借鉴。

推荐阅读

史海拾趣

Geo Semiconductor Inc公司的发展小趣事
通过智能化控制策略,实现生产流程的优化调度和资源配置,提高整体生产效率。
Analog Microwave Design公司的发展小趣事

随着通信技术的不断进步,对微波器件的性能要求也越来越高。Analog Microwave Design公司敏锐地捕捉到了这一市场变化,开始致力于研发更高性能的微波器件。经过多次试验和改进,公司成功开发出了一款具有低损耗、高稳定性的微波放大器,这一创新产品在市场上引起了热烈反响。公司凭借这一技术突破,迅速扩大了市场份额,并树立了行业内的技术领先地位。

Baneasa SA公司的发展小趣事

随着产品的逐渐成熟,Baneasa SA开始积极寻求市场拓展的机会。公司通过与各大电子设备制造商建立合作伙伴关系,成功将其产品应用于手机、电脑、家电等多个领域。这些合作伙伴关系的建立不仅为Baneasa SA带来了稳定的订单量,还进一步提升了公司的品牌知名度和市场份额。

CYAN公司的发展小趣事

随着5G技术的兴起,CYAN敏锐地捕捉到了市场的变化。公司投入大量研发资源,成功开发出一款基于5G技术的高性能网络路由器。这款路由器不仅具有超高的数据传输速度和稳定性,还具备智能管理和安全保护功能,满足了市场对高性能网络设备的需求。

振华(CEC)公司的发展小趣事

随着企业规模的不断扩大和市场竞争的加剧,振华意识到单纯的自我发展已经难以满足企业的长远发展需求。因此,公司开始积极探索并购与资源整合的道路。通过并购具有技术优势和市场潜力的企业,振华不仅获得了更多的技术资源和市场份额,还实现了产业链的延伸和拓展。同时,公司还注重内部资源的整合和优化,提高资源的利用效率和管理水平。

EVER-WAY公司的发展小趣事

EVER-WAY公司成立于XX世纪初,当时电子行业正处于蓬勃发展的阶段。创始人李明看准了市场机遇,决定创立一家专注于电子元器件制造的公司。他带领一支由几名工程师组成的小团队,开始了艰苦的创业之路。初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,李明和他的团队凭借坚定的信念和不懈的努力,逐渐在市场中站稳脚跟。他们不断优化产品性能,提高生产效率,同时积极拓展国内外市场,逐步扩大了公司的知名度和影响力。

问答坊 | AI 解惑

AGPS和DGPS有何区别?

      AGPS就是移动通讯系统的定位功能,该功能首先在CDMA系统中实现。因CDMA系统需要严格的同步时钟, 该时钟源来自GPS,加上基站的位置可知,于是高精度的定位就可以实现了,不过此技术无法实现大范围机动高精度定位,只 ...…

查看全部问答>

工程勾通,友好交流、扩大共识,相互借鉴

有归属、没宗派,有尊重、没辈分,有针对、没争竞,有奉献、没名利 相互尊重、友好交流、扩大共识,倡导不同文化间增进了解、相互借鉴 电子工程师,结构工程师,软件工程师,硬件工程师,FPGA研发。另有数码产品,影音视听产品,手机,微型硬盘播放机,R ...…

查看全部问答>

阿牛哥系列故事大嘴歪评世界杯

阿牛哥冒着七月的艳阳酷暑,晚上听完国际广播电台的新闻,西瓜荔枝,要看世界杯球赛了。晚上的这场要看,凌晨的那场要听。电视电脑收音机都需要,就是不能影响白天的工作。先说说世界杯比赛,不能在家里看,太影响家人.去哥们马六家看;啤酒不喝 ...…

查看全部问答>

H-FLASHER查询不到Flash怎么回事啊。

我用的LPC2378,使用H-JTAG几乎都可以查询到芯片,再用H-FLASHER时大多数只能查到\"Target:ARM7TDMI-S Little-Endian\",而在\"Flash:ERROR\"。在H-FLASHER里选芯片选过LPC 2378和LPC2378_A都不好用。我的并口设置的是SPP模式。…

查看全部问答>

高性能低成本S3C2416微型ARM9嵌入式模块

◆ 全面替代S3C2440,且性价比更优 ◆ 模块背面无任何器件,方便直接贴焊或通过插针与底板相连 ◆ 商业级(0°~70°)、工业级(-40°~85°) ◆ 微尺寸(40x40x4mm)、低价格(千片价…

查看全部问答>

usb mass storage 问题

MARVELL PXA310+WM6.0(littleton的BSP)下添加usb mass storage 功能: 以便设备连接到PC上时,能使SD卡像U盘一样在“我的电脑”里呈现出一个盘符, 不通过ActiveSync而是通过usb直接访问。 现在注册表设置好了(99%没错),usbmsfn.dll也已经 ...…

查看全部问答>

pwm电路控制的直流电机

做了个PWM电路来控制直流电机,用C语言编译后,在keil中运行时有5个警告,不知错在何地方,请内行指点下,本人不胜感激!见原图: …

查看全部问答>

初学嵌入开发,请问看哪些书籍会比较合适

大家好,我是初学嵌入开发,请问看哪些书籍会比较合适。 谢谢。 …

查看全部问答>

紧急求救!!用c开发手机或PDA需要看什么方面的书籍资料!!谢谢各位拉

本人用vc写过应用程序,用c写过mp3的程式,但是c++不太好,在vc里面基本用的都是c,现在想转做手机或pda方面,请教需要看哪些书啊?我看些资料,一般都是在用WinCE或在Linux下开发,哪个发展更好些?不知道这方面薪水待遇怎么样?敢请各位不啬赐教 ...…

查看全部问答>

跪求MSP430的开发实例

小弟初来乍到,是MSP430的初学者,跪求适合初学者做的案例来作参考,请各位大神多多照顾 …

查看全部问答>