OTA概述大家好,我是软件升级包。这几天,我将踏上一段神奇的网络之旅,从开发者的电脑到终端嵌入式设备。大家把我的出行流程称为OTA,也就是在线升级。那么什么是OTA?全称是:OvertheAirTechnology。其实就是通过网络从服务器上下载一个新的软件包,更新到设备上。首先有个问题:为什么叫软件升级包而不叫固件升级包?其实固件本质上也是软件,大家都是用代码写的!虽然这两个名词非常相似,但还是有一些朋友在狭义上对它们进行了一些区分。既然如此,我们先将两者进行区分:固件:是指在一些没有文件系统的嵌入式设备中,将Flash划分为不同的功能分区。可执行程序需要放在一个固定的起始位置,才能被bootloader启动。软件:指带有文件系统的嵌入式设备,可执行程序直接放在文件系统中。当设备启动时,操作系统启动文件系统中的可执行程序。没有文件系统的嵌入式设备:有文件系统的设备:我知道上面的区分不是很严格,但是谁能说清楚什么是严格的定义呢?先区分一下,只要不影响文章看懂就够了!嵌入式设备在升级软件时,从宏观上可以分为两个阶段:下载升级包;解压升级包并写入flash或文件系统;第一阶段为主,我会一步步展示我是如何被嵌入式设备从开发者电脑下载到本地的。下面是一个完整的流程,让你先睹为快!上传升级包为了描述方便,我们假设一个场景:设备上运行的软件一共有3个文件:主文件:可执行程序;config.ini:配置文件;mylib.so:动态库文件,里面包含算法,被主文件调用;目前设备上运行的版本是V1.0,现在开发者已经对mylib.so库中的算法进行了优化,升级到了V2.0版本,现在这个新版本需要升级到嵌入式设备上。首先,我们可以想象一下,第一步要做的就是将V2.0版本的程序软件上传到文件服务器。提醒一点:很多云平台都会区分应用服务器和文件服务器。当然,如果只是为了测试,它们可以共存于同一台物理服务器上。例如:亚马逊的AWS平台将升级包上传到S3服务器。现在是时候打包程序的V2.0版本了。这里除了main、config.ini、mylib.so这三个文件外,我们还将另外一个脚本文件upgrade.sh放入包文件中。暂且不说这个文件的作用,稍后为大家揭晓答案。Bingo-V2.0升级包诞生:app_v2_0.tgz,上传到文件服务器后,地址为:http://fileserve/app_v2_0.tgz。上传升级包描述文件V2.0版本的升级包已经上传到文件服务器,现在可以命令嵌入式设备下载升级吗?我们知道,在一个物联网系统中,一般会有很多终端设备。这些设备可能正在运行或关闭,我们不能假设所有设备都会在同一时间点升级。而且,一个设备升级后变成了最新的V2.0版本,那么这个设备应该能够知道服务器上的最新版本是V2.0,这样就不需要升级了。因此需要在文件服务器中新建一个文件来描述V2.0版本升级包,文件名为:升级包描述文件app_desc.json,其内容为json格式的字符串:version字段描述了文件服务器更新升级包的版本,以便设备可以知道服务器中的最新版本。url字段描述了升级包的下载地址。如果设备发现自己的版本低于版本字段中的版本,则可以从该地址下载新的升级包。md5字段描述了服务器最新升级包的指纹信息。设备在服务器上下载升级包后,需要计算升级包的MD5值,然后与这里的md5字段进行比较。如果相同,则说明下载的升级包没有问题,没有被恶意家伙掉线。了解升级包描述文件app_desc.json的作用后,将该文件上传至应用服务器。下载升级包描述文件此时,作为升级包,我已经悄悄的躺在文件服务器中,而我弟弟的升级包描述文件app_desc.json也在应用服务器中准备好了,现在等待嵌入式设备开始升级。万事俱备,只欠东风!应该说触发嵌入式设备升级的动作只有一个!那么,应该是什么时候呢?通过谁?告诉设备:你运行的软件太旧了,现在服务器运行有最新版本,可以升级了!这个问题的答案是:八仙过海,各显神通!例如:亚马逊的AWS平台通过在云平台上部署作业来通知每台需要升级的设备;也可以通过手机APP向嵌入式设备发起指令:嘿,兄弟,请升级你的软件;终端设备接收到升级命令后,首先下载升级包的描述信息。下载后解析json格式的文本内容,提取版本信息,与当前运行的软件版本进行对比。如果服务器中的版本比较新,则继续在url字段中提取升级包下载地址,然后开始从文件服务器下载新的升级包。如果当前运行的版本已经是最新的,那么到此结束!下载升级包的过程很简单。可以直接使用wget等工具下载,也可以使用curl库自己手写下载代码。简而言之,您可以通过一百万种方式将我下载到您的设备。下载完成后,有一件很重要的事情千万不要忘记,那就是:检查下载的升级包是否正确!还记得升级包描述文件中的md5字段吗?那是我的指纹信息。需要先计算下载的升级包的md5值,然后与升级包描述文件中md5字段的值进行比较。如果完全一致,那就放心开始解压升级吧!本文转载自微信公众号“IOT物联网小镇”,可通过以下二维码关注。转载本文请联系物联小镇公众号。
