自建OTA服务器,终端每次开机比较版本,如有新版本固件则下载更新
一、利用Apache建立http服务器端,在WEB服务器目录下上传新的固件及版本说明json文件

{"ver":2022012502,"file":"rtthread_no_restart.rbl"
}

JSON格式比较简,第一行为版本,最好为数字字符便于终端转换为版本比较,第二行为对应的WEB服务器的新的固件文件。
二、源文件

uint32_t ota_compile_time(char const *time) { char s_month[5];int month,day,year;struct tm t = {0};static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";sscanf(time,"%s %d %d",s_month,&day,&year);month = (strstr(month_names,s_month)-month_names)/3;t.tm_mon = month;t.tm_mday = day;t.tm_year = year;uint32_t ver=0;ver = year*1000000;ver += (month+1)*10000;ver += day*100;ver += 99;return ver;
}static uint32_t        new_ver;
void ota_task(void *parameter)
{
//  while(1){char ver_uri[50]={0};uint32_t ver=0;char fm_file[100]={0};snprintf(ver_uri,50,"%s/ver.json",flash_db_syscfg_ptr()->update_uri);if ( webclient_get_file(ver_uri, "/flash/new_ver.json") ==0 ){int fd;fd = open("/flash/new_ver.json",O_RDONLY);if( fd>=0 ){char buf[100]={0};int size;size = read(fd, buf, sizeof(buf));if( size ){cJSON *item;cJSON* root = cJSON_Parse((char *)buf);if( root ){cJSON *date = cJSON_GetObjectItem(root,"ver"); //获取这个对象成员if( date ){ver =  (uint32_t)date->valueint;}else{LOG_E( "can not get the version\r\n");}if( ver>flash_db_syscfg_ptr()->ver && ver>ota_compile_time(__DATE__) ){cJSON *file = cJSON_GetObjectItem(root,"file"); //获取这个对象成员if( file ){rt_thread_delay(1000);snprintf(fm_file,sizeof(fm_file),"%s/%s",flash_db_syscfg_ptr()->update_uri,file->valuestring);new_ver = ver;http_ota_fw_download(fm_file);}}else{flash_db_syscfg_ptr()->ver = ver;LOG_D( "no new version:%d\r\n",flash_db_syscfg_ptr()->ver );rt_pin_write(UPDATE_OTA_PIN, PIN_HIGH);}cJSON_Delete(root);}else{LOG_E( "version filer format error\r\n");}}close(fd);
//              unlink("/flash/new_ver.json");}}else{LOG_E( "can not get the version file\r\n");}}rt_pin_write(UPDATE_OTA_PIN, PIN_HIGH);ota_running = 0;
}void ota_save_ver(void)
{flash_db_syscfg_ptr()->ver = new_ver;rt_thread_delay(1500);
}
代码说明
webclient_get_file(ver_uri, "/flash/new_ver.json")

下载版本说明文件

cJSON *date = cJSON_GetObjectItem(root,"ver");
ver =  (uint32_t)date->valueint;

解释JSON文件获取版本

