您的当前位置:首页正文

嵌入式设备远程在线升级技术

来源:独旅网
第36卷 第12期 36 ・计算机工程 2010年6月 June 201O No.12 Computer Engineering 开发研究与设计技术・ 文章缩号:1000--3428(2010)12- 262---一-03— 丽而 ———— 丽 嵌入式设备远程在线升级技术 赵炯,贾培源,李中山,林旺城 (同济大学机械工程学院,上海201804) 摘要:为了有效降低嵌入式系统的升级和维护成本,根据嵌入式设备存储结构和更新原理,提出一种通过Web界面实现嵌入式设备软 件自动升级的方法,包括在升级更新前将内核映像文件和根文件系统打包的方法、设备收到打包数据文件后分析和写入存储单元的技术以 及用户与嵌入式设备进行远程通信的方式。 关胡:嵌入式设备;在线升级;远程通信;Web服务器 Remote Online Update Technology for Embedded Device ZHAO Jiong,JIA Pei-yuan,LI Zhong-shan,LIN Wang-cheng (School ofMechanical Engineering,Tongji University,Shanghai 201g04) [Abstract]In order to reduce the costs of embedded system update and maintenance effectively,this paper presents a method of using Web interface tO achieve automatic update for embedded system through remote communication according to StOre framework and update principle of embedded device,which includes the technique of packing kernel image nd aroot ilfe system before update,the method of unpacking and writing it into同ash after receiving packet.and he tway of remote communication between client nd embedded adevice. [Key words]embedded device;online update;remote communication;Web server 1概述 当嵌入式设备系统加电启动时,处理器会把FlashROM 中的程序引导到内存中运行。为了对系统软件功能进行升级 或修正其中的错误,可以对FlashROM中的程序进行更新, 即重新刷写。通常是把设备取回,通过引导程序把FlashROM 中原有程序删除,再将新的程序写入其中。对于使用量不多 并且设备比较容易取回的工作环境,这种方法是可行的。但 是在设备使用数量比较多、使用位置分散的环境下,对此类 设备软件升级或维护工作的成本就会大大增加。为了克服这 个问题,对于连接在网络上的嵌入式设备,可以通过网络远 序是一个内核模块,称为redboot.O。RedBoot对Flash进行分 区的基本结构如图1所示。Flash的大小为16 MB,从起始地 址处依次存放RedBoot、zlmage、ramdisk、RedBoot config 和F1S directory。 0x0000000 RedBoot 0x0004000 ztmage 0x0012000 ramdisk 0x0096000 "onallocated 0x00FC000 RcdBoot config 0xO0FE000 FIS directory OxO∞O0o0 0000,256KB ]I。xE000o,s 娜 程更新FlashROM中的程序和数据,由此减小维护成本,提 高工作效率。 )0x840000,8448 KB 空闲 2固件更新原理 为实现固件更新,须明确嵌入式设备的工作原理,其中 最重要的就是内核使用MTD(Memory Technology Device)技 )0x20000,128 KB )呲。 Ka 术访问FlashROM的技术。下面首先介绍嵌入式设备中 FlashROM相关的基本工作原理和MTD技术,然后说明嵌入 式设备中使用的引导程序RedBoot。该引导程序可以直接管 理和控制FlashROM的分区数量和大小。 圈1 Flash分区锖相 2.2基于RedBoo的疆件更新 更新固件最普通的方法是通过RedBoot进行操作。在进 行实际操作之前,要确保已使用串行电缆将设备连接到主机 上,同时网络连线也已经连好。其中,主机作为TI P服务 器。并且在/tlfpbooff目录下已经存放好需要下载到设备Flash 2.1 MTD设备和引导程序 MTD设备驱动程序提供了有关Flash设备的特殊信息, 主要包括设备类型、缓冲区大小、分区大小以及Flash文件 系统擦除区域等”】。MTD的一个重要特性是具有识别多种设 中的内核映像文件和RAM文件系统映像文件。 在RedBoot命令行上直接执行load命令,把主机上的内 核映像文件zlmage加载到设备内存中;然后使用fis命令把 该映像文件内容从内存写入Flash中 J。 作者筒介:赵炯(1963一),男,高级工程师、博士,主研方向:嵌 入式系统开发;贾培源、李中山、林旺城,硕士研究生 收稿日期:2009—12—10 E-mail:lizhongshan357@163.tom 备的能力,目前存在多种不同Flash类型需要文件系统支持。 在嵌入式系统中,整个系统的加载启动任务通常由 BootLoader引导程序完成。本文以RedBoot为例说明引导程 序的工作原理。RedBoot是一个ROM监视器和引导启动程 序。它通过在FlashROM器件的最后一个可删除块中放置一 张表来管理Flash中存储的多个image映像文件。该驱动程 一262一 3 固件创建原理及程序设计 把欲传输和写入目标嵌入式设备Flash中各个MTD分区 的映像文件组合在一个文件中,同时将相关信息写到这个文 件中。这个组合文件被称为固件(firmware)文件。其中包含的 相关信息有原各映像文件名、长度、欲写入的特定分区、要 写入分区的开始偏移位置等信息。为了能够检测出固件文件 在传输或下载过程中可能造成的损坏,从而保证不把错误的 固件写入FlashROM中,需要在创建固件文件时计算CRC校 验信息,并将其同时写入固件文件中 。 3.1固件文件结构 一个固件文件头部结构分2个部分:(1)整个固件的相关 信息,称之为公共信息;(2)每个包含在固件文件中的映像文 件各自的信息。整个固件头部占用256 Byte,共能保存5个 映像文件的相关信息。这可以满足大多数固件结构的要求。 本文编制的固件创建程序名为packimage。packimage程序头 部中公共结构中具体的数据结构信息如下: #define PAKMAGIC 0x41435358 #define MAX— PAKIMAGES 5 struct pak header{ uint32t magic; uint32t len; uint32一t crc32; uint32t icount; struct imgheader img[MAX—PAK—IMAGES]; }; 其中,字段magic为魔数,用于判别文件是否是正确的固件 文件类型,Flash写入程序通过判断这个魔数是否正确可以知 道下载得到的是否是正确的固件类型文件;len字段用于存放 包含本头部结构信息的固件文件的长度;crc32字段用于存放 CRC32校验码,生成校验码所使用的数据是从icont字段开 始到文件末尾的所有数据;最后一个字段定义了一个具有 5个结构项的数组,其中,每个结构项中保存着一个映像文 件的具体信息。数据项数据结构定义如下: #define MAXNAMELEN 1 5 struct imgheader f uint32一t offset; uint32t len; uint32t mtdofs; uint32t mtdno; char mtdname[MAX—NAME—LEN+I】; char filename[MAX—NAME—LEN+1】; )img—header_t; 其中,字段offset指明本映像文件存放在固件文件中的偏移 位置,若该项值为一1,表示本结构项未使用,固件中已没有 其他映像文件;len字段指明本映像文件的长度;mtdno字段 指明本映像文件欲被写入目标机mtd的分区号;mtdofs字段 指明本映像文件内容将被写入目标机指定mtd分区中开始的 偏移位置;filename字段中保存本映像文件的名称,用于Flash 写入程序从固件文件中抽取和恢复各个独立的映像文件。 3.2同件倒蔗程序设计 固件的创建过程是把内核引导程序、内核映像文件和根 文件系统组合成一个文件以便传输到嵌入式设备中,具体的 打包过程如图2所示。为了确保数据的正确性,新固件文件 生成程序中计算CRC32校验码的程序使用了公共域C代码 程序。该程序采用与普通通信协议相同的帧校验序列计算 方法 。 申请一块缓存作为 文件读写缓冲区 二二工二 打开要生成的目标文件 添加pack的魔数 二二 二 为每个映像文件添加 相应的头部信息 获取命令行参数 进行CRC校验并 打开要写入的映像文件 添加到pack结构体中 读取要写入的映像文件 到缓冲区相应位置 把缓冲区内容 写入目标文件中 l 兰竺 竺兰竺 l 关闭目标文件夹 墨 返回 图2固件创建程序漉程 4 Flash写入程序设计 Flash写入程序的主要功能是把已传输到目标机上的固 件文件写入FlashROM中,因此,Flash写入程序应该存在嵌 入式设备中。固件中的数据具体写入哪个MTD分区以及从 分区的什么位置开始写入等信息都将由固件文件自身提供给 写入程序。固件文件所能提供的这些信息均保存在固件头部 分中。 保存在嵌入式设备中的Flash写入程序命名为 flashimage。flashimage会智能地根据/proc/mtd中的信息和设 备目录中相关的设备文件判断出/proc/mtd每个分区实际对应 的设备文件。这为其将固件文件中的数据正确地写入Flash 分区奠定了基础。 lfashimage所进行的基本处理工作是先读取设备上的 /proc/mtd文件,判断并列出每个mtd分区所使用的设备文件 名。然后将固件文件头部结构信息读入内存中,检查其中的 魔数以验证是否是需要的固件文件类型。再根据头部结构中 的CRC值对整个固件文件进行校验,若都正确,则根据头部 结构中每个映像文件的具体信息把映像文件写入指定的mtd 分区中。其中计算CRC的算法与packimage程序中所采用的 代码相同。 lfashimage程序中的写入操作也是通过访问设备目录中 的mtd设备文件进行的。执行写入操作是一个循环解锁、擦 除和写入过程,对应的逻辑代码如下 J: lseek(fd,mtdofs,0)://寻址到分区指定位置处 lseek(imgfd,offset,0);//寻址到指定映像文件 rd=O: wr=er=mtdofs; /1分区内写入开始位置 rn=(mtdlen>sizeof(buf))?sizeoffbuf):mtdlen; while(mtdlen>0)( rd=read(imgfd,buf,rn) wr+=rd: while(wr>er){ mtdEraselnfo.start=er; mtdEraseInfo.1ength=mtdlnfo.erasesize; ioctl(fd,MEMERASE,&mtdEraselnfo);//擦除 er+=mtdInfo.erasesize; 1 res=write(fd,buLrn); /,执行写操作 mtdlen一=rn; rn=(mtdlen>sizeoffbuf))?sizeof(buf):mtdlen } 一263— lfashimage的执行过程如图3所示。 获取命令行参数 对mtd解锁 显示Flash MTD分区信息 并对应到相应设备上 文件名是\否 否与mtd:>一 I是 判断命令行参数的命令 动作井配置相应参数 执 ̄-mtd写操作 是 是否完成? 是写操作? 文件校验失败 返回 是 , 是<//\ 是否重启? 否 执行其他操作 —重新启动】 ( 返回 图3文件传输程序漉程 lfashimage程序既可以由工作人员登入设备时手工执行, 也可以由Web界面管理程序自动调用执行。若手工执行,在 固件文件传输到目标设备后,只需执行以下简单命令即可: 一#flashimage write firmware.bin 5通过web远程传输并刷新固件程序设计 固件的远程传输是通过配置Web服务器实现的 。为了 完成Web服务设计,需要研究Web服务器端CGI的工作原 理。CGI是应用程序与Web服务器交互的一种标准。CGI程 序读取从Web服务器传递来的各种信息,处理后返回给Web 服务器。CGI为服务器定义了一套标准方法用于把客户输入 传送给应用程序,还定义了应用程序如何返回输出结果给 用户。 通过Web服务器传输固件的过程如图4所示。 ‘ c zlm 0 a出a ge1 ̄ ge  『]调用 l m si。k 1 I0  罚 ,pac ki m’ …I 。irrP ., . .浏览器 http请求 http响应 通过以太 7 Httpd服务器 l,… m… l ▲ l ~…‘一 ……‘I J◆ … 朋住 I flashimage write \/ (嵌入式设备) … 存觯 I 图4基于Web服务器昀固件传输漉程 264一 其工作过程如下:在客户端,通过调用packimage程序 把编译好的引导程序、内核映像和根文件系统打包成一个文 件(名为firm—current.bin)。然后在浏览器界面访问嵌入式设 备。在服务器端,软件的守护程序始终在HTTP端El 80守候 客户的连接请求,当客户端向服务器发起一个连接请求后, 客户和服务器之问经过三步握手建立连接。守护程序在收到 客户端HTTP请求消息后,对其进行解析。如果客户端的请 求是CGI应用程序,那么服务器将执行CGI应用程序进程, 接着由此进程接管服务器需完成的相关操作的控制。在本例 中,CGI应用程序会把客户端的firm—current.bin传输到嵌入 式设备的Flash中,暂时保存在var/tmp中,然后CGI应用程 序调用flashimage程序把传输过来的固件文件解开,并按固 件文件的头部信息依次写入MTD设备中,最后重启嵌入式 设备即可运行新的系统。 Web界面示例如图5所示。 图5 Web界面示倒 6结束语 本文研究了一种嵌入式设备的远程固件更新技术,并提 出一种能够在嵌入式设备网络化后对其远程固件更新的方 法,使设备的维护更方便、更有效,同时可以较大程度地降 低成本。今后的工作重点是对固件程序的创建过程进行优化 和提高文件传输效率。 参考文献 f】】Jim Zeus.1inuxMTD源代码分析[z].[2009—02—1l】.WWW.cndzz. corn/down/soft/46808.htm. [2]黄 健,陈荣征,李代平,等.基于ARM嵌入式系统的 BootLoader启动分析与移植【JJ.现代计算机,2007,25(7):85—88. [3]马丰玺,杨斌,卫洪春.非易失存储器NANDHash及其在嵌 入式系统中的应用[J1.计算机技术与发展,2007,17(1):203—206. [4]赵炯.Linux内核完全剖析[M].北京:机械工业出版社,2006. [5]陈莉君,康华.Linux操作系统原理与应用[M].北京:清华大 学出版社,2006. [6]范海燕,宋加磊,管磊.客户端设备远程管理的方案及实现… 信息技术,2007,33(6):1 37—140. 编辑张帆 

因篇幅问题不能全部显示,请点此查看更多更全内容