MCU、Linux实现OTA固件升级要点

关注+星标公众,不错过精彩内容

aafd3c6c71a77c3c36e528bdf0bad9f0.gif

来源 | CSDN

作者 | bulebin

OTA的应用比较广泛,今天给大家分享一些嵌入式实现OTA升级的常见技术。

一、简介

1.1  概念

OTA:Over-the-Air Technology,即空中下载技术。

OTA升级:通过OTA方式实现固件或软件的升级。

只要是通过无线通信方式实现升级的,都可以叫OTA升级,比如网络/蓝牙。

通过有线方式进行升级,叫本地升级,比如通过UART,USB或者SPI通信接口来升级设备固件。

07df4f7c1c0cc446923b3e118a57391d.png

1.2  优点

1.通过OTA方式,可以对分布在各地的设备进行软件升级,而不必让运维人员各地奔波。

2.物联网平台支持通过OTA方式进行设备固件升级,是智能设备修复系统漏洞、实现系统升级的手段。

3.在迅速变化和发展的物联网市场,新的产品需求不断涌现,因此对于智能硬件设备的更新需求就

变得空前高涨,设备不再像传统设备一样一经出售就不再变更。通过固件升级用户提供更好的服务。

1.3  实现原理

核心流程:

1.制作升级包

2.下载升级包

3.验签升级包

4.更新程序

2684fe9f5669fd54983dd5caee16694c.png

下载方式:

不管采用OTA方式还是有线通信方式升级,下载升级包的方式包括后台式下载和非后台式下载两种模式。

后台式下载:

在升级的时候,新固件在后台悄悄下载,即新固件下载属于应用程序功能的一部分,在新固件下载过程中,应用可以正常使用,也就是说整个下载过程对用户来说是无感的,下载完成后,系统再跳到BootLoader程序,由BootLoader完成新固件覆盖老固件的操作。

比如智能手机升级Android或者iOS系统都是采用后台式方式,新系统下载过程中,手机可以正常使用。0accbc1381c6eb0bca58a6222cf9b4ef.png

非后台式下载:

在升级的时候,系统需要先从应用程序跳入到BootLoader程序,由BootLoader进行新固件下载工作,下载完成后BootLoader继续完成新固件覆盖老固件的操作,至此升级结束。

早先的功能机就是采用非后台来升级操作系统的,即用户需要先长按某些按键进入bootloader模式,然后再进行升级,整个升级过程中手机正常功能都无法使用。8cfa4d19eb83a174b5af11f530f6c25d.png

新旧固件覆盖模式:

新固件替换老固件覆盖的两种方式:双区模式和单区模式。

双区模式:

双区模式中老固件和新固件在flash中各占一块bank(存储区)。假设老固件放在bank0(运行区)中,新固件放在bank1(下载区)中,升级的时候,应用程序先把新固件下载到bank1中,只有当新固件下载完成并校验成功后,系统才会跳入BootLoader程序,然后擦除老固件所在的bank0区,并把bank1的新固件拷贝到bank0中。

后台式下载必须采用双区模式进行升级。

优点:

升级过程中出现问题或者新固件有问题,它还可以选择之前的老固件老系统继续执行而不受其影响。

缺点:

多占用flash空间的一个存储区,在系统资源比较紧张的时候较为困难。345d2949bed55e955984b85d4df7155f.png

单区模式:

单区模式的非后台式下载只有一个bank0(运行区),老固件和新固件共享这一个bank0。升级的时候,进入bootloader程序后先擦除老固件,然后直接把新固件下载到同一个bank中,下载完成后校验新固件的有效性,新固件有效升级完成,否则要求重来。

优点:

跟双区模式相比,单区模式节省了Flash空间的一个bank,在系统资源比较紧张的时候,单区模式是一个不错的选择。

缺点:

如果升级过程中出现问题或者新固件有问题,单区模式碰到这种情况就只能一直待在bootloader中,然后等待再次升级尝试,此时设备的正常功能已无法使用,从用户使用这个角度来说,可以说此时设备已经“变砖”了。

相比较,双区模式虽然牺牲了很多存储空间,但是换来了更好的升级体验。7aabd66fa1f955c81dc7384946eca2d0.png

二、MCU OTA升级

以MCU(微控制器)固件升级为例,讲解嵌入式裸机程序的OTA升级。由于裸机固件是固化在设备的存储器(如flash)中,即存储器中保存的是机器码,对MCU进行OTA固件升级,也就是要实现通过OTA方式将存储器中旧固件的机器码替换为新固件的机器码。

