记住下面文档格式以及内容: 六、合宙自有服务器 FOTA 简介 FOTA 有多种方式,可以使用合宙的 iot 平台进行升级,也可以使用用户自建平台升级,可以只升级 core,可以只升级用户脚本,也可以 core+ 脚本一起升级,接下来先介绍合宙自有服务器升级,第三方升级在下一篇文章中介绍 6.1 云平台配置 使用合宙自建服务器的话,需要先登录合宙 IOT 平台,如下图所示,没有账号的,可以先注册一个 客户向合宙采购4G模块时,如果采购人员没有告知合宙这批模块放在iot.openluat.com上的哪个产品下,则合宙会以采购人的手机号为账号,默认密码888888,创建一个“合宙标准模块”的项目,此次采购的所有模块都会放在这个项目下,如果你的账号下没有对应imei,可以联系合宙销售帮忙添加模块进对应项目下(最好还是从哪里买的模块,就让他给你转移到你自己名下) 如果不在自己账号下,也可以通过烧录专属固件的方法,把模块归属到您指定的项目下,可以通过点击帮助中心,查看详细说明。 登录以后点击红框所示位置 然后依次点击如下图所示红框所示的地方,创建一个新项目 在所有项目的最后,找到自己刚刚新建的项目,并且点击红框内的"查看/点击复制"复制后面升级所需要的校验码,复制到自己剪切板中 至此,合宙云平台上的预备动作就做完了 6.2 仅脚本升级简介 如果用户只是新增一些自己的脚本逻辑,没有更新底层,可以选择仅脚本升级 6.2.1 仅脚本升级示例 仅脚本升级 demo 链接 打开 luatools 的项目管理界面,点击生成量产文件,Air8000的纯脚本升级文件放在 luatools 根目录下的"SOC 量产及远程升级文件\Air8000"目录下 因为模块烧录的是 001.000.000 版本,所以我们需要给脚本里的版本号改一下,改为 001.000.001 版本 再将脚本中增加几行打印(为了模拟用户修改脚本的动作) 然后重新生成一次量产固件 打开刚刚的合宙 iot 平台点击我的项目--固件列表--创建固件 点击选择文件,把刚刚的 bin 后缀文件上传到 iot 平台 文件名、固件名、版本号都是自动识别的,用户无需修改 点击确定,等待上传成功的动画提示 模块刚开机,luatools 会打印模块的 imei 号,如下图所示,当然也可以使用手机扫描模块上的二维码获得模块 imei 号,或者将模块屏蔽盖上二维码的下方第一排模块的 imei 号,记录下来 在刚刚创建固件的地方,下拉,找到刚刚创建的升级任务,然后按下图所示,添加模块的 imei 将升级文件上传和添加 imei 工作完成以后,点击 luatools 上的重启模块或者按照代码里的等待 4 小时,触发远程升级逻辑 6.2.2 示例效果展示 升级前:因为没有升级固件,所以请求升级的结果为"已是最新版本",每隔 5S 会打印一句"降功耗找合宙"和当前版本号 升级中:模块请求升级,下载完升级包以后会进行 MD5 验证升级包有无问题,如果没问题,就会启动重启程序,然后进行升级工作 升级后:升级成功后按我们之前的脚本,每隔 1S,打印五次"降功耗,找合宙"以及当前脚本版本号,可以看出,当前版本号已经由原来的 001.000.000 变为了 001.000.001 当然:升级完成以后,因为脚本中有联网就去请求一次升级的代码,所以,会再去请求一次升级,因为没有更高的版本了,所以会上报"已是最新版本" 6.3 含 core 升级简介 每一次 core 的升级都会带来一些网络上的优化(例如信号差时的网络稳定性)以及一些 bug 修复,所以在发布新版本以后,用户可以先测试下 core 对自己脚本有无明显影响或性能提升,然后进行远程 FOTA 6.3.1 含 core 升级测试 demo demo 示例 这里选择升级到 2008 的core 版本进行演示,001.000.001 脚本选择搭配的 core 为 V2007 版本,再次点击"生成量产文件",稍等即可在 luatools 根目录下的"SOC 量产及远程升级文件\Air8000"目录下,找到 core 版本号为 V2007 且脚本版本号为 001.000.001 的 soc 后缀文件 生成了这个版本以后,再去脚本中改动脚本版本号为 001.000.002(只要前后两位有一位大于 1 即可(当然第一位大于 1 的时候,整个版本号自然大于 001.000.001),如 002.000.200,001.000.002,030.000.311 等) 脚本版本号分为 A.B.C 三段; 因为历史原因,中间这一段 B 没有任何意义,但是必须存在; 假设旧的脚本版本号为 A1.B1.C1,新的脚本版本号为 A2.B2.C2; 当新旧脚本版本号满足以下任何一种条件时,版本号允许升级: 1、A2 等于 A1,同时 C2 大于 C1; 2、A2 大于 A1,同时 C2 大于或者等于 C1; 3、B1 B2 无意义 然后在 luatools 里重新选择 core 为 V2008 版本,同样点击生成固件,稍等即可在在 luatools 根目录下的"SOC 量产及远程升级文件\Air8000"目录下,找到 core 版本号为 V2008 且脚本版本号为 001.000.002 的 soc 后缀文件 接下来就是针对这两个量产文件,制作一个差分文件,用来远程升级(注:远程升级中 core 为差分,脚本为全量升级) 点击到 luatools 的主界面,依次点击图中蓝框所示意的地方(注:必须使用 luatools_3.0.9 及其以上版本,要不差分包升级的时候可能会出问题) 按下图所示选择低版本以及高版本的固件,然后点击开始执行即可,如果不想输出的差分包在 luatools 根目录下,可以自行选择一个输出路径 因为包含了 core 中的改动,所以时间会稍长一些,luatools 可能会出现"假死"情况,不要关闭它,稍等一会即可看到 同样,在你选择的目录下(没选择的在 luatools 根目录下)看到如下所示,带着脚本的 PROJECT core 版本号 脚本版本号的 bin 后缀的差分文件。 至于 iot 平台的配置还是和上文一样的步骤 登录 iot 平台 打开刚刚的合宙 iot 平台点击我的项目--固件列表--创建固件 点击选择文件,把刚刚的 bin 后缀文件上传到 iot 平台 文件名、固件名、版本号都是自动识别的,用户无需修改 点击确定,等待上传成功的动画提示 如果上传了其他文件,会提示"升级文件有误" 模块刚开机,luatools 会打印模块的 imei 号,如下图所示,当然也可以使用手机扫描模块上的二维码获得模块 imei 号,或者在模块屏蔽盖 二维码的下方第一排就是模块的 imei 号,记录下来 在刚刚创建固件的地方,下拉,找到刚刚创建的升级任务,然后按下图所示,添加模块的 imei 将升级文件上传和添加 imei 工作完成以后,为了防止模块当前固件不是fotademo_2007.001.001_LuatOS-SoC_Air8000 版本,可以点击 luatools 主界面右边的"下载固件"选择最早的 001.000.001 版本,按住 BOOT 重启模块,然后点击下载,将最早的固件下载进模块里 6.3.2 示例效果展示 升级前:模块打印当前脚本版本号和 core 版本号 升级中下载差分包,校验差分包完成后就会重启模块进入真正的升级逻辑 因为升级包带 core,所以从重启命令执行下去,到最终升级完成,模块重新开机打印了第一条开机日志,中间隔了不到一分钟,如果 core 中代码改动较多,两分钟三分钟都是正常的。