当前位置:首页 > 公众号精选 > IOT物联网小镇
[导读]各位看官好,上一篇文章我们聊了一下关于OTA升级过程中,新的软件包是如何从开发者的电脑上,安全的下载到嵌入式设备中的。这个流程似乎很简单,不就是下载一个文件而已嘛,怎么还值得写成一篇文章呢?其实这不仅仅是下载文件这么简单,这其中涉及到如何对众多的终端设备进行批量升级的策略问题。如...

各位看官好,上一篇文章我们聊了一下关于 OTA 升级过程中,新的软件包是如何从开发者的电脑上,安全的下载到嵌入式设备中的。


这个流程似乎很简单,不就是下载一个文件而已嘛,怎么还值得写成一篇文章呢?


物联网设备OTA软件升级之:完全升级和增量升级


其实这不仅仅是下载文件这么简单,这其中涉及到如何对众多的终端设备进行批量升级的策略问题。


如果你亲自在AWS的平台上操刀一次,就知道这其中有很多细节问题是需要考虑的。


一失足成千古恨哪!一旦设备升级策略忽略了一个小细节,也许某一天就是我们的深渊!


物联网设备OTA软件升级之:完全升级和增量升级包括产品的生产过程也是如此,那些踩过的坑,真是一把鼻涕一把泪,这个问题后面有时间专门写一篇。


今天,我们继续OTA升级过程中后续的阶段。


还记得我们之前的假设吗?


设备中正在执行的V1版本的程序,包括这3个文件,它们位于文件系统中的/root/app目录下:


main: 主程序;


config.ini: 配置文件(包括一个配置项:version=V1_0);


mylib.so: 实现了某个算法的动态库,被 main 程序调用;


现在,新的版本V2优化了算法,压缩包名称是app_V2.0.tgz,其中包括文件:


main: 没有变化;


config.ini: 配置项修改了:version=V2_0;


mylib.so: 优化了算法,主要就是想升级这个动态库;


upgrade.sh: 一个脚本程序,新增的文件;


升级包app_V2.0.tgz已经被下载到设备本地的文件系统中了,假设解压到目录/root/upgrade中。


现在需要做的事情就是:新版本程序,去替代/root/app目录中的旧版本程序。



upgrade.sh 升级脚本
我们首先要明白一个问题:执行升级指令、下载压缩包,都是此刻正在执行的main程序来执行的。


如果把复制替换的操作也让main程序来执行的话,肯定是会出问题的:它不可能去复制一个新的main文件,来把自己替换掉


物联网设备OTA软件升级之:完全升级和增量升级写过单片机程序的小伙伴肯定都知道:当新的固件下载到flash之后,一般都是重新启动设备,然后由bootloader来执行具体的文件复制操作。


那么对于带有文件系统的设备来说,也可以模仿类似的操作方式。


比如:当设备重新启动后,当执行/etc/rc.local时,此时main应用程序还没有启动。


此时就可以在rc.local这个文件中去做升级操作。


但是这样的方式,相当于是轻微的侵入了操作系统,总感觉这样做不太好。


此刻,upgrade.sh升级脚本开始登场了!


物联网设备OTA软件升级之:完全升级和增量升级这个脚本文件的主要作用就是用来控制升级过程


这里隐藏这一个很重要的思想:upgrade.sh是放在升级包中的,它并没有固化在终端设备中


这样的话,每次执行升级任务时,都可以根据本次的升级需要,来灵活的编写升级脚本。


换句话说:只要能保证升级的通道没有问题,那么升级的过程就完全由这个脚本文件来控制,你想怎么搞,就怎么搞!


物联网设备OTA软件升级之:完全升级和增量升级
完全升级
所谓的完全升级,就是把旧版本的程序全部丢弃,把升级包中的新程序全部复制过去。


此时,升级脚本文件upgrade.sh就完成下面这几个主要工作:


  1. 停止(kill)当前正在执行的 V1.0 版本的程序;


  2. 删除 /root/app 目录下的所有旧文件;


  3. 把升级包中所有的新版本文件 /root/upgrade/* 复制到 /root/app 目录下;


这样的完全升级方式是最无脑、最粗鲁的。


当然,还有一些细节问题是需要考虑的。比如:如果复制文件过程中出现错误怎么办?


还有一点,既然刚才提到了配置文件config.ini,不知您是否会有这样一个疑问:


如果配置信息被用户修改了,那么升级之后,所有的配置信息又被恢复为默认值了,用户的私人配置信息全丢了怎么办?


物联网设备OTA软件升级之:完全升级和增量升级关于这个问题,我们就继续来聊一下增量升级!



增量升级
所谓的增量升级:就是升级时并不会所有的文件全部进行替换,而只是替换那些需要更新的文件。


对于我们假设的升级场景,只需要做2件事情:


  1. 替换 mylib.so 库文件;


  2. 把配置文件 config.ini 中的版本字段修改为:version=V2_0;


同样的,所有的升级过程仍然是写在upgrade.sh这个升级脚本中:


  1. 停止(kill)当前正在执行的 V1.0 版本的程序;


  2. 把 /root/upgrade/mylib.so 文件复制到 /root/app 目录下;


  3. 使用 sed 命令来修改 config.ini 文件中的 version 字段;


PS:此时升级包中,只需要包含必要的文件就可以了,不需要把其他用不到的文件也放进去了。


物联网设备OTA软件升级之:完全升级和增量升级从我描述的文字来看,似乎完全升级和增量升级差别不大。


这是因为这里的示例太简单,如果是一个比较复杂的、有多个模块相互配合的应用程序,增量升级的优势就明显了。


关于OTA升级过程,就先说这么多了,主要是以思想为主,毕竟每一个项目的需求场景是不一样的,从大方向上明白OTA的升级过程就可以了。



One more thing
为了表示我不是在胡说八道,这里提供一个很多年前的项目中,升级脚本文件的模板。


在公众号后台留言:601,即可收到。


物联网设备OTA软件升级之:完全升级和增量升级另外,不知道是否有小伙伴对于ESP32中的升级流程感兴趣,下次再专门写一篇ESP32模组,如何与AWS后台通过MQTT指令进行交互,以及固件的下载升级流程。



------ End ------
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