7362ac5c7e930a4a782fa4ffbfe12709.png

数字签名

签名:

A给B发送消息,A先计算出消息的消息摘要,然后使用自己的私钥加密消息摘要,被加密的消息摘要就是签名。

验签:

B收到消息后,也会使用和A相同的方法计算消息摘要,然后用A的公钥解密签名,并与自己计算出来的消息

摘要进行比较,如果相同则说明消息是A发送给B的,同时,A也无法否认自己发送消息给B的事实。

(B使用A的公钥解密签名文件的过程,叫做"验签")

2a5c5bd118c8ab6b59946775b975ae40.png

密码学基础概念:

1.什么是消息摘要?

2.什么是非对称加解密?私钥与公钥?

3.什么是数字签名?

数字签名的作用:

保证数据完整性,机密性和发送方角色的不可抵赖性。

消息摘要函数:

MD4、MD5、SHA-1、SHA-256、SHA-384、SHA-512

数字签名算法:

RSA、Rabin方式、ElGamal方式、DSA

2.1  制作升级包

通过签名工具使用签名算法对固件进行数字签名,签名后的文件即为升级包。

升级包的内容一般包括firmware、header和signature value。

  • Firmware:固件

  • Header:头部信息。存放配置信息,如版本号、产品类型等。

  • Signature value:签名值。对firmware和header签名后的值。

c6e256972b216e0d5afea3f367ddeb80.png

签名工具:

上位机软件,能计算固件的签名值,并将固件打包为升级包的格式。

固件签名:

上位机软件先计算整个固件的消息摘要,使用非对称密码的私钥对摘要进行加密,

被加密后的消息摘要数据就是签名值。

固件签名的意义:

计算hash值可以识别固件是否被篡改和伪装,确保固件的完整性。

使用非对称秘钥签名方便后续验证升级包身份的合法性。

2.2  下载升级包

根据上位机软件和MCU设备约定的通信协议,上位机软件将升级包通过OTA方式发送给MCU设备,

MCU设备收到数据后,根据通信协议解析出升级包的数据,并将升级包的数据保存到存储器中。

通信协议的作用:

通讯双方约定俗成地用于数据交流的格式。

下载的方式:

1.在应用程序中下载:后台式

2.在BootLoader中下载:非后台式

2.3  验签升级包

MCU设备接收完所有的升级包后,先计算升级包中固件的摘要,然后使用非对称秘钥的

公钥解密升级包的签名值,如果解密出来的固件摘要与自己计算的摘要相同,则验签成功。

2.4  更新固件

验签成功保证了固件的完整性和合法性后,MCU设备从应用程序进入BootLoader程序,

在BootLoader程序中将flash中的新固件数据搬运到旧固件的存储区,将其覆盖。

然后BootLoader程序启动固件运行,此时固件为新固件。

flash固件数据更新:

擦除flash,写flash。

三、Linux OTA升级

Linux系统的组成:

主要由三大部分组成,包括uboot(引导启动程序)、kernel(内核)和rootfs(根文件系统)。

三者在flash中的分区如下:

应用程序存放于rootfs。

a87c03dfa3351697d778f6bbed7fa2be.png

Linux系统的启动流程:

904dd7829ffd0a1d664296c10c505ef2.png

3.1  系统升级

Linux系统由uboot\kernel\rootfs三大部分组成,对Linux系统进行升级,也就是对flash中这三个分区的数据进行更新替换。

由于uboot\kernel\rootfs在flash分区中是以二进制数据存储的,与MCU固件在flash中存的是二进制数据一样,包括uboot\kernel\rootfs的升级文件也是以二进制数方式直接写入到对应的Flash分区。其升级方式与MCU固件的升级原理基本是一致的。

一般可在uboot中下载升级包来升级uboot\kernel\rootfs ,与MCU在BootLoader程序中完成升级类似。12131bbabdfde7f38b0ee94a02b63985.png

3.2  应用程序升级

在Linux系统中,应用程序是存放在文件系统中,并以可执行程序文件的方式存在,其在系统中就是文件,这与MCU固件存放在flash分区的方式不同。

应用程序的升级流程与MCU固件、Linux系统升级基本一致。应用程序的升级除了可以升级可执行文件外,还可以升级配置文件等。

