Bluetooth® Mesh 设备固件更新
技术概览
发布 : | 1.0.0 |
文件版本 : | 1.0 |
最后更新 : | 2023 年 9 月 19 日 |
作者 : |
马丁-伍利Bluetooth SIG |
Version |
Date |
Author |
Changes |
1.0.0 |
September 19, 2023 |
Martin Woolley, Bluetooth SIG |
Initial version |
备注 Bluetooth Mesh 配置文件 规范已更名,现称为Bluetooth Mesh 协议规范。本文件和相关文件在提及 1.1 版规范时将使用这一名称,但在提及 1.0 版规范时,仍将继续称其为Bluetooth Mesh 配置文件规范。 |
1.背景情况
Bluetooth® Mesh 1.1 引入了一套新功能,允许在整个网络中更新设备上运行的固件。在介绍该功能的功能、优势和技术亮点之前,先介绍相关背景。
1.1 固件和Bluetooth Mesh 设备
控制设备硬件的底层软件通常称为 固件。Bluetooth Mesh 设备运行的固件实现了Bluetooth Mesh 协议以及Bluetooth LE 主机和控制器的底层。这些mesh 模型设备使用的模型本身就是在固件中实现的,不在Bluetooth 规范范围内的其他设备特定行为和功能也是如此。设备上的固件对设备的性能起着至关重要的作用。
1.2 保持固件更新
固件需要不断更新,制造商经常会发布固件更新。新固件可能会修复问题、增加新功能、提高安全性、提供更好的性能或带来其他好处。无论是设备固件、应用软件还是操作系统更新,及时更新软件都是公认的良好做法。
如何更新软件取决于软件的类型和平台。对于现代智能手机和台式机操作系统来说,几乎不需要用户参与的自动软件更新已成为常态。.
Bluetooth® Mesh 1.0 没有提供自动或标准化机制来检测设备是否有新固件、获取新固件或安装新固件。这些任务必须手动完成,并使用为此提供的任何专有接口直接向设备安装固件更新。在由多个供应商设备组成的mesh 网络中,这一过程可能涉及多个专有工具,变得非常复杂。
1.3 二进制图像
固件更新通常装在一个二进制文件中,称为 图像.映像文件的格式各不相同,取决于目标平台及其制造商。解压缩、验证和安装固件需要特定于制造商的专有程序。
1.4 固件更新和安全性
安装新固件有一定的安全风险。你怎么知道安装的软件是制造商声称的那样?你怎么知道它没有被篡改,或许没有加入恶意代码?
这些问题不在Bluetooth®规范范围内。不过,一般来说,为确保固件映像未被篡改,建议只使用经原始文件数字签名的文件。数字签名可防止文件在未被发现的情况下被篡改,并可验证文件的来源。同样,将可能下载固件更新的服务器设为 可信源通常通过使用数字证书来实现。
1.5 型号
模型是应用层Bluetooth® Mesh 设备行为的构件。模型是实现特定行为集的软件组件,并与一组定义的消息和状态相关联。有客户端模型和服务器模型之分,客户端模型只发送和接收信息,而服务器模型不仅发送和接收信息,还包含状态值,这些状态值会被模型的信息所影响。
2.关于设备固件更新
2.1 能力和优势
2.1.1 设备固件更新
Bluetooth® Mesh 的新设备固件更新 (DFU) 功能为网络中的节点提供了一种标准的固件更新方式。其功能包括监控新固件更新的可用性、获取二进制图像、在网络内分发以及更新选定的节点。
一个典型的网络通常包含许多来自同一制造商的同类产品。DFU 功能可提供 多播Bluetooth Mesh 中使用的广播通信,这样就可以使用最少的无线电传输,将单个固件更新映像一次性分发到多个设备。
DFU 大大减少了楼宇维护团队为更新网络设备中运行的固件所需的人工工作量。
2.1.2 即插即用
DFU 功能允许更新由多个子系统组成的设备,每个子系统都有自己的固件。每个固件实例都列在设备的固件信息列表中。
固件信息列表是动态的,这意味着在添加或删除即插即用组件时,子系统的变化会反映在设备的固件信息列表中。
与新的即插即用功能相关的是,Bluetooth Mesh 协议规范 1.1 为设备的生命周期及其结构和配置引入了一个新的正式名称。术语的概念是 术语的概念在规范中描述如下:
A 期是节点生命周期中的一段时间,在此期间,节点的结构(特征、元素和模型)以及节点元素的单播地址不会发生变化。 可能需要启动一个新术语来支持物理设备硬件配置的更改,如附加辅助传感器,或支持节点上子系统配置的更改,如灯具内部网络。节点通过填充 "组成数据页 "128 来显示这些更改,并在新的 开始时生效。开始时生效。 初始 期限在网络上配置节点时开始。 A 任期结束结束,新的 开始。在执行节点地址刷新程序或节点组成刷新程序时开始。 最后一个 项在网络上的节点从网络中删除时结束。 |
2.2 技术要点
2.2.1 DFU 的作用
DFU 系统定义了一系列节点角色。这些角色是
Role |
Description |
Initiator |
The Initiator identifies available firmware updates for a given list of nodes in the network. It executes procedures defined in the DFU specification under the control of an application. The Initiator typically runs on a device which supports both Bluetooth® Mesh and has internet connectivity, such as a smartphone or gateway device, and periodically checks manufacturers’ websites for new firmware releases. Having identified relevant updates, it acquires them and sends the new firmware images to a Distributor node. |
Distributor |
The Distributor receives new firmware images from an Initiator and is responsible for sending them to appropriate nodes in the network for installation. The Distributor is typically a physically separate device to the Initiator so that the Initiator (which will often be a smartphone application) does not need to be in range of the network during the entire process. The Distributor can be thought of as acting an intermediary for the Initiator. |
Target |
Target is the name given to a node which can receive a firmware image from a Distributor and install it. |
Stand-alone Updater |
A Stand-alone Updater fulfils the role of a combined Initiator and Distributor, acquiring firmware updates and sending them directly to Target nodes without the need for an intermediate Distributor. |
2.2.2 模式
DFU 功能基于一些新的mesh 模型和涉及这些模型的一系列相关程序。
- 运输 传输模型为在节点间传输二进制大对象(BLOB)提供了一种通用机制。
- 固件分发 固件分发模式支持向目标节点分发固件更新的程序。
- 固件更新 固件更新型号支持更新设备固件的程序。
每个模型都参与了一系列程序,这些程序可共同识别、获取可用的固件更新,并将其分发到相关节点,进行验证和安装。
2.2.3 角色和模式
下表摘自 DFU 规范,显示了 DFU 角色与新模式之间的关系。
角色 |
固件分发客户端 |
固件分发服务器 |
固件更新客户端 |
固件更新服务器 |
BLOB 传输客户端 |
BLOB 传输服务器 |
目标 |
- |
- |
- |
M |
- |
M |
发起人 |
M |
- |
M |
- |
M |
- |
经销商 |
- |
M |
M |
- |
M |
M |
独立更新器 |
- |
- |
M |
- |
M |
- |
M:本角色必须支持这一模式。
mesh 节点可通过为每个角色实例化相关模型来支持多个角色。
2.2.4 固件更新程序概述
固件更新的获取、分发和安装方式有多种多样。例如
- 分销商可使用标准的 固件检查 HTTPS 程序或使用特定实施程序从供应商网站获取固件。
- 启动节点可获取固件映像并将其发送给分发节点,以便分发到更新节点,也可发送信息,让分发节点自己获取固件映像。
图 1 描述了启动器节点、分发器节点和一个或多个目标节点如何协同工作以获取、分发和安装固件更新的一个代表性示例。 并在后面的文字中加以说明。
2.2.4.1 查找和分发固件更新
图 1 - 获取和分发固件更新
图 1 显示了正在执行的一系列程序,这些程序从供应商网站获取固件更新,然后分发并安装到一组更新节点上。图中显示了扮演各种 DFU 角色的节点之间的互动,并酌情标明了所涉及的特定型号。
总之,它描述了以下内容:
- 启动程序获取当前在上层应用程序指定的节点列表上运行的固件信息。
- 启动程序会检查该固件的相关更新,在这种情况下会使用发送到供应商网站的 HTTPS 请求。如果有可用更新,就会下载。如果没有,则终止进程。
- 然后,启动程序会将更新节点列表的详细信息添加到 分发接收器列表固件分发服务器的状态。请注意,为简单起见,列表中的每个节点都应能接受相同的固件映像。
- 启动程序使用 上传固件和 传输 BLOB程序将固件映像传输到分配器。
- 然后,发起方指示分配方启动分配。
- 分配器上的固件更新客户端会通知每个更新节点上的相应服务器模型,固件更新程序正在启动,并希望收到状态信息作为回复。
- 7.分配器使用 BLOB 传输程序将固件映像传输到每个更新 n
2.2.4.2 检查分发进度
在向更新节点分发固件的过程中,启动程序可向分发程序询问进展情况。
图 2- 启动器检查分配器的进度
2.2.4.3 验证和安装固件
在收到完整的二进制映像后,更新节点将执行特定的实施验证检查,例如检查 BLOB 上的数字签名。分发器将监控更新节点的程序状态,并在适当时指示更新节点安装固件更新。
图 3- 更新节点验证固件映像,并根据指示进行安装
2.2.5 文件格式
使用已定义的 程序检索的固件更新文件应使用Bluetooth Mesh 协议规范中定义的归档文件格式。该格式包括描述文件内容的清单文件、二进制固件映像文件本身,以及包含固件映像附加信息的可选元数据文件。清单文件和元数据文件都使用定义的 JSON 格式。
2.2.6 固件子系统
节点可将其固件划分为多个部分,每个部分都可独立更新。每个独立的部分称为固件子系统。例如,节点上的mesh 网络协议栈就是一个独立的固件子系统。
2.2.7 更新 URI
固件更新服务器模型包括一个名为 "固件信息列表 "的状态。它由更新 URI 和相关固件 ID 组成。固件 ID 标识节点上的固件子系统,而更新 URI 状态值则表示该固件的更新位置。mesh DFU 规范说明了如何使用这些信息来构建下载 URI,以用于 固件检查 HTTP程序中使用的下载 URI,可能会产生类似这样的 URI:
https://mesh.example.com/check-for-updates/check?cfwid=02FF10000203
2.2.8 运输概念
BLOB 传输模型设计用于传输任何类型的二进制大对象。在Bluetooth® Mesh 协议规范的 1.1 版本中,它们仅用于向更新节点分发固件映像。了解 BLOB 传输模型的通用功能对于理解设备固件更新功能的工作原理非常重要。
图 4:BLOB 传输模型。显示图像划分为块和块划分为块的情况
2.2.8.1 blob id
所有 BLOB 都被分配了一个唯一的 8 八位字节标识符,以便在 BLOB 传输过程中使用。
2.2.8.2 块和块
BLOB 被分为一系列 块块。块的大小是根据目的地 BLOB 传输服务器的能力确定的,客户端会对其进行查询。
块被分为 块除了最后一个数据块,如果数据块大小不是数据块大小的整数倍,那么最后一个数据块可能比其他数据块小)。
每个 BLOB 传输服务器都会计算一系列参数,包括它能处理的最大块大小。最大块大小的计算涉及客户端和服务器的最大传输单元(MTU)。在传输初始化时,客户端会计算出所有接收器都能容纳的传输块大小。
每个分块分配一个 16 位 块编号来标识它在父块中的位置。
2.2.8.3 传输模式
定义了两种 BLOB 传输模式。
在 推送 BLOB 传输模式中,客户端控制流量。每次传输一个数据块,作为一系列数据块传输到单播地址或组播地址。然后,客户端会查询服务器,以确定收到了哪些数据块,并重新传输丢失的数据块。
在 拉动 BLOB 传输模式中,服务器控制数据流。这种模式主要是为低功耗节点设计的,一次只能从客户端向一个服务器传送一个 BLOB。
2.2.8.4 转移状态跟踪
Bluetooth® Mesh 网络具有多路径、多跳消息传递和重传系统以提高可靠性的性质,这意味着消息传递的顺序无法以任何方式得到保证。因此,传递 BLOB 所划分的块的 BLOB 传输消息也不能保证以任何特定顺序到达。因此,BLOB 传输客户端可以按任何顺序选择块,并且在选择块后,可以按任何顺序发送块。
属于 BLOB 传输服务器模型的 "缺失块"(Missing Chunks)状态为跟踪活动块中每个块的状态提供了一种方法。缺失数据块状态包含一个比特掩码,使用方法如下:状态值中的每个比特位置都表示与该数据块编号对应的数据块的状态。例如,第 7 位表示当前数据块中第 7 号数据块的状态。数值为 1 表示尚未收到该数据块,数值为 0 表示已经收到。
BLOB 传输客户端会从其传输的服务器中检索 "缺失数据块 "状态的值,并用它来识别未收到、仍需传输或需要重新传输的数据块。
2.2.9 安全
维护最新软件是保证各类计算机设备安全的公认最佳做法。但是,获取和安装软件也会带来安全风险。最重要的是,你需要确保你是从一个值得信赖的来源获取软件的,并且下载的代码没有以任何方式被篡改过,在下载过程中也不能被篡改。请注意,使用 HTTPS 还可以防止被动窥探者发现您当前在网络中运行的固件版本以及您正在更新的版本。如果攻击者知道特定固件版本中的特定漏洞,这将是非常有价值的信息。
DFU 规范要求实施者决定如何解决这两个问题。
检查更新的固件 检查更新的固件程序可让执行者选择使用指定的 通过 HTTPS 进行固件检查 和 通过 HTTPS 检索固件程序或特定于实施的程序集。
通过 HTTPS 进行固件检查 通过 HTTPS 进行固件检查和/或 通过 HTTPS 检索固件程序只允许使用安全的 HTTPS 协议。HTTPS 协议可确保对飞行中的数据进行加密,并要求服务器具有数字证书,从而允许 HTTP 客户端验证服务器声称的身份。数据是加密的,任何试图篡改两个端点之间发送的数据的行为都会被检测到。
建议实施者尽可能使用最安全的固件更新检查和检索选项。
3.关闭
Bluetooth® Mesh 设备固件更新可使用户轻松遵循最佳实践,并使作为网络节点的设备固件保持最新。它的设计目的是自动监控供应商提供的新版本,并支持尽可能简单、无干扰的用户体验。