存储器高效的升级暂存的制作方法

文档序号:23804459发布日期:2021-02-03 07:33阅读:84来源:国知局
存储器高效的升级暂存的制作方法
存储器高效的升级暂存


背景技术:

[0001]
物联网(“iot”)通常是指能够通过网络进行通信的设备系统。这些设备可以包括日常物品,诸如烤面包机、咖啡机、恒温器系统、洗衣机、干衣机、灯、汽车等。网络通信可以用于设备自动化、数据捕获、提供警报、设置个性化以及很多其他应用。


技术实现要素:

[0002]
提供本“发明内容”是为了以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
[0003]
简要地说,所公开的技术总体上涉及嵌入式设备更新。在该技术的一个示例中,对至少两个优先级分组执行暂存,在对较低优先级分组进行暂存之前完成对每个较高优先级分组的暂存,包括对于每个优先级分组的以下动作。在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的安装目标的列表。在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的清除目标的列表。在一些示例中,将安装目标下载到存储器的备份分区。在一些示例中,基于安装目标,引起对存储器中的软件的更新。在一些示例中,从存储器中删除清除目标。在一些示例中,从备份分区中删除安装目标。
[0004]
在阅读和理解附图和说明书之后,将能够理解所公开的技术的其他方面和应用。
附图说明
[0005]
参考附图描述本公开的非限制性和非穷举性示例。在附图中,除非另有说明,否则相同的附图标记在各个附图中指代相同的部件。这些附图不一定按比例绘制。
[0006]
为了更好地理解本公开,将参考应当结合附图来阅读的以下“具体实施方式”,在附图中:
[0007]
图1是示出可以采用本技术的各方面的合适环境的一个示例的框图;
[0008]
图2是示出根据所公开的技术的各方面的合适计算设备的一个示例的框图;
[0009]
图3是示出用于数据安全性的系统的示例的框图;
[0010]
图4是示出图3的设备控制器的示例的框图;以及
[0011]
图5a-5b是示出根据本公开的各方面的示例过程的流程图。
具体实施方式
[0012]
以下描述提供用于彻底理解和实现该技术的各种示例的描述的具体细节。本领域技术人员将理解,可以在没有很多这些细节的情况下实现该技术。在一些情况下,没有详细示出或描述公知的结构和功能,以避免不必要地模糊对技术的示例的描述。本公开中使用的术语旨在以其最广泛的合理方式解释,即使其与该技术的一些示例的详细描述一起使用。尽管下面可以强调某些术语,但是旨在以任何受限制的方式解释的任何术语将在“具体
实施方式”部分中明确地和具体地定义。在整个说明书和权利要求书中,除非上下文另有指示,否则以下术语至少采用本文中明确相关的含义。下面确定的含义不一定限制术语,而仅仅提供术语的说明性示例。例如,术语“基于(based on)”和“基于(based upon)”中的每个不是排他性的,并且等同于术语“至少部分地基于(based,at least in part,on)”,并且包括基于其他因素的选项,其中的一些因素可能在本文中没有描述。作为另一示例,术语“经由”不是排他性的,并且等同于术语“至少部分经由”,并且包括经由附加因素的选择,其中的一些因素可能在本文中没有描述。“在
……
中(in)”的含义包括“在
……
中(in)”和“在
……
上(on)”。本文中使用的短语“在一个实施例中”或“在一个示例中”尽管可以但是不一定是指相同的实施例或示例。特定的文本数字指示符的使用并不表示存在较低值的数字指示符。例如,陈述“从包括第三foo和第四bar的组中选择的小部件”本身并不表示存在至少三个foo,也不表示存在至少四个bar元素。除非明确排除多个引用,否则单数引用仅仅是为了阅读的清楚并且包括复数引用。除非另有明确说明,否则术语“或”是包含性的“或”运算符。例如,短语“a或b”表示“a、b或a和b”。如本文中使用的,术语“组件”和“系统”旨在包含硬件、软件或硬件和软件的各种组合。因此,例如,系统或组件可以是过程、在计算设备上执行的过程、计算设备或其一部分。
[0013]
简要地说,所公开的技术总体上涉及嵌入式设备更新。在该技术的一个示例中,对至少两个优先级分组执行暂存,在对较低优先级分组进行暂存之前完成对每个较高优先级分组的暂存,包括对于每个优先级分组的以下动作。在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的安装目标的列表。在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的清除目标的列表。在一些示例中,将安装目标下载到存储器的备份分区。在一些示例中,基于安装目标,引起对存储器中的软件的更新。在一些示例中,从存储器中删除清除目标。在一些示例中,从备份分区中删除安装目标。
[0014]
在一些示例中,在执行嵌入式设备升级之前,先对升级进行暂存,即,在更新的实际安装之前,下载更新并且将更新放置在其需在的适当分区中的位置。在空间不足以存储整个更新的情况下以及在存在复杂的优先级排序问题的情况下,处理暂存可能具有挑战性。
[0015]
可以以某种方式接收或生成指示一旦更新完成就应当存在的软件的列表。该列表可以在暂存期间被使用,如下面更详细讨论。
[0016]
在一些示例中,以多种方式对暂存进行优先级排序。作为一种类型的优先级排序,在一些示例中,暂存被组织为按优先级排序的优先级分组,使得首先对具有最高优先级的优先级分组整体进行暂存,然后再前进到下一个优先级分组,然后,在进行到再下一个优先级分组之前,对次最高优先级分组整体进行暂存,以此类推,直到每个优先级分组被暂存。
[0017]
每个优先级分组可以如下被暂存。对于正在暂存的优先级分组,将指示一旦更新完成就应当存在的软件的列表与持久性存储器中当前存在的软件进行比较。基于比较生成安装目标列表,其中该列表包括在暂存优先级分组中存储器中当前不存在的软件和相对于存储器中当前存在的软件需要被更新的软件版本。然后,可以基于比较生成清除目标列表,其中对于当前优先级分组,清除目标包括存储器中当前存在但一旦更新完成就不在应当存在的软件列表中的软件。
[0018]
然后,可以下载与安装目标相对应的软件。在一些示例中,然后,基于安装目标,引起更新当前优先级分组的软件。另外,可以删除清除目标。在一些示例中,一旦安装完成,就从存储器中删除安装目标,因为可能没有足够的存储器来一次暂存整个更新。
[0019]
暂存可以改变,并且在各种示例中可以包括附加步骤,例如,以包括回滚到最后的已知良好状态,以允许测试应用,和/或出于其他原因,如下面更详细地讨论的。
[0020]
说明性设备/操作环境
[0021]
图1是可以实现本技术的各方面的环境100的图。如图所示,环境100包括经由网络130被连接的计算设备110以及网络节点120。即使图1中示出了环境100的特殊组件,但是在其他示例中,环境100还可以包括附加的和/或不同的组件。例如,在某些示例中,环境100还可以包括网络存储设备、维护管理器和/或其他合适的组件(未示出)。图1所示的计算设备110可以处于各种位置,包括在室内、在云中等。例如,计算机设备110可以在客户端侧、服务器侧等。
[0022]
如图1所示,网络130可以包括一个或多个网络节点120,一个或多个网络节点120互连多个计算设备110并且将计算设备110连接到外部网络140(例如,互联网或内联网)。例如,网络节点120可以包括交换机、路由器、中枢、网络控制器或其他网络元件。在某些示例中,计算设备110可以被组织成机架、动作区域(zone)、组、集合或其他合适的划分。例如,在所示示例中,计算设备110被分组为三个主机组,该三个主机组分别被标识为第一、第二和第三主机组112a-112c。在所示示例中,主机组112a-112c中的每个主机组分别可操作地被耦合到相应的网络节点120a-120c,这些网络节点通常称为“机架顶”或“tor”网络节点。然后,tor网络节点120a-120c可以可操作地被耦合到附加的网络节点120,以形成允许计算设备110与外部网络140之间的通信的分层、平面、网状或其他合适类型的拓扑的计算机网络。在其他示例中,多个主机组112a-112c可以共享单个网络节点120。计算设备110实际上可以是任何类型的通用或专用计算设备。例如,这些计算设备可以是用户设备,诸如台式计算机、膝上型计算机、平板计算机、显示设备、相机、打印机、或智能电话。然而,在数据中心环境中,这些计算设备可以是服务器设备,诸如应用服务器计算机、虚拟计算主机计算机或文件服务器计算机。此外,计算设备110可以单独配置,以提供计算、存储和/或其他合适的计算服务。
[0023]
在一些示例中,计算设备110中的一个或多个计算设备110是iot设备、包括iot支持服务的部分或全部的设备、包括应用后端的部分或全部的设备等,如下面更详细地讨论的。
[0024]
说明性计算设备
[0025]
图2是示出其中可以实现本技术的各方面的计算设备200的一个示例的图。计算设备200实际上可以是任何类型的通用或专用计算设备。例如,计算设备200可以是用户设备,诸如台式计算机、膝上型计算机、平板计算机、显示设备、相机、打印机或智能电话。同样地,计算设备200也可以是服务器设备,诸如应用服务器计算机、虚拟计算主计算机或文件服务器计算机,例如,计算设备200可以是图1的计算设备110或网络节点120的示例。计算设备200也可以是连接到网络以接收iot服务的iot设备。同样地,计算机设备200可以是图3-5中示出或参考的任何设备的示例,如下面更详细地讨论的。如图2所示,计算设备200包括处理电路210、操作存储器220、存储器控制器230、数据存储存储器250、输入接口260、输出接口
270和网络适配器280。计算设备200的这些前面列出的组件中的每个组件包括至少一个硬件元件。
[0026]
计算设备200包括被配置为执行指令的至少一个处理电路210,诸如用于实现本文中描述的工作负载、过程或技术的指令。处理电路210可以包括微处理器、微控制器、图形处理器、协处理器、现场可编程门阵列、可编程逻辑器件、信号处理器或适合于处理数据的任何其他电路。处理电路210是内核的示例。上述指令以及其他数据(例如,数据集、元数据、操作系统指令等)可以在计算设备200的运行时期间存储在操作存储器220中。操作存储器220还可以包括多种数据存储设备/组件中的任何一种,诸如易失性存储器、半易失性存储器、随机存取存储器、静态存储器、高速缓存、缓冲器或用于存储运行时信息的其他介质。在一个示例中,当计算设备200断电时,操作存储器220不保留信息。相反,作为引导(boot)或其他加载过程的部分,计算设备200可以被配置为将指令从非易失性数据存储组件(例如,数据存储组件250)传输到操作存储器220。在一些示例中,可以采用其他形式执行,诸如直接从数据存储组件250执行,例如,现场执行(xip)。
[0027]
操作存储器220可以包括第四代双倍数据速率(ddr4)存储器、第三代双倍数据速率(ddr3)存储器、其他动态随机存取存储器(dram)、高带宽存储器(hbm)、混合存储器立方体存储器、3d堆叠存储器、静态随机存取存储器(sram)、磁阻随机存取存储器(mram)、伪静态随机存取存储器(psram)或其他存储器,并且这种存储器可以包括一个或多个存储器电路,该一个或多个存储器电路被集成到dimm、simm、sodimm、已知合格晶片(kgd)或其他封装(packaging)上。这样的操作存储模块或设备可以根据通道、等级和库来被组织。例如,操作存储设备可以经由通道中的存储器控制器230被耦合到处理电路210。计算设备200的一个示例可以每个通道包括一个或两个dimm,每个通道具有一个或两个等级。等级内的操作存储器可以与共享时钟、共享地址和命令总线一起操作。而且,操作存储器设备可以被组织成几个存储体(bank),存储体可以被认为是由行和列寻址的阵列。基于这种操作存储器的组织,操作存储器内的物理地址可以由通道、等级、存储体、行和列的元组来引用。
[0028]
尽管有上述讨论,但是操作存储器220具体地不包括或不包含通信媒介、任何通信介质或任何信号本身。
[0029]
存储器控制器230被配置为将处理电路210接口到操作存储器220。例如,存储器控制器230可以被配置为对操作存储器220与处理电路210之间的命令、地址和数据进行接口。存储器控制器230也可以被配置为抽象或以其他方式管理来自或针对处理电路210的存储管理的某些方面。虽然存储器控制器230被示出为与处理电路210分开的单个存储器控制器,但是在其他示例中,可以采用多个存储器控制器,(一个或多个)存储器控制器可以与操作存储器220集成,等等。进一步地,(一个或多个)存储控制器可以集成到处理电路210中。这些和其他变型是可能的。
[0030]
在计算设备200中,数据存储存储器250、输入接口260、输出接口270和网络适配器280通过总线240被接口到处理电路210。虽然图2将总线240示出为单个无源总线,但是其他配置(诸如总线集合、点对点链路的集合、输入/输出控制器、桥接器、其他接口电路或其任何集合)也可以适当地用于将数据存储存储器250、输入接口260、输出接口270或网络适配器280接口到处理电路210。
[0031]
在计算设备200中,数据存储存储器250被采用用于长期非易失性数据存储。数据
存储存储器250可以包括各种非易失性数据存储设备/组件中的任何一种,诸如非易失性存储器、磁盘、磁盘驱动器、硬盘驱动器、固态驱动器或可以用于信息的非易失性存储的任何其他介质。然而,数据存储存储器250具体地不包括或包含通信媒介、任何通信介质或任何信号本身。与操作存储器220相反,数据存储存储器250被计算设备200采用用于非易失性长期数据存储,而不是用于运行时数据存储。在一些示例中,性能计数器475还可以被配置为测量从核心到目标(诸如从mcu 462到sram 458)的延时。
[0032]
此外,计算设备200可以包括或被耦合到任何类型的处理器可读介质,诸如处理器可读存储介质(例如,操作存储器220和数据存储存储器250)和通信媒介(例如,通信信号和无线电波)。虽然术语处理器可读存储介质包括操作存储器220和数据存储存储器250,但是在整个说明书和权利要求中的术语“处理器可读存储介质”,无论是以单数还是复数形式使用,在本文中被定义,以使术语“处理器可读存储介质”具体地排除并且不包括通信媒介、任何通信介质或任何信号本身。然而,术语“处理器可读存储介质”确实包含处理器高速缓存、随机存取存储器(ram)、寄存存储器等。
[0033]
计算设备200还包括输入接口260,输入接口260可以被配置为使计算设备200能够从用户或从其他设备接收输入。另外,计算设备200包括输出接口270,输出接口270可以被配置为从计算设备200提供输出。在一个示例中,输出接口270包括帧缓冲器、图形处理器、图形处理器或加速器,并且被配置为渲染用于在单独的可视显示设备(诸如监测器、投影仪、虚拟计算客户端计算机等)上呈现的显示。在另一示例中,输出接口270包括可视显示设备,并且被配置为渲染和呈现用于观看的显示。在又一示例中,输入接口260和/或输出接口270可以包括通用异步接收器/发射器(“uart”)、串行外围设备接口(“spi”)、内部集成电路(“i2c”)、通用输入/输出(gpio)等。此外,输入接口260和/或输出接口270可以包括或被接口到任何数目或类型的外围设备。
[0034]
在所示示例中,计算设备200被配置为经由网络适配器280与其他计算设备或实体通信。网络适配器280可以包括有线网络适配器,例如以太网适配器、令牌环适配器或数字用户线(dsl)适配器。网络适配器280还可以包括无线网络适配器,例如wi-fi适配器、蓝牙适配器、zigbee适配器、长期演进(lte)适配器、sigfox、lora、电力线或5g适配器。
[0035]
尽管计算设备200被示出为具有以特殊布置而配置的某些组件,但是这些组件和布置仅仅是可以采用该技术的计算设备的一个示例。在其他示例中,数据存储存储器250、输入接口260、输出接口270或网络适配器280可以直接被耦合到处理电路210,或者经由输入/输出控制器、桥接器或其他接口电路被耦合到处理电路210。该技术的其他变型是可能的。
[0036]
计算设备200的一些示例包括适于存储运行时数据的至少一个存储器(例如,操作存储器220)和适于执行处理器可执行代码的至少一个处理器(例如,处理单元210),在一些示例中,这些处理器可执行代码响应于执行而使计算设备200能够执行动作。
[0037]
说明性系统
[0038]
本公开的一些示例被用于在iot设备中包括的、用作iot设备的设备控制器的多核微控制器的上下文中。本公开的示例也可以在其他合适的上下文中使用。下面关于图4和图5讨论在iot设备中包括的、用作iot设备的设备控制器的多核微控制器的上下文中所使用的本公开的特定示例。
[0039]
图3是示出系统(300)的示例的框图。系统300可以包括网络330、以及都被连接到网络330的iot支持服务351、iot设备341和342、以及应用后端313。
[0040]
术语“iot设备”是指旨在利用iot服务的设备。iot设备实际上可以包括被连接到网络以使用iot服务的任何设备,包括用于遥测收集或任何其他目的。iot设备包括可以被连接到网络以利用iot服务的任何设备。在各种示例中,iot设备可以与云、对等体(peer)或本地系统、或对等体和本地系统和云进行通信,或者以任何其他合适的方式通信。iot设备可以包括日常物品,诸如烤面包机、咖啡机、恒温器系统、洗衣机、干衣机、灯、汽车等。iot设备还可以包括例如“智能”建筑物中的各种设备,包括灯、温度传感器、湿度传感器、占用传感器等。针对iot设备的iot服务可以用于设备自动化、数据捕获、提供警报、设置的个性化、以及很多其他应用。
[0041]
术语“iot支持服务”是指设备、至少一个设备的部分或多个设备,诸如分布式系统,在一些示例中,iot设备在网络上与其连接以获取iot服务。在一些示例中,iot支持服务是iot中枢。在一些示例中,iot中枢被排除,并且iot设备直接或通过一个或多个中介与应用后端通信,而不包括iot中枢,并且应用后端中的软件组件作为iot支持服务进行操作。iot设备经由与iot支持服务的通信来接收iot服务。在一些示例中,iot支持服务可以嵌入设备内部或本地基础设施中。
[0042]
应用后端313是指设备或多个设备,诸如分布式系统,其执行动作,这些动作使数据收集、存储和/或动作能够基于iot数据进行,包括用户访问和控制、数据分析、数据显示、数据存储控制、基于iot数据进行的自动操作等。应用后端313也可以是部署在公共或私有云中的一个或多个虚拟机。在一些示例中,由应用后端进行的至少一些动作可以由在应用后端313中运行的应用执行。
[0043]
iot设备341和342中的每个iot设备和/或包括iot支持服务351的设备和/或应用后端313可以包括图2的计算设备200的示例。术语“iot支持服务”不限于一个特殊类型的iot服务,而是指在供应之后iot设备针对至少一个iot解决方案或iot服务而与之通信的设备。也就是说,在整个说明书和权利要求书中使用的术语“iot支持服务”对于任何iot解决方案是通用的。术语“iot支持服务”是指所供应的iot设备与之通信的iot解决方案/iot服务的部分。在一些示例中,iot设备与一个或多个应用后端之间的通信伴随iot支持服务作为中介发生。图3和说明书中对图3的相应描述示出了用于说明性目的的示例系统,其不限制本公开的范围。
[0044]
iot设备341和342中的一个或多个iot设备可以包括设备控制器345,设备控制器345可以操作以控制iot设备。每个设备控制器345可以包括多个执行环境。设备控制器345可以是多核微控制器。在一些示例中,设备控制器345是具有多个核心的集成电路,诸如至少一个中央处理单元(cpu)和至少一个微控制器(mcu)。
[0045]
网络330可以包括一个或多个计算机网络,包括有线和/或无线网络,其中每个网络可以是例如无线网络、局域网(lan)、广域网(wan)和/或诸如互联网等全球网络。在一组互连的lan上,包括基于不同架构和协议的lan,路由器用作lan之间的链路,以使消息能够从一个发送到另一个。此外,lan内的通信链路通常包括双绞线或同轴电缆,而网络之间的通信链路可以利用模拟电话线、包括t1、t2、t3和t4的全部或部分专用数字线、综合业务数字网(isdn)、数字用户线(dsl)、包括卫星链路的无线链路、或本领域技术人员已知的其他
通信链路。此外,远程计算机和其他相关电子设备可以经由调制解调器和临时电话链路被远程连接到lan或wan。网络330可以包括各种其他网络,诸如使用本地网络协议(诸如6lowpan、zigbee等)的一个或多个网络。一些iot设备可以经由网络330中与其他iot设备不同的网络被连接到用户设备。本质上,网络330包括信息可以在iot支持服务351、iot设备341和342以及应用后端313之间行进的任何通信方法。尽管每个设备或服务被示出为被连接到网络330,但是这并不表示每个设备与所示的每个其他设备通信。在一些示例中,所示出的一些设备/服务仅与经由一个或多个中介设备示出的一些其他设备/服务通信。此外,虽然网络330被示出为一个网络,但是在一些示例中,网络330可以改为包括可以彼此连接或可以不彼此连接的多个网络,其中一些设备被示出为通过多个网络中的一个网络彼此通信,而其他设备被示出为利用多个网络中的不同网络彼此通信。
[0046]
作为一个示例,iot设备341和342是旨在利用由iot支持服务351提供的iot服务的设备。
[0047]
对诸如iot设备341和342等iot设备的设备更新可以在各种时间发生。例如,可以更新iot设备上的应用、其他软件和/或固件。可以经由网络330将更新从iot支持服务(例如,iot支持服务351或应用后端313等)传送给iot设备(例如,341和342)。iot设备可以被配置为执行更新,并且以包括特定优先级排序的存储器高效的方式执行针对更新的暂存。
[0048]
系统300可以包括比仅以示例方式示出的图3所示的更多或更少的设备。
[0049]
说明性设备
[0050]
图4是示出设备控制器445的示例的框图。设备控制器445可以作为图3的设备控制器345的示例被采用。设备控制器445可以包括安全复合体451、cpu 453、直接存储器访问(dma)块454、信任区(tz)dma块455、闪存456、无线电块457、安全静态随机访问存储器(sram)458、接口459、mcu 461、mcu 462、主要高级可扩展接口(axi)总线463、辅助axi总线464、桥接器465和466、每个外围设备467的到高级外围设备总线(apb)桥接器的axi、接口471、gpio 472、模数转换器(adc)473、实时时钟(rtc)474和性能计数器475。
[0051]
在一些示例中,设备控制器445使其中包括设备控制器445的设备能够作为iot设备(诸如图3的iot设备341或342)进行操作。在一些示例中,设备控制器445是多核微控制器。在一些示例中,设备控制器445运行高级别操作系统。在一些示例中,设备控制器445可以具有至少4mb的ram和至少4mb的闪存,并且可以是单个集成电路。在一些示例中,设备控制器445不仅提供网络连接性,而且还提供各种其他功能,包括硬件和软件安全性、受监测的操作系统、密码功能、外围设备控制、遥测等。另外,设备控制器445可以包括:用于允许以安全方式引导设备控制器445的技术,用于允许安全地更新设备控制器445的技术,用于确保适当的软件在设备控制器445上运行的技术,用于允许设备控制器445作为iot设备正确运行的技术等。
[0052]
在一些示例中,安全复合体451包括核心安全复合体(csc),该csc是设备控制器445中的硬件信任根。在一些示例中,核心安全复合体被直接连接到安全复合体451中的安全mcu。在一些示例中,安全复合体451中的安全mcu具有非常高的可信度,但是不如安全复合体451中的核心安全复合体可信。在一些示例中,安全复合体451在被引导时带动整个系统。
[0053]
在一些示例中,cpu 453运行高级别操作系统。在一些示例中,cpu 453具有两个独
立的执行环境:“安全世界”执行环境和“正常世界”执行环境。术语“安全世界”被广泛用于指代可信环境,并且不限于特殊安全功能。在某些示例中,cpu 453的“安全世界”执行环境也是系统的可信计算库的部分。例如,在一些示例中,cpu 453的“安全世界”执行环境可以不受限制地访问重新编程的硬件保护机制,诸如在一些示例中为防火墙。然而,在一些示例中,cpu 453的“安全世界”执行环境不具有对安全复合体451的核心安全复合体的内部的访问权,并且依赖于针对特殊的安全敏感操作的安全复合体451的安全mcu。
[0054]
无线电块457可以提供wi-fi通信。主axi总线463和辅axi总线464可以是连接所示出的组件的总线。在一些示例中,桥接器465、466和467桥接所示出的组件。rtc块474可以作为实时时钟来操作。在一些示例中,设备控制器345中的所有组件可以从rtc块474读取,但是并非所有组件都具有对rtc块474的写入访问权。设备控制器445可以包括各种形式的存储器,包括闪存和sram,诸如闪存456和安全sram 458。
[0055]
在一些示例中,io子系统1 461和io子系统2 462是用于通用i/o连接性的i/o子系统。在一些示例中,io子系统1 461和io子系统2 462每个包括mcu。
[0056]
dma块454可以用于针对cpu 453的“正常世界”执行环境管理数据移动。信任区(tz)dma块455可以用于针对cpu 453的“安全世界”执行环境管理数据移动。在一些示例中,每个io子系统也都有其自己的dma块。每个dma块可以被配置为支持核心、外围设备、其他组件等之间的数据移动。
[0057]
每个核心可以具有双向邮箱以支持处理器间通信。性能计数器475可以被配置为对读取请求、写入请求和数据类型请求进行计数以供性能监控。在一些示例中,性能计数器475还可以被配置为测量从核心到目标(诸如从mcu 462到sram 458)的延时。
[0058]
在一些示例中,框459处的接口包括两个集成电路间声音(i2s)接口:一个用于音频输入,一个用于音频输出。在其他示例中,可以采用接口的其他配置,并且在各种示例中,框459可以包括任何合适的接口。
[0059]
在一些示例中,安全复合体451中的mcu具有非常高的可信度,但是不如安全复合体451中的核心安全复合体可信。在这些示例中,安全复合体451中的mcu控制与非常高的可信度相关联的一个或多个功能。在一个示例中,安全复合体451中的mcu针对设备控制器445和/或iot设备控制功率。
[0060]
在一些示例中,cpu 453的“安全世界”执行环境也是系统的可信计算库的部分。例如,在某些示例中,cpu 453的“安全世界”运行时(“安全世界”rt)具有不受约束的访问权以对硬件保护机制(诸如在一些示例中为防火墙)重新编程。然而,在一些示例中,“安全世界”rt不具有对安全复合体451的核心安全复合体的内部的访问权,而是依赖于针对特殊安全敏感操作的安全复合体451中的mcu。
[0061]
cpu 453的“正常世界”执行环境可以被配置为具有对诸如存储器的片上资源的有限访问权。在一些示例中,针对在该环境中运行的代码可以强制执行各种安全和质量标准(例如,相对高的标准),但是不如在安全复合体451中的mcu上运行的代码或在cpu 453的“安全世界”中运行的代码可信。
[0062]
在一些示例中,mcu 461和462不如安全复合体451中的mcu可信,并且不如cpu 453可信。在一些示例中,无线电块457可以包括核心,该核心在一些示例中可以是mcu。无线电块457可以提供wi-fi功能以及到互联网和云服务(诸如iot服务)的连接性。在一些示例中,
无线电块457可以经由蓝牙、近场通信(nfc)、zigbee、长期演进(lte)和/或其他连接性技术来提供通信。在一些示例中,无线电块457中的核心不具有对未加密秘密的任何访问权,并且不能够损害cpu 453的执行。
[0063]
在一些示例中,每个独立执行环境由单个软件组件来管理,该单个软件组件在被称为执行环境的“父级”的单独的执行环境中执行。在这样的示例中,一个例外可以是:硬件信任根(在该示例中为安全复合体451的核心安全复合体)没有父级。在一个特殊示例中,每个父级在与其管理的环境至少一样可信的环境中执行。在其他示例中,可以采用其他合适的安全手段。管理操作可以包括:引导和恢复目标环境,监测和处置目标环境中的重置,以及针对目标环境配置访问策略。在一些情况下,某些管理操作由除了父级以外的组件执行。例如,在一些示例中,cpu 453的“正常世界”是管理mcu 461和462但是从cpu 453的“安全世界”接收协助的环境。
[0064]
例如,在一些示例中,安全复合体451的mcu对cpu 453的“安全世界”rt进行管理,cpu 453中的“安全世界”rt中的组件对cpu 453的“正常世界”os进行管理,cpu 453的“正常世界”os中的组件对cpu 453的“正常世界”用户模式进行管理,并且cpu 453的“正常世界”用户模式服务对mcu 461和462以及无线电块457中的核心进行管理。
[0065]
在一些示例中,不仅独立执行环境由来自更可信的执行环境的软件组件进行管理,而且不同的功能被指派给不同的独立执行环境,其中较敏感的功能被指派给较可信的独立执行环境。在一个特殊示例中,不如所指派给的独立执行环境可信的独立执行环境对该功能的访问权受限。以这种方式,在一些示例中,独立执行环境基于信任的层级来实现纵深防御。
[0066]
例如,在一些示例中,安全复合体451的核心安全复合体在层级的顶部,并且被指派给秘密(例如,加密密钥),核心安全复合体451中的安全mcu是层级中的下一个并且被指派用于控制功率,cpu 453的安全世界rt是层级中的下一个并且被指派用于对实时时钟(rtc)进行存储和写入访问,cpu 453的普通世界os是层级中的下一个并且被指派给wi-fi,cpu 453的普通世界用户模式应用是层级中的下一个并且被指派给应用,并且mcu 461和462在层级的底部并且被指派给外围设备。在其他示例中,功能以不同的方式被指派给独立的执行环境。
[0067]
在一些示例中,例如,在针对它们处置的软件实现支持的时候,除了层级的底部(即,最不可信)级别之外,信任层级的每个级别通过接受或拒绝来自较不可信级别的请求而具有控制权,并且能够对来自较不可信级别的请求进行速率限制或审核,并且能够对来自较低级别的请求进行验证,以例如确保请求正确且真实。另外,如前所述,在一些示例中,除了顶部(即,最可信)级别之外,层级的每个级别都具有父级,该父级负责管理较低(即,较不可信)级别,包括监测较低级别的软件是否正常运行。
[0068]
设备控制器455的一些示例可以是多核微处理器,其包括:例如至少一个cpu和至少一个微控制器,以及如前所述的具有多个存储体的闪存。在一些示例中,多核处理器可以是具有多个核心的集成电路。在一些示例中,多核处理器可以用于为所连接的设备提供功能。在一些示例中,设备控制器455可以提供与所连接的设备的网络连接,并且还可以提供各种其他功能,诸如硬件和软件安全性、受监测的操作系统、密码功能、外围设备控制、遥测等。另外,设备控制器455可以包括:用于允许以安全方式引导设备控制器455的技术、用于
允许安全地更新设备的技术、确保“适当的”软件在设备上运行的技术、用于允许设备作为iot设备正确运行的技术等。安全复合体451可以包括设备控制器455的硬件信任根,作为由设备控制器455提供的安全功能的基础。
[0069]
在一些示例中,闪存456是外部nor闪存,其包括闪存控制器和并行的双四通道串行公共接口(qspi)nor闪存设备(在该示例中为两个存储体),其中每个闪存存储体是经由单独的通道被访问的单独的集成电路。然而,本公开不限于此,并且可以采用任何合适的存储器配置和/或合适的存储器组。
[0070]
在正常引导期间,处理器可以以安全复合体开始的安全方式引导,该安全复合体包括用于设备控制器455的硬件信任根。在一些示例中,从rom读取第一引导加载器,并且公钥可以由安全复合体451使用,以验证第一引导加载器已经被适当地数字签名。在一些示例中,验证第一引导加载器的签名是在硬件中执行的加密操作。在一些示例中,直到且除非验证了第一引导加载器的数字签名,否则不会加载第一引导加载器,并且对所有闪存存储体的访问被阻止。在一些示例中,一旦第一引导加载器的签名被验证,就加载第一引导加载器,并且对所有闪存存储体的访问被允许。在一些示例中,除了对第一引导加载器的验证以外,可能还需要进一步的验证,以便授予对所有闪存存储体的访问权。这可以用来防止例如加载具有漏洞的有效较旧代码。
[0071]
在一些示例中,为了允许访问以允许存储体的验证可以如下进行。安全复合体451可以读入不受限制的存储体之一的部分,诸如在一些示例中的第一存储体。在一些示例中,闪存的该部分可以是16kb、52kb等。然后,安全复合体451中的硬件块可以将非受限闪存存储体的所加载的部分与特殊硬件熔丝进行比较,除非所加载的部分与熔丝匹配,否则验证不成功。在一些示例中,硬件钥还可以用于验证代码是可信代码。利用安全复合体451中的硬件块针对硬件熔丝比较闪存的非受限部分的部分可以用于防止加载先前有效但现在较旧的代码具有漏洞。随着改变闪存的对应的非限制部分,熔丝可以被烧断,以防止这样的较旧的代码随后被验证以及防止访问存储在闪存的安全部分中的机密,其中闪存的对应的非限制部分是针对将要与被更新的熔丝进行匹配的硬件熔丝而将要被检查的部分。
[0072]
在一些示例中,闪存456是单图像存储器。在一些示例中,闪存456具有一个存储体。在一些示例中,闪存456在存储器中具有两个存储体和/或其他间隔,但是仍然是其中间隔不可被访问的单图像存储器。
[0073]
在一些示例中,利用如本文中描述的擦除编码方案的示例来保护闪存456免受损坏。尽管本文中关于闪存456描述擦除编码方案,但是擦除编码方案也可以与任何合适的存储器或数据的集合一起使用。在一些示例中,本文中描述的擦除编码方案对于具有单图像存储器并且没有足够空间存储完整备份的嵌入式设备可能是特别有益的,对于该单图像存储器,希望其防止大量连续损坏、意外覆盖等。在一些示例中,擦除编码方案与闪存一起使用以防止闪存损坏。
[0074]
在一些示例中,针对每个不同的应用和/或每片块(piece)软件使用不同的擦除编码方案,来对各个应用和/或固件的片块进行动态擦除编码,其灵活性基于每个应用和/或正在编码的固件的片块的大小。
[0075]
在一些示例中,擦除编码方案可以被使用,其中基于固定大小的连续条带对存储器进行擦除编码,如果存储器大小不能被条带大小均分,则可能留下部分条带。
[0076]
在一些示例中,可以使用擦除编码方案,其中基于固定大小的非连续条带对存储器进行擦除编码,如果存储器大小不能被条带大小整除,则可能留下部分条带。例如,在一些示例中,擦除编码方案可以以“棋盘”模式使用条带,其中每个数据块除以条带数,例如,以对所有其他条带中的条带内的数据块进行条带化。
[0077]
以这种方式,在一些示例中,在n个条带的情况下,大小为s的第一数据块被划分为n个条带,其中第一s/n数据属于第一条带,下一s/n数据属于第二条带,以此类推,其中第二数据块的第一s/n数据是第一条带的下一s/n数据,以此类推。在另一示例中,大小为s的第一数据块被划分为n个条带,第一s/n数据可以属于第一块,并且第二块数据被绑定(cording)为条带大小*块大小*条带编号。
[0078]
例如,在一个示例中,具有16mb的存储器,其中8mb存储器的专用于应用,可以使用8k数据块用64kb条带对8mb的应用进行擦除编码。因此,在该示例中,存在8mb/64kb的条带,即133个条带。因此,在该示例中,第一条带以第一8mb/(8kb*133)数据开始,第二条带以第二8mb/(8kb*133)数据开始,以此类推。在该示例中,在133个条带中的每个条带的第一块之后,第一条带随后继续下一8mb/(8kb*133)数据,以此类推。在一些示例中,计算每个条带的偏移,并且基于所计算的偏移将条带缝合在一起,然后将条带输入到擦除编码算法。以这种方式,在该示例中,存储器可以从最多连续1mb损坏中恢复。但是,可以从中恢复的损坏量取决于所生成的擦除编码块的数目(例如,所选择的容错模型)。同样,在一些示例中,虽然进行了调节以防止存储器连续部分的损坏,但这并不能防止容忍随机损坏。例如,可以通过所公开的技术来防止随机损坏的一些情况。
[0079]
在一些示例中,存储经过擦除编码的每个单个数据块的哈希值或校验和。在一些示例中,校验和或哈希值没有被存储在数据本身中,而是存在单独的块哈希值分区、文件或其他跟踪哈希值数据结构。
[0080]
可以选择容错,其中较大的容错需要较大的开销。例如,在一些示例中,擦除编码算法容许每个条带两个坏块而不是一个,与该算法容许每个条带一个坏块的情况相比,具有较大的开销。在一些示例中,在容错和开销之间进行权衡。
[0081]
如果存在部分条带,例如,条带的数据少于全条带的数据,,则该部分条带可以在不同示例中以不同的方式被处置。在一些示例中,可以使用幻像块,其中剩余的块是未实际存储的零。该方案的容错性可能较低,例如,因为部分条带仅能够容忍与所选择的容错机制相关联的量的连续损坏。备选地,针对较大容错,可以保留部分条带的完整备份。
[0082]
在一些示例中,在擦除码生成中,输入是正在被进行擦除编码的存储器的量、要使用的擦除编码方案、条带大小、块大小、如何处置任何部分条带、以及容错(即,每个条带可以恢复多少坏块)。
[0083]
在一些示例中,在接收到输入之后,对于所有不存在部分条带的数据,对条带的数目进行计数,并且基于所计算的偏移如上所述生成每个条带,以生成每个条带并且将条带提供给擦除编码算法。如果存储器是可字节寻址的nor闪存,则可以基于所计算的偏移直接使用指针来读取地址。
[0084]
在一些示例中,还计算哈希值。在一些示例中,从另一机制计算哈希值,并且从另一机制被计算和被存储的哈希值可以利用擦除编码重新使用。
[0085]
上文讨论了擦除编码生成过程。如果发生损坏,则可以基于擦除编码修复过程使
用所生成的擦除码来修复损坏的数据。可以基于在存储器中检测到的损坏来发起修复过程,这在各种示例中可以以各种方式发生。在一些示例中,对于文件或可执行二进制以一些方式检测到损坏(诸如经由哈希值或签名验证),这可能导致发起修复过程。
[0086]
在一些示例中,在修复过程中,首先通过针对哈希值检查块来确定坏块。在一些示例中,沿着已知损坏的闪存范围,对于闪存范围中的每个块,对该块所在的条带进行计算,找到该条带中的所有地址,并且对于这些块,针对已知的哈希值来检查这些块的哈希值。在一些示例中,对于每个不匹配的哈希值,针对该条带声明对应的块是坏的。
[0087]
接下来,在一些示例中,将坏块的数目与容错进行比较。如果坏块为零个,则在一些示例中,该过程继续到下一条带。在一些示例中,如果存在一个或多个坏块,并且坏块的数目大于容错,则该条带将无法修复。在一些示例中,如果存在一个或多个坏块,并且坏块的数目小于或等于容错,则修复坏块,例如,通过利用条带数据和擦除编码块来调用所选择的擦除编码方案。
[0088]
在一些示例中,为了修复坏块,所填充的条带随着哪个块是坏的指示被传递通过擦除编码算法,并且针对该条带的擦除编码块的指针也被传递给该算法。在一些示例中,该算法然后返回经修复的块。在一些示例中,重新计算修复块的哈希值,并且进行确定该哈希值是否与针对该块的所存储的哈希值相匹配。在一些示例中,如果存在不匹配,则修复失败或所存储的块哈希值是坏的。
[0089]
在一些示例中,范围中的每个块以这种方式被修复,或因为其没有损坏被跳过,。一旦完成,在一些示例中,可以进行确认该范围是否仍然损坏。例如,在一个示例中,基于不匹配的签名发现范围损坏,可以将该范围发送给最初执行签名检查的实体,然后该实体可以检查以确定范围是否仍然损坏,例如通过重新运行签名检查并且确认现在验证通过。
[0090]
当由擦除编码保护的存储器的数据内容改变时,擦除码也可以被更新。首先,在一些示例中,输入存储器的被改变的范围。在一些示例中,对于每个块,使用如上述用于擦除码生成的相同过程来重新生成擦除编码数据。在一些示例中,每个生成的擦除编码块被新块覆写。
[0091]
在其他示例中,将范围内的每个块与所存储的块哈希值进行比较。在这些示例中,仅哈希值不同的块的擦除编码数据才被重新生成,而这些块被覆写。在一些示例中,哈希值匹配的块被跳过,例如,如果条带内的块的数据没有改变,则条带的擦除编码块不被更新。
[0092]
设备控制器455的设备更新可能会频繁发生。例如,可以更新设备控制器455上的应用、其他软件和/或固件。更新可以由被称为图像或图像二进制文件的一组二进制文件组成。在一些示例中,每个图像二进制文件具有相关联的元数据,被称为图像元数据。在一些示例中,图像元数据可以包括图像的名称、图像的版本、签名等。在一些示例中,图像元数据存储在云中,例如,以使其是可查询的。
[0093]
在一些示例中,图像元数据也被嵌入到图像二进制本身中,例如,以确保任何图像二进制文件都是自描述的。这可以通过将元数据上传为单独的文件来实现,其中服务将图像二进制文件和元数据重新打包在一起。替代地,元数据可以预先打包在图像二进制文件内部,并且然后由服务解包。
[0094]
在一些示例中,硬件库存单元(sku)被用作描述硬件更新策略并且允许其有效实现的过程的一部分。在一些示例中,硬件sku不是单个芯片或设备的唯一标识符。相反,在这
些示例中,硬件sku唯一地标识所销售的设备的特定配置(颜色、型号、功能、国家/地区等)。在一个示例中,每个iot设备的硬件sku包括设备sku和芯片sku。在一些示例中,可以存在两个以上的描述性sku,使得三种或更多类型的sku提供具有三个或更多个级别的层次结构。芯片sku可以定义在iot设备内运行的芯片的特定类型和芯片的功能。序列号、公钥或设备id可以被用于唯一地标识芯片的单个实例。
[0095]
设备sku可以用作描述使用芯片的iot设备的类型的标识符。sku可能是由产品制造商使用的用于在其产品线中标识特定型号和配置的sku。每个设备sku可以具有一组属性,这些属性描述软件相关特征。另外,每个设备sku可以具有描述唯一芯片sku的属性,具有该设备sku的所有设备都包含该唯一芯片sku。这些属性也可以在sku注册中心的iot服务解决方案中定义和存储。这些属性还可以描述制造商用来区分iot设备模型的特征(即,洗衣机与烘干机、棕褐色与不锈钢),但是也有构成iot设备的一些细微差异(所使用的电机的硬件sku、连接到4
×
4芯片的led面板的类型)。在一些示例中,有两个sku注册表;一个用于设备sku的注册表和另一个用于芯片sku的注册表。
[0096]
发行版描述可以由设备可用的二进制内容。发行版是针对某些目标的一组连贯的图像二进制文件。在一些示例中,发行版由至少四个不同实体组成:一组图像二进制文件、单个sku、组件id和语义版本。在一些示例中,每个iot设备安装有至少两个不同的发行版。在一些示例中,组件id收集应用于单个组件的所有图像。发行版可以是连贯的,因为对发行版进行了预先测试,以确保发行版中的所有二进制文件都可以一起工作。
[0097]
在一些示例中,直到部署了发行版之后,发行版才对iot设备可用。在一些示例中,部署将一组发行版与一组约束捆绑在一起,这些约束定义部署所针对的设备的属性。在一些示例中,在注册和激活部署之后,在查询中如何最终计算哪些发行版被用作于iot设备。
[0098]
在一些示例中,为了开始更新过程,软件工程师将新的图像二进制文件从本地机器注册并且上传到与iot设备的iot支持服务相关联的iot更新服务。在一些示例中,应当对上传的图像二进制文件进行签名,因为仅在对图像二进制文件进行了签名的情况下才会验证图像二进制文件。在一些示例中,图像签名允许将每个图像二进制文件认证为由可信实体签名。
[0099]
在一些示例中,软件工程师还可以围绕特定sku定义新发行版,并且向iot更新服务注册它们。工程师还可以能够递增发行版版本号,为发行版的下一版本编写一组图像二进制文件,确认所编写的图像二进制文件满足由每个图像的元数据提供的所有约束,并且接收针对兼容约束的图像二进制文件的建议。对于任何给定发行版,软件工程师都可以能够使用查询工具来查看当前使用该发行版、用作该发行版作为备份或该发行版对其可用的iot设备集合。此外,工程师可以能够查询特定设备组,并且确定该组当前正在使用的一组部署和发行版。
[0100]
在定义了新发行版之后,工程师就可以通过定义部署将该发行版定位到一组机器。工程师可以定位单个sku(跨发行版),也可以定位依赖于最近被更新的图像二进制文件的所有sku。在部署被激活之后,当iot设备接下来检查更新时,它可以可用于iot设备。在正常情况下,iot设备可以以某种规律性节奏(例如,每周一次)请求服务,以向其发送其当前应当具有的发行版。工程师还可以主动请求设备立即发出该请求,而不是按规律性节奏。
[0101]
在一些示例中,云服务能够发起发行版的升级和降级。在一些示例中,云可以强制
iot设备回滚到旧发行版。如以下更详细讨论的,在一些示例中,iot设备包括先前更新的备份副本。在一些示例中,云可以强制iot设备降级到作为备份副本存储在iot设备上的先前的更新发行版。在一些示例中,没有足够的空间来存储未压缩的备份副本,并且最后一次的已知良好版本的备份副本以压缩状态被存储。
[0102]
在一些示例中,当经由部署使发行版可用于一组iot设备时,将不会同时使其可用于该组中的所有iot设备。相反,在这些示例中,每个发行版以滚动部署方式可用。例如,滚动部署可以开始于部署到目标iot设备的一小部分。当时更新成功完成时,能够用于部署的iot设备数将增加。
[0103]
在一些示例中,一个或多个iot设备每个包括守护程序(daemon),该守护程序向云服务(例如,iot支持服务)发送关于iot设备是否有当前可用的新设备更新的查询。在一些示例中,守护程序被包括在iot设备的nw中。接下来,iot设备上的nw守护程序可以从云服务接收与iot设备更新有关的信息。在一些示例中,该信息包括iot设备应当有的发行版的指示,并且包括与所指示的发行版相关联的元数据(诸如语义版本)和与所指示的发行版中的每个图像二进制文件相关联的元数据(诸如id、版本等)。在一些示例中,在iot设备与云服务之间的通信中使用安全传输。
[0104]
在一些情况下,在接收到与iot设备的更新有关的指示时,iot设备验证更新。在一些示例中,iot设备通过验证更新是否被正确签名来验证更新。在一些示例中,iot设备还通过将用于更新的待安装图像二进制文件与iot设备中已经安装的图像二进制文件进行比较来确定是否应当下载新版本。在一些示例中,然后iot设备确定应当从云服务下载哪些图像二进制文件以最终作为更新过程的一部分来被安装。在一些示例中,对于iot设备确定应当从云服务下载的每个图像二进制文件,守护程序都会向云服务发送下载图像二进制文件的对应请求。在一些示例中,云服务响应于对每个图像二进制文件的位置的请求而将每个下载的位置发送给守护程序,然后守护程序向所指示的位置发送请求,以下载每个图像二进制文件。
[0105]
在一些示例中,然后,iot设备从云服务接收所请求的图像二进制文件。在一些示例中,iot设备上没有足够的ram来将图像二进制文件存储在存储器中,因此,代替地,每个图像二进制文件都将被流式传输到iot设备。由iot设备接收的图像二进制文件的总集合包括发行版。在一些示例中,在云服务与iot设备之间使用安全传输。此外,在一些示例中,由于没有足够的空间来存储未压缩版本,因此下载更新的压缩版本。
[0106]
在一些示例中,在执行更新之前,对更新进行暂存(stage)。暂存可以是指在更新的实际安装之前下载更新并且将更新放置在其需在的适当分区中的位置。在空间不足以存储整个更新的情况下以及在存在复杂的优先级排序问题的情况下,处理暂存可能具有挑战性。在一些示例中,暂存以特定方式执行并且具有多个优先级排序级别。暂存将在下面详细讨论。
[0107]
在一些示例中,作为更新过程的一部分,在更新完成之后,可以以某种方式接收或生成指示应当存在的软件的列表。该列表可以在暂存和更新过程中被使用。在一些示例中,该列表是iot设备从云服务接收的清单,其中该清单是从云服务提供给iot设备的列表,该清单已经被签名,并且该清单是更新完成之后应当存在的软件的列表,其中软件经由诸如图像id等标识符被标识。在其他示例中,该列表以某种其他方式被接收或生成。
[0108]
设备控制器445和对应闪存可以被划分为多个分区。在一些示例中,分区是物理分区,而在其他示例中,分区是逻辑分区。在图4所示的设备控制器455的示例中,分区是物理分区,包括固件分区、os分区和应用分区。在其他示例中可以采用其他合适的分区。
[0109]
在一些示例中,分区以原子方式被更新。在一些示例中,“以原子方式”更新分区表示将分区作为单个单元进行更新,而不是一次完成对分区的一部分的更新,并另一次完成对分区的另一部分的更新。在一些示例中,特别是在存在分区间依赖性的情况下,分区可以以特定顺序以原子方式更新,以确保新近更新的分区在已更新功能上不依赖于尚未更新的另一分区上的依赖性。在一些示例中,在每个分区以原子方式升级之后,升级完成,在其中需要基于分区间依赖性的顺序的情况下,原子的分区升级以适当的顺序进行。
[0110]
在一些示例中,使用分区表来确保分区升级可容忍电源故障和/或其他故障。在一些示例中,每个分区中有两个分区表,一个主分区表和一个备份分区表。在一些示例中,存在两个表,因为如果在写一个分区表时发生电源和/或其他故障,则另一分区表仍然有效。在一些示例中,每个分区表具有针对在该分区上的每个图像的条目,并且每个条目包括关于该图像的信息,诸如在一些示例中,图像在闪存中的偏移。该信息还可以包括图像的状态,包括图像是否已经被安装。在一些示例中,表使用某种机制(诸如哈希)来确定表是一致的还是损坏的。
[0111]
在一些示例中,以原子方式更新分区可以如下完成。
[0112]
在针对分区的安装已经被暂存之后,将已更新版本写入分区。接下来,验证已更新版本。在验证通过已更新版本之后,将当前分区表复制到存储器中。将指向原始版本的原始条目删除,并且然后将指向当前版本的新条目添加到副本中。此时,副本现在是已更新的分区表。然后,将已更新的分区表写入备份分区表。然后,在下次启动时,已更新的分区表被写入主分区表。
[0113]
接下来,执行引导健康检查。如果引导健康检查成功,则分区更新完成。如果引导健康检查失败,则执行以下动作。如果主分区表损坏,则用备份分区表覆写主分区表。如果备份分区表损坏,则用主分区表覆写备份分区表。如果主分区表和辅分区表均未损坏,但主分区表和辅分区表彼此不同,则表明在主分区表和辅分区表的写入之间存在电源故障和/或其他故障,并且因此,然后用备份分区表覆写主分区表。如果主分区表和备份分区表均损坏,则可以通过其他方法(诸如擦除编码)来校正分区表,如下面更详细地讨论的,否则升级失败。
[0114]
上面的方法描述了当有足够的可用空间用于已更新版本时图像更新的示例。如果没有足够的空闲空间用于已更新版本,则可以首先执行以下步骤。
[0115]
首先,使用存储器分配器确定分区中的闪存中的每个图像的偏移。接下来,在存储器中创建虚拟布局。虚拟布局被用于确定闪存中是否有足够的总空间,但是空闲空间是碎片的。在一些示例中,如果闪存中没有足够的空间,即使考虑到碎片空间,在这种情况下,更新也会失败。
[0116]
然而,如果在考虑到碎片空间时有足够的空间,则可以将未更新的图像复制到备份分区。接下来,可以将空表写入闪存、写入主分区表和备份分区表两者。如果在写入空表之后发生电源和/或其他故障,则安装可以在第一次之后简单地从中断处恢复。
[0117]
接下来,可以将未更新图像与待更新的新图像一起复制回闪存中,从而将图像紧
密封装。然后,这些步骤可以照常进行。
[0118]
尽管以上讨论了在空闲空间不足时使用存储器分配器,但是在一些示例中,存储器分配器跟踪在每种情况下可用的空闲空间。
[0119]
上面的讨论描述了一种容许电源和其他故障的更新方法。在一些示例中,还可以通过擦除编码来保护分区表免受损坏。可以对每个分区表进行哈希处理,并且哈希可以用于检测对分区表的损坏。在一些示例中,为了以防止故障和损坏的方式来升级分区,还以正确的顺序来更新擦除编码块。
[0120]
同样容忍损坏的更新方法的一个示例如下。
[0121]
首先,安装被暂存。接下来,将主分区表和备份分区表都修改为要安装以添加关于正在进行安装的指示。在一些示例中,该指示是主分区表和备份分区表中的“正在安装”条目。“正在安装”条目包括在安装期间被修改的数据范围。
[0122]
在一些示例中,在将正在安装的条目添加到两个表中之后,写备份分区表,使得备份分区表包括用于安装目标等的条目。在一些示例中,接下来,重新生成用于备份分区表的擦除代码,并且为备份分区表生成哈希。在一些示例中,接下来,写主分区表,重新生成主分区表的擦除代码,并且为主分区表生成哈希。另外,在一些示例中,为分区中的每个块生成哈希,并且将其存储在闪存中跟踪块哈希的单独区域中。
[0123]
在一些示例中,如果在任何时候成功写入备份分区而不是主分区表(如主分区表和备份分区表不匹配所指示的),则如果有正在安装的条目,则在正在安装的条目中指定的数据范围内的、由正在安装的条目描述的所有擦除编码块都将被重新生成,并且然后分区表的擦除编码块也将被重新生成。
[0124]
在一些示例中,接下来,如上所述,如果没有用于已更新版本的足够的空闲空间,则可以执行上述步骤。在一些示例中,在执行这些步骤或跳过这些步骤之后,如果存储器中已经有足够的空闲空间,则将已更新版本写入分区。在一些示例中,接下来,验证已更新版本。
[0125]
在一些示例中,在验证通过已更新版本之后,针对图像来更新擦除编码块。在一些示例中,哈希也被更新。在一些示例中,接下来,从两个分区表中删除正在安装的条目。
[0126]
在一些示例中,接下来,将当前分区表复制到存储器。在一些示例中,从副本中删除分区表的原始版本,并且然后将当前版本添加到副本中。在一些示例中,此时,副本现在是已更新分区表。在一些示例中,然后,将已更新分区表写入备份分区表。在一些示例中,然后,更新用于备份分区表的擦除编码块。在一些示例中,然后,更新备份分区表的哈希。
[0127]
在一些示例中,在设备下次引导之后,将已更新分区表写入主分区表。
[0128]
在一些示例中,接下来,执行引导健康检查,其中在执行引导健康检查之后,步骤如先前示例所述进行。如果主分区表和备份分区表均损坏,则可以使用某些其他修复方法,诸如擦除码修复等。
[0129]
在一些示例中,然后更新用于备份分区表的擦除编码块。在一些示例中,然后更新备份分区表的哈希。
[0130]
如上所述,在一些示例中,在更新之前执行暂存。在一些示例中,以多种方式对暂存进行优先级排序。暂存可以被组织为按优先级排序的优先级分组,使得首先对具有最高优先级的优先级分组整体进行暂存,然后再前进到下一个优先级分组,然后,在进行到再下
一个优先级分组之前,对次最高优先级分组整体进行暂存,直到每个优先级分组被暂存。,以此类推,直到每个优先级分组被暂存。
[0131]
在一些示例中,优先级分组可以包括分区,并且还可以包括独立于分区的优先级分组。分区可以包括纵深防御层级中的某些或全部信任级别,并且优先级分组的优先级可以与纵深防御层级中的信任级别相同。
[0132]
在一些示例中,优先级分组可以包括:可信密钥库,作为具有最高优先级别的优先级分组;引导加载程序,作为具有第二优先级别的优先级分组;以及作为分区的其余优先级分组,其中分区的优先级与对应信任级别中的信任的优先级排序相同。例如,在一些示例中,作为与信任层相对应的分区的优先级分组的优先级高于作为与信任度较低的信任层相对应的分区的优先级分组。
[0133]
在一些示例中,优先级分组可以至少部分基于依赖性。例如,在一些示例中,软件级别可以依赖于更受信任的软件层。在一些示例中,元数据将这样的依赖性描述为“依赖于”或“提供”。也就是说,在一些示例中,依赖于另一软件的软件被描述为该软件“依赖于”另一软件。相反,在一些示例中,被软件“依赖于”的软件被描述为“提供”依赖于该软件的软件。在一些示例中,“提供”层总是在“依赖”层之前被更新。在一些示例中,由于较高优先级层在较低优先级层之前被暂存,因此优先级层确保了这是正确的。
[0134]
在一些示例中,优先级分组及其它们相对于彼此的优先级被定义在策略文件中。在一些示例中,策略文件可以被动态地更新,使得例如优先级分组相对于彼此的优先级可以被动态地更新。
[0135]
每个优先级分组可以如下被暂存。对于正在被暂存的优先级分组,将指示一旦更新完成就应当存在的软件的列表与存储器中当前存在的软件进行比较。基于比较生成缺少的安装目标的列表,其中该列表包括在被暂存的优先级分组中存储器中当前不存在的软件或相对于存储器中当前存在的软件需要被更新的软件版本。缺少的目标是指应当被下载但尚未下载的目标。例如,缺少的安装目标是尚未下载的安装目标。在目标被下载之后,其不再是缺少的。
[0136]
然后,可以基于比较生成清除目标的列表,其中对于当前优先级分组,清除目标包括存储器中当前存在但一旦更新完成就不在应当存在的软件列表中的软件。如果待安装软件已经存在,则在一些示例中,安装程序可以通过简单地不生成安装目标或清除目标来保留现有安装。
[0137]
然后,可以诸如通过下载来获取与安装目标相对应的软件。在一些示例中,所获取的软件只有经过验证才能被信任。在一些示例中,目标被验证之后,就将验证其签名。如果签名是有效的,则在一些示例中,确定目标是否是具有正确优先级的缺少的安装目标。如果不是,则在一些示例中,丢弃目标。如果目标是具有正确优先级的缺少的安装目标,则在一些示例中,目标将其类型从缺少的安装目标改变为安装目标(因为根据定义,该目标不再缺少)。
[0138]
在一些示例中,然后,基于安装目标,引起更新当前优先级分组的软件。另外,可以删除清除目标。在一些示例中,一旦完成安装,就从存储器中删除安装目标,因为可能没有足够的存储器来一次暂存整个更新。
[0139]
一旦优先级分组的安装完成,或者一旦安装目标被获取,就可能需要重新引导。例
如,在一些示例中,某些优先级分组的更新安装可能需要重新引导,而其他优先级分组的更新安装可能不需要重新引导。在这些示例中,响应于需要在完成时重新引导的优先级分组的更新安装,设备将在下一优先级分组的暂存之前被重新引导。在一些示例中,安装目标的获取可能需要针对某些优先级分组的重新引导,而其他优先级分组的安装目标的获取可能不需要重新引导。
[0140]
在各个示例中,该暂存可以被更改并且可以包括其他步骤,例如,针对回滚目标的“缺少的回滚目标”,包括回滚到最后的已知良好状态,以允许测试应用和/或用于其他原因。
[0141]
例如,在一些示例中,对于还包括回滚到最后的已知良好状态的过程,暂存过程可以如下进行。作为暂存优先级分组的一部分,在确定缺少的安装目标之前,为优先级分组确定缺少的回滚目标,使得针对当前优先级分组被安装的每个软件都存在缺少的回滚目标。在生成缺少的回滚目标之后,可以生成缺少的安装目标。在一些示例中,优先级分组的缺少的回滚目标在下载缺少的安装目标之前被完整下载。这是按条目类型的优先级排序的示例。在一些示例中,执行多个优先级排序级别。缺少的回滚目标和缺少的安装目标是条目类型的两个示例,其中给定优先级分组的缺少的回滚目标条目类型优先于相同优先级分组的缺少的安装目标。以这种方式,在一些示例中,多个优先级排序级别包括按优先级分组的优先级排序和按条目类型的优先级排序。
[0142]
在一些示例中,就像缺少的安装目标一样,对于所下载的缺少的回滚目标,所下载的软件只有经过验证才能被信任。缺少的回滚目标的验证可以包括将图像的身份与缺少的回滚目标中的预期身份进行比较。如果该身份不是预期身份(即,组件id和图像id不匹配),则拒绝图像。在一些示例中,一旦缺少的回滚目标被验证,就验证其签名。如果签名有效,则在一些示例中,确定缺少的回滚目标是否是具有正确优先级的缺少的回滚目标。在一些示例中,如果不是,则丢弃目标。在一些示例中,如果目标是具有正确优先级的缺少的回滚目标,则目标将其类型从缺少的回滚目标改变为回滚目标(因为根据定义,目标不再缺少)。在一些示例中,一旦下载了特定优先级分组的所有回滚目标,就开始以上述方式下载或以其他方式被获取安装目标。如上所述,在一些示例中,目标被压缩。
[0143]
在一些示例中,作为正常过程的例外,如果特定当前优先级分组没有改变,但是该当前优先级分组之前的优先级分组发生了改变,则对于当前优先级分组,当前组的每个回滚目标将暂时被转换为缺少的回滚目标。以这种方式,在这些示例中,这些缺少的回滚目标被重新下载,并且然后再次被转换为回滚目标。这样可以避免碎片。在这种情况下,没有安装目标,因此不进行安装工作。
[0144]
在一些示例中,还可以修改暂存过程以适应测试软件。
[0145]
例如,在一些示例中,某些应用(诸如测试软件)应当被标记为临时应用。例如,这可以包括已经被加载到工厂的设备中并且永远不会通过云进行更新的测试软件。制造商可以将这样的应用标记为临时。如果某个应用标记被为临时应用,则在一些示例中,对于正在进行的更新,临时应用不需要回滚目标,而是被简单地清除。因此,在一些示例中,在暂存期间,标记被为临时的应用没有回滚目标,而是被标记为清除目标。
[0146]
如果稍后需要回滚到先前的已知良好状态,则在一些示例中,回滚目标被转换为安装目标,然后运行安装过程。在一些示例中,基于依赖性而使用级联回滚。在级联回滚中,
如果要回滚特定层,则必须回滚当前层所依赖的层(因为回滚会破坏依赖性),然后,如果该层依赖于另一层,则该另一层必须被回滚(因为回滚会破坏依赖性),以此类推。
[0147]
说明性过程
[0148]
为了清楚起见,根据由系统的特殊设备或组件以特殊顺序执行的操作来描述本文中描述的过程。然而,应当注意,其他过程不限于所陈述的序列、设备或组件。例如,某些动作可以以不同的顺序执行,并行地执行,被省略,或者可以由附加的动作或特征来补充,无论本文中是否描述了这样的顺序、并行性、动作或特征。同样,可以将本公开中描述的任何技术结合到所描述的过程或其他过程中,而不管该技术是否结合过程进行了具体描述。所公开的过程还可以在其他设备、组件或系统上或由其他设备、组件或系统执行,无论本文中是否描述了这样的设备、组件或系统。这些过程也可以以多种方式实施。例如,它们可以体现在制品上,例如,作为存储在处理器可读存储介质中的处理器可读指令,或作为计算机实现的过程来执行。作为备选示例,这些过程可以被编码为处理器可执行指令,并且经由通信介质进行传输。
[0149]
图5a-5b示出了过程(580)的示例数据流。在一些示例中,过程580由设备控制器(例如,图4的设备控制器445)执行。在其他示例中,过程580可以在其他合适的设备中执行。在一些示例中,步骤581-586包括对当前优先级分组的暂存,在对较低优先级分组进行暂存之前完成对每个较高优先级分组的暂存。
[0150]
在所示的示例中,步骤581首先发生。在步骤581,在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的安装目标的列表。如图所示,在一些示例中,步骤582接下来发生。在步骤582,在一些示例中,基于用于安装在存储器中的软件和存储器中存在的软件的列表,生成针对优先级分组的清除目标的列表。如图所示,在一些示例中,步骤583接下来发生。在一些示例中,在步骤583,将安装目标下载到存储器的备份分区。
[0151]
如图所示,在一些示例中,步骤584接下来发生。在一些示例中,在步骤584,基于安装目标,引起对存储器中的软件的更新。如图所示,在一些示例中,步骤585接下来发生。在一些示例中,在步骤585,从存储器中删除清除目标。如图所示,在一些示例中,步骤586接下来发生。在一些示例中,在步骤586,从备份分区中删除安装目标。如图所示,在一些示例中,决定步骤587接下来发生。在一些示例中,在决定步骤587中,确定是否有更多的优先级分组要暂存。如果是,则针对下一优先级分组,该过程返回到步骤581。否则,该过程然后可以前进到返回框,在返回框中,恢复其他处理。
[0152]
结论
[0153]
虽然以上“具体实施方式”描述了本技术的一些示例,并且描述了预期的最佳模式,但无论在文本中上面如何详细描述,该技术都可以以多种方式实现。细节可以在实现方面变化,同时仍然被包含在本文中描述的技术中。如上所述,在描述本技术的某些特征或方面时使用的特定术语不应当被视为暗示该术语在本文中被重新定义为限于与该术语相关联的任何特定特征、特征或方面。通常,以下权利要求中使用的术语不应当被解释为将技术限制于本文中公开的具体示例,除非“具体实施方式”明确地定义了这样的术语。因此,该技术的实际范围不仅包括所公开的示例,而且还包括实践或实现该技术的所有等效方式。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1