应用程序升级流程:

制作升级包(打包签名工具)、下载升级包(下载工具)、升级包验签、程序更新

与MCU OTA升级区别:

制作升级包:将应用程序相关的文件(可执行程序、库文件、配置文件等)打包为压缩包

作为一个整体再进行签名。

0b2d0ac892fa46dd7ca791794dba033b.png

升级包下载和验签通过后,将压缩包解压,可以得到应用程序的相关文件。

应用程序的更新,可以通过启动应用程序的程序来更新,如启动脚本、启动程序,类似MCU升级的BootLoader程序作用。

更新方式:

1.直接覆盖旧程序;

2.保留旧程序,执行新程序;

直接覆盖旧程序:d5366d04bc980af38288f4a96b3484e8.png

保留旧程序,执行新程序:

如ping\pong操作

923464a21a48d452a58b89b2f1791d24.png

四、总结

OTA升级的核心:

9a60738f0280c50cbe960864f218ae32.png

来源:

https://blog.csdn.net/bulebin/article/details/108428643

------------ END ------------

3d64ba0bca4f57e30867b0dc184b8658.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

9ac711a21c423e0add89da42ac468aca.jpeg

43c9fd8ca956e21955f3608b8f15b2d9.png

点击“阅读原文”查看更多分享。

strongerHuang
关注 关注
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OTA制作及升级过程笔记
teliduxing1029的专栏
05-30 2万+
1、概述 1.1   文档概要 前段时间学习了AndroidRecovery模式及OTA升级过程,为加深理解和防止以后遗忘,所以写这篇文档进行一个总结和梳理,以便日后查阅回顾。文档主要包括两部分,第一部分为OTA升级包的制作过程分析,第二部分为Recovery模式下OTA升级包安装过程的分析,其中包括Recovery模式分析及服务流程。 1.2   参考文献 《Recovery 开发指导》
RK3568平台 OTA升级原理_rk3568 网络升级
最新发布
2301_76323084的博客
04-05 658
你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!!
C语言实现ota升级代码
05-28
C语言,嵌入式系统ota升级源码,可以适应于linux及其他轻量级os使用。
MCU软件重启升级实现——OTA方案
weixin_52959840的博客
02-28 1657
在消费电子产品领域,开机方案通常是由用户手动按键上电,而后芯片初始化,将自身供电极拉高,完成启动。那么由此带来的一个问题就是:当硬件复位或系统复位时,同时也会复位供电极,因此芯片也会断电,无法实现再上电重启。 基于该一情况,本文提出了两种解决方案,分别为内核复位和主动跳转至bootloader复位,这两种方案不会影响外围电路,即供电极不会被复位,使得系统可以完成自动升级重启
剖析MCU的IAP升级软件设计思路
strongerHuang
06-14 1128
关注、星标公众号,不错过精彩内容转自公号:最后一个bug二次整理:strongerHuang做软件开发的人,都知道程序升级升级的方式有很多,今天就来讲讲升级的软件的设计思路。一、ISP...
linux应用程序固件升级,试试用 Linux 中的 fwupd 更新 ThinkPad 固件
weixin_29017445的博客
05-01 2659
之前曾经介绍过 KDE 的新软件中心应用 Discover 整合了 fwupd 这个 Linux 中的固件更新功能。但是那时候用起来还是不太顺手。今天再次通过命令行尝试使用 fwupd 来更新 ThinkPad T470s 的固件,已经没有任何问题了,感觉非常方便,而且还可以选择以后再重新启动系统。通过命令行的使用方法很简单。查询更新,sudo fwupdmgr get-updates如果有更新的...
ESP32-S2 Linux串口OTA升级
李法师的博客
09-29 2620
OTA(Over-the-Air Technology )空中下载技术,通过远程网络为设备更新或者升级,本质就是把固件通过WiFi、蓝牙、4G、5G、网线等写到MCU flash里面,最终实现升级
linux之UART
一只拖鞋
04-08 1102
概述linux下设备分几种:    1.协议类:UART,I2C,SPI,NAND,LCD    2.类似内存的接口:NOR,SDRAM,网卡    针对协议类设备,那么需要满足2个要求:    1.双方约定信号的协议    2.双方满足时序的要求一.UART原理简介        通用异步收发器简称UART,即Universal Asynchronous Receiver/Transmitter...
OTA固件升级apk+操作手册
09-06
OTA英文全称是Over-the-Air technology,即空间下载技术的意思。 手机OTA升级是指Android系统提供的...手机OTA升级是手机官网的行为,要实现手机OTA升级有两个前提:a、手机没有被ROOT权限。b、手机电量至少在60%以上。
OTA固件升级说明1
08-03
1. OTA 升级准备 2. APP 点击升级 3. OTA 升级接口 4. 注意事项
Linux下的MCU开发之51 -51系列的开发环境搭建_附件
05-24
附件包内容: 程序源码,超级简易Makefile模板,usbasp可烧录51的固件程序,相关文档。
ota添加升级校验文件实现.rar
04-24
ota添加升级校验文件实现相关修改源文件
STM32 W5500(http) 使用IAP 实现OTA空中升级
11-26
硬件是STM32+W5500 ,使用http通信协议时间iap OTA 空中升级,文档讲的比较详细,也是我见过的比较好以及比较详细的IAP讲解了。我这边顺便说说为什么要用http 通信协议,因为http通讯协议协议头里面有个body 长度...
OTA功能,linux下调用xmode协议,升级MCU
qq_37612662的博客
07-01 539
Linux mcu
单片机MCU OTA升级技术
Mr.Liu
04-23 6190
云端OTA通知推送云端只会给当时在线设备推送;对于当时不在线,或者没升级成功的设备,云端会每天推送一次。 MCU OTA:包括下载、存储、校验、传输4个过程。下载、存储、校验同GAgent OTA一样;传输:通知MCU固件传输,并分片传输给MCU,每片需要进行sum校验,传输完成后MCU需要进行MD5校验。MCU成功后重启GAgent,以让GAgent重新握手获取更新后的MCU信息。 M...
STM32单片机OTA程序升级
热门推荐
hurryddd
11-28 1万+
目录 一、程序升级原理 1、本地应用程序更新 2、固件升级命令响应 和 升级固件下载 二、RT-Thread STM32通用Bootloader + ota_downloader软件包oat升级 1、使用环境 2、RT OAT软件架构 3、STM32通用Bootloader 功能及使用 4、制作包含ota下载器功能的app 5、打包app待升级固件 一、程序升级原理 IAP...
STM32在线升级OTA,看这一篇就够啦~
Mculover666的博客(嵌入式)
06-10 9862
本文是博主在学习OTA时参考的文章,原作者leafguo,原文链接如下: STM32CubeMx开发之路—在线升级OTA(1/4)—基础知识 简介 本文主要讲解在线升级(OTA)的基础知识, 主要是针对IAP OTA从原理分析, 分区划分, 到代码编写和实验验证等过程阐述这一过程. 帮助大家加深对OTA的认识. 1. OTA基础知识 什么是BootLoader? BootLoader可以理解成是引导程序, 它的作用是启动正式的App应用程序. 换言之, BootLoader是一个程序, App也是一个.
rk3288 linux OTA A/B升级分析
nicholas_duan的博客
09-16 3353
最近在做rk3288 linuxOTA A/B升级方案,因此研究了一下rk3288自带的OTA升级流程,将其记录下来。 1.概述 1.1 什么是OTA升级OTA是Over-the-Air的简称,OTA升级可以理解为用户正常使用过程中进行升级OTA 升级旨在升级基础操作系统、系统分区上安装的只读应用和/或时区规则。 1.2 什么是OTA A/B升级? A/B 系统升级(也称为无缝更新)的目标是确保在OTA升级期间在磁盘上保留一个可正常启动和使用的系统。 1.3 rk3288分区信息 参考:htt
如何在nodemcu里面实现ota
05-15
OTA(Over-The-Air,空中固件升级)是一种能够无需通过串口或者USB线连接设备即可进行固件更新的方法。nodemcu是一款基于ESP8266的开源硬件平台,支持使用lua语言进行编程,开发者可以通过在nodemcu实现OTA实现固件的远程更新。 下面是在nodemcu实现OTA的步骤: 1. 在nodemcu中安装支持OTA固件。可以通过在线固件升级工具或者本地的esptool.py工具将OTA固件烧录到nodemcu上。 2. 使用Arduino IDE或者其他编辑器将代码上传到nodemcu。在代码中添加OTA库,可以使用ArduinoOTA库或者ESP8266mDNS库等。代码中需要配置OTA,设置端口和密码等信息。 3. 将nodemcu连接到WiFi网络上。可以使用WiFi库或者ESP8266WiFi库实现WiFi连接。 4. 通过串口或者网页浏览器访问nodemcu的IP地址,可以看到OTA的状态信息和更新进度。当有更新可用时,nodemcu将自动下载更新文件,并进行固件更新。 需要注意的是,使用OTA进行固件更新可能会存在一些安全风险,因此建议设置OTA密码或者采用其他加密方式进行保护。另外,因为ESP8266芯片的存储容量有限,因此需要控制OTA文件的大小,避免升级文件过大导致升级失败。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Keil(MDK-ARM)介绍、下载、安装与注册 321592
  • 让程序员崩溃的瞬间(非程序员勿入) 292144
  • STM32 ST-LINK Utility介绍、下载、安装、使用方法 259450
  • STM32CubeMX介绍、下载与安装 229225
  • Keil(C51)介绍、下载、安装与注册 227602