if( ver>flash_db_syscfg_ptr()->ver && ver>ota_compile_time(__DATE__) ){

比较版本

http_ota_fw_download(fm_file);

下载指定版本固件
服务器可存放多个版本的固件可实现版本回退、自动更新、更新指定版本固件功能

自建OTA服务器实现设备固件自动更新相关推荐

  1. win10系统停止更新服务器,Win10系统关闭自动更新功能的三种最佳方法

    Win10系统正式版发布在即,受到很多微软粉丝的追捧,并且微软也启动了为期一年的免费升级计划.很多用户使用Win10时发现一个问题,win10系统的自动更新功能是无法关闭的,导致用户都是给强制安装了推 ...

  2. 苹果手机刷机显示无法联系软件更新服务器,为什么苹果手机无法自动更新软件怎么办...

    1.苹果手机不能自动更新软件了怎么办 苹果手机不能自动更新软件的解决办法:苹果手机更新软件需要保存一定的电量和充足的内存 1.清空Safari缓存,需要进入[设置]-[Safari],然后点击&quo ...

  3. Win10设置系统补丁更新服务器,win10如何关闭自动更新补丁_win10关闭自动更新补丁的图文教程...

    现在很多用户都将自己的电脑升级为了win10系统,但win10自动更新补丁的情况很是影响电脑的运行速度还占用空间,所以有的用户就问小编win10如何关闭自动更新补丁?下面本文就为大家整理了win10关 ...

  4. svn服务器web项目,liunx 搭建svn服务器并实现钩子自动更新到web项目

    1:检查系统有没有安装svn #rpm -qa subversion 2: 如果没有安装采取安装svn # yum install subversion 3: 创建版本库 # mkdir /opt/s ...

  5. 计算机书籍旧版好还是新版好,新固件还不如老版本好用?教你如何禁止Kindle自动更新!...

    新固件还不如老版本好用?教你如何禁止Kindle自动更新! 2020-02-21 21:35:41 2点赞 25收藏 1评论 固件更新是对Kindle的一次升级,一般来说,静读君是希望大家积极更新的, ...

  6. iphone删除自动更新的系统

    1.利用 etc/host 文件屏蔽 Apple 更新服务器用电脑 iTools 或者手机 iFile 打开 etc/host 文件,添加:127.0.0.1 mesu.apple.com到文件中. ...

  7. 在 Ubuntu 14.04 LTS 中配置 certbot 自动更新

    目录 前言 一.安装 snapd 二.确保安装的 snapd 版本为最新版本 三.删除 certbot-auto 及系统中已安装的任何 certbot 软件包 四.安装 Certbot 五.建立系统的 ...

  8. 自动播出服务器,自建直播服务器的一点感受

    用LINUX搭建自建服务器,目前是失败告终,一启动就提示圈主没有反馈,然后直接退出.后续继续测试. 用WINDOWS搭建自建服务器,SERVER2008R2和SERVER2019均正常直播,但是延迟很 ...

  9. 建站服务器还是虚拟主机,建站服务器还是虚拟主机

    建站服务器还是虚拟主机 内容精选 换一换 本章主要介绍了如何使用AMH搭建网站.该指导具体操作以搭建DEDECMS系统为例.如果需要用IP访问,将IP地址填在域名栏里即可添加虚拟主机01本示例上传的是 ...

最新文章

  1. 比特币现金基金会和Yeewallet达成合作,助力BCH传播
  2. 级联下拉框效果,动态加载图片
  3. 如何让插件加载到Qt Designer
  4. 工业利用计算机实现生产自动化属于,自动化考试试题(含答案)
  5. 这款神秘的移动端OCR引擎,如何做到“所见即所得”?
  6. 基于 arm 设计开发工具包的 Arm Cortex-M3 处理器的示例系统级设计(第一章:文件目录AHB组件开发平台)
  7. SPOJ 2939 Query on a tree V
  8. mysql union 别名报错_浅析mysqlunion和unionall
  9. Video Extractor监控视频侦查取证分析系统
  10. 人人网主页登录_人人网回归了!原来的账号还能登录,你的“黑历史”都在呢...
  11. 【出国面试】出国 交换 / 访学 / 留学 国外导师面试经验分享
  12. iOS开发工程师求贤贴
  13. SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
  14. python运用在大数据中精准生活_大数据分析技术在生活中的广泛应用
  15. 如何进行小红书推广?小红书平台适合推广什么产品?
  16. 【前端三件套——CSS基础】网页开发必备知识
  17. 厉害了,可以不重启JVM就替换掉已经加载的类?
  18. js破解 零度代理ip
  19. YOLOV1-目标检测综述
  20. Pycharm terminal激活虚拟环境

热门文章

  1. linux ps2键盘不能用,解决usb鼠标与ps2键盘合用时开机键盘失效
  2. Apache BookKeeper
  3. 前端一键自动部署工具
  4. 安装webpack及使用
  5. HashMap底层详解
  6. windows 10 移动热点无互联网连接
  7. linux查询历史登入系统的主机名称或IP地址
  8. 仿热血江湖帮战客方血帮战 开始对战记时器结束事件
  9. java Exception问题:unhandled exception:java.lang.Exception
  10. 设计模式中的工厂类图