首页 > 编程知识 正文

嵌入式项目,嵌入式linux和linux区别

时间:2023-05-06 07:57:55 阅读:164016 作者:3067

服务器端程序

服务器端程序用于监测终端设备的状态,管理升级包,控制升级过程,提供web端响应和数据库访问。 该政策的服务端如下:

apache-tomcat,程序采用Java servlet,数据库为MySQL,网页为JSP编写。 可以使用任何背景语言(

php、python等)实现本文所述的服务器端功能。

服务器端的功能如下。

终端消息处理

递增管理

升级命令处理

终端消息处理

服务器端程序从getParameter('version ' )获得终端软件的版本号,然后通过

queryLatestVersion ()查询并比较数据库中最新的软件版本号。 如果相同,则证明该终端装置的软件版本已经是最新的,返回latest

命令; 如果不同的服务器端没有收到来自web端用户的升级指令,则通过

queryAddress () )从数据库中查询最新升级包的地址,并返回给终端,以便终端设备可以从该地址下载升级包。 另外,如果此时用户在web上

当接口执行升级命令时,返回到更新命令,终端设备执行升级操作。 请看清单1。

清单1 .终端消息处理代码片段

递增管理

服务器端程序处理web

对于上载的升级包,请首先检查是否存在用于存储升级包的路径,如果不存在,请创建一个。 接收更新包后,从更新包的文件名中截取版本号,并将文件名、版本号和更新包的服务器端存储路径信息插入数据库。 同样,服务器端程序也会响应

web端用户修改、删除升级包等操作。 有关详细的升级管理,请参见清单2。

清单2 .升级包管理代码片段

升级命令处理

当用户从web端选择设备升级,然后单击升级按钮时,服务器端程序记录下该指令,并在下一次从终端设备接收到POST消息时将其发布到指定的终端

update升级命令,终端收到update命令后运行升级程序。 升级完成后,终端再次定期报告版本号,通过web

终端设备列表显示所有设备的升级结果,并可视化升级过程和结果。

终端升级程序

终端升级程序由升级管理器和升级程序两部分组成。 本文中描述的升级策略的前提条件是构建合适的磁盘,即闪存

创建分区以支持此策略中各种程序的正常运行。

终端磁盘分区示例

图2 .终端设备的磁盘分区图

图2是此策略的基本Flash分区示例。 闪存总容量为128M,第一个分区是存储启动Linux的启动分区

系统引导程序,容量2M; 第二个分区是Linux内核分区,用于存储Linux内核镜像文件和容量

8M; 第三个分区是根文件系统分区,用于存储根文件系统镜像文件,并用作运行时用户的操作空间和容量

100米; 第四个分区用于存储要备份的内容,以便在升级完成后将其复制到新的文件系统、容量

16M; 最后是存储设备软件版本号、设备类型、设备id等信息、容量的固化信息分区

两米。 该分区信息仅供参考,分区数量、大小需要根据具体项目进行修改。 当然,如果项目没有特殊性且硬件资源与示例匹配,则可以直接使用此分区方案。

虚拟机管理程序升级

升级程序的功能如下。

管理软件版本信息

向服务器侧提供POST设备信息

从服务器端下载升级

检查,管理升级包

启动升级执行程序

当系统通电时,升级管理器将启动并作为守护程序运行。 在初次执行时从宏定义中读取软件的版本号,固定为info分区,每隔一定时间从info

在中读取设备类型、设备id和软件版本号。 用HTTP POST发送这些信息

给服务端。 收到服务器端设备信息后,分析软件版本号并将其与数据库中最新的升级包版本号进行比较。 如果升级包的版本号高于设备的版本号,则返回download

以及向终端设备提供升级包地址、升级包MD5代码。

表1 .终端设备信息消息格式

表2 .服务器端回复消息格式

表1、表2分别表示终端机器的发送、服务器回复的信息形式以及内容。

升级程序接收并分析来自服务器端的回复消息,并按照各种指示进行响应,如下所示。

如果命令为download,则根据参数1指定的地址将相应的升级包下载到终端设备的本地tmp目录中。 下载完成后,获取升级包的MD5代码和参数2

的比较,完成升级包的检查。

如果命令为update,则将参数1的版本号与本地tmp目录的升级包版本号进行比较,如果相同,则启动升级程序进行升级。

如果命令是latest,则证明

当前终端设备的软件版本和服务端中的最新升级包版本相同,已经是最新版本,不予理会。

升级执行程序

升级执行程序功能如下:

解压升级包

备份文件

格式化内核、文件系统分区

加载升级包中的文件到内核、文件系统分区

重启操作系统

拷贝备份文件到文件系统中

当升级执行程序被升级管理程序启动之后,首先解压升级包,并对之校验、检测。如果检测通过则开始备份用户文件,需要说明的是 backup

分区挂载在文件系统根目录 backup 文件夹上,因此备份方式是将需要备份的文件拷贝到 backup

文件夹中且记录其原始路径。下一步进行内核、文件系统分区格式化操作,此后将升级包中新版的内核镜像、文件系统镜像写到内核、根文件系统分区中,完成新老替换。然后自动重启操作系统,启动成功之后,将备份文件拷贝到对应的文件系统路径中。此时的终端设备升级完毕,运行新版系统和软件。如果升级内容仅仅为应用程序或者配置文件,则只需进行相应文件的替换即可。

设备和服务端的交互

终端设备通过 HTTP 协议与服务端进行交互。终端程序每隔 10 秒向服务端 HTTP POST 发送一次设备信息,服务端根据版本号对比结果以及

web 端升级指令状态返回三种不同指令给终端设备。终端通过解析指令做出相应响应。其中下载功能调用 libcurl 库,具有断点续传能力。10

秒的请求频率可根据具体项目应用场景做出调整,如果终端数量比较少且服务端能够承受连接压力,想要响应更加快速、及时,可考虑将 HTTP 改为 socket

长连接的通信方式。

web 端

Web 端提供用户进行升级操作的人机接口,显示、接收、跟踪整个升级过程。采用 JSP 编写。其功能如下:

显示设备状态。显示设备在线、离线状态、设备类型、设备 id、软件版本号。

升级包管理。显示所有升级包,对已有的升级包进行修改、删除等操作。上传新的升级包。

升级操作管理。用户可通过设备列表多选、全选设备,点击升级按钮生成升级指令。

总结

本文提供了一种远程在线方式对嵌入式 Linux

设备进行批量升级的策略,升级内容包括内核、驱动、文件系统、应用程序、配置文件等。能够快速、稳定完成升级操作。描述了服务端程序、终端设备升级程序、web

端功能、设备和服务端交互方式,完整地展示了升级流程的细节,供开发者参考。

需要注意的是,该策略的实施过程中,需要确保升级设备具有足够电量以保证升级程序的顺利执行。该策略仅仅提供功能性的描述,为了确保可靠性和适应更加复杂的环境,开发者需要增加双分区启动备份机制。此外,由于升级包存放在

tmp 目录中,因此可支持的升级包大小受限于内存物理空间,开发者可将升级包存放在指定磁盘分区对该功能进行优化。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。