分类专栏

  • STM32CubeMX+IDE 付费
  • Keil系列教程 13篇
  • 通信教程 7篇
  • STM8S系列教程 10篇
  • IAR系列教程 7篇
  • FreeRTOS系列教材 6篇
  • EWSTM8系列教程 8篇
  • MAVLink学习之路 3篇
  • CANOpen系列教程 6篇
  • ST-Link资料 6篇
  • printf系列教程 8篇
  • STM32CubeMX系列教程 6篇
  • STM32F1 31篇
  • 汇总 5篇
  • MDK-ARM 2篇
  • STM32F0 14篇
  • STM32F4 7篇
  • UCOS 11篇
  • STM32 5篇
  • STM32CubeMX 9篇
  • IAR 10篇
  • STM32 ST-LINK Utility 1篇
  • Keil 14篇
  • STM32工具 1篇
  • STM32综合文章 2篇
  • 综合 10篇
  • STM8S 11篇
  • FreeRTOS 6篇
  • EWSTM8系列教程 9篇
  • MAVLink学习之路 3篇
  • CANOpen系列教程 6篇
  • ST-Link资料 6篇
  • STM32CubeIDE 1篇
  • printf系列教程 8篇

最新评论

  • Keil MDK 6 的使用教程来了

    木目loser: si编辑代码也还是香的啊,然后调试直接keil,可以观察各种寄存器值。

  • 单片机实现低功耗的几种方法和注意事项

    iwonako: 设置成浮空模式不能吗

  • 单片机实现低功耗的几种方法和注意事项

    iwonako: [code=plain] 在低功耗状态、工作过程都需要设置成合理状态。比如通常在待机时,将不用的引脚设置成模拟输入。 [/code] 请问为什么设置为模拟输入可以降低功耗?

  • 一文搞懂 USB 控制器与phy 关系

    qq_37523370: 很会画图,清晰明了

  • 手把手教你编写一个上位机

    qq_39538698: 成功了,谢谢博主

