物联网设备OTA软件升级之:完全升级和增量升级
扫描二维码
随时随地手机看文章
main: 主程序;现在,新的版本V2优化了算法,压缩包名称是app_V2.0.tgz,其中包括文件:config.ini: 配置文件(包括一个配置项:version=V1_0);
mylib.so: 实现了某个算法的动态库,被 main 程序调用;
main: 没有变化;升级包app_V2.0.tgz已经被下载到设备本地的文件系统中了,假设解压到目录/root/upgrade中。config.ini: 配置项修改了:version=V2_0;
mylib.so: 优化了算法,主要就是想升级这个动态库;
upgrade.sh: 一个脚本程序,新增的文件;
upgrade.sh 升级脚本
我们首先要明白一个问题:执行升级指令、下载压缩包,都是此刻正在执行的main程序来执行的。
完全升级
所谓的完全升级,就是把旧版本的程序全部丢弃,把升级包中的新程序全部复制过去。
这样的完全升级方式是最无脑、最粗鲁的。
- 停止(kill)当前正在执行的 V1.0 版本的程序;
- 删除 /root/app 目录下的所有旧文件;
- 把升级包中所有的新版本文件 /root/upgrade/* 复制到 /root/app 目录下;
增量升级
所谓的增量升级:就是升级时并不会把所有的文件全部进行替换,而只是替换那些需要更新的文件。
同样的,所有的升级过程仍然是写在upgrade.sh这个升级脚本中:
- 替换 mylib.so 库文件;
- 把配置文件 config.ini 中的版本字段修改为:version=V2_0;
PS:此时升级包中,只需要包含必要的文件就可以了,不需要把其他用不到的文件也放进去了。
- 停止(kill)当前正在执行的 V1.0 版本的程序;
- 把 /root/upgrade/mylib.so 文件复制到 /root/app 目录下;
- 使用 sed 命令来修改 config.ini 文件中的 version 字段;
One more thing
为了表示我不是在胡说八道,这里提供一个很多年前的项目中,升级脚本文件的模板。
------ End ------