大家在看

  • 深入探讨Java IO流 650
  • 忘记加await,返回结果undefined
  • 19条Python编程技巧
  • #A. C08.L01.高精度加法与减法.概述
  • 【德特森】电动截止阀的故障分析及排除方法 201

最新文章

  • 分享一个不错的嵌入式在线仿真工具
  • USB-C这些年发生了什么变化?
  • 分享一个 keil 编译信息增强工具
2024
06月 8篇
05月 49篇
04月 47篇
03月 39篇
02月 31篇
01月 43篇
2023年347篇
2022年314篇
2021年512篇
2020年543篇
2019年256篇
2018年102篇
2017年66篇
2016年129篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司伊犁优化多少钱白城如何制作网站价格辽阳网页设计苏州seo网站优化报价南通如何制作网站价格武威百度标王价格辽阳网站关键词优化推荐坑梓营销网站推荐黄冈网站制作设计推荐龙华如何制作网站公司本溪英文网站建设报价永新网站开发荆门建设网站价格唐山外贸网站设计榆林企业网站建设公司平凉网站优化按天计费南京关键词按天计费哪家好阿坝seo排名哪家好南昌网站改版哪家好枣庄网络广告推广推荐东莞百度网站优化报价海西企业网站改版价格济宁SEO按天计费报价荆州推广网站价格防城港外贸网站设计哪家好庆阳企业网站建设哪家好安庆关键词排名价格同乐百度网站优化公司濮阳网站推广方案报价太原关键词按天收费哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化