CN102622249B - 一种防止cpu自锁的安全启动方法 - Google Patents
一种防止cpu自锁的安全启动方法 Download PDFInfo
- Publication number
- CN102622249B CN102622249B CN201210054189.3A CN201210054189A CN102622249B CN 102622249 B CN102622249 B CN 102622249B CN 201210054189 A CN201210054189 A CN 201210054189A CN 102622249 B CN102622249 B CN 102622249B
- Authority
- CN
- China
- Prior art keywords
- firmware
- storage space
- starting method
- locking
- chip
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种防止CPU自锁的安全启动方法,在嵌入式系统中,在所述闪存中开辟一存储空间,存放多份固件镜像;系统初始化,在所述存储空间查找一份固件加载到片上系统,若查到,则判断所查到固件的正确性和完整性,并在同时满足正确性条件和完整性条件时,运行该固件;反之,则在所述存储空间查找下一份固件;若在所述存储空间查找不到固件或者查找不到正确且完整的固件,转入固件加载失败流程。依据本发明的防止CPU自锁的安全启动方法通过对固件的正确性识别和损坏与否的判断,有效地防止CPU自锁。
Description
技术领域
本发明涉及一种防止CPU自锁的安全启动方法。
背景技术
根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devicesusedtocontrol,monitor,orassisttheoperationofequipment,machineryorplants)。嵌入式系统实际上是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
嵌入式系统中的软件通常被固化,而被称为固件(Firmware)。固件担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。
早期的固件指的是写入EROM或EPROM中的程序,对终端用户是不可见的,终端用户无法或者很难改变固件,当然,一般情况下也没有必要对固件进行操作。不过随着集成电路技术的发展,升级固件也变得越来越简单,越来越没有危险,固件程序与我们通常所说的程序的区别已经越来越小。
基于以上描述,会有这样的启动方式,在嵌入式开发过程中,嵌入式系统的启动大致分为两个阶段:先是引导程序的加载,然后才是固件程序启动。
一般,为了提高固件升级安全可靠,固件被封成两个部分被分开存放,其中,用于控制器启动的固件,即引导程序固化存储在芯片ROM中,用户不可见,一般不做修改;另一部分固件程序则存储在比较廉价的外部扩展存储系统中,比如闪存存储器(NANDFlash)。
上面提到的启动方式普遍应用在嵌入式系统的出厂生产中,以及在线升级当中。虽然固件升级(又叫固件刷新,刷写,重写,烧录或者刷机)的风险越来越小,但仍然有一定的风险型。例如,如果对嵌入式系统固件版本下载错误或者固件本身读取过程中出错,都可能将导致嵌入式系统无法启动甚至无法重新进行下载固件而导致报废的情况发生。因此,固件的正确性与否或者待加载的固件损坏与否是固件在线升级或者出厂生产中需要保证的重要条件之一。显见的是,除非专业人员,固件的正确性识别将是非常困难的,固件是否损坏更无法判断。同时,这种升级通常只保留一份固件,若升级失败,只能将Flash返厂修复。
发明内容
因此,本发明的目的在于通过对固件的正确性识别和损坏与否的判断,有效地防止CPU自锁的安全启动方法。
为了实现上述目的,所采用的技术方案为:
一种防止CPU自锁的安全启动方法,在嵌入式系统中,存在片上系统和作为该片上系统的外部存储扩展的闪存,其中片上系统含有CPU模块及集成在片上的功能模块,在所述闪存中开辟一存储空间,存放多份固件镜像;
系统初始化,在所述存储空间查找一份固件加载到片上系统,若查到,则判断所查到固件的正确性和完整性,并在同时满足正确性条件和完整性条件时,运行该固件;反之,则在所述存储空间查找下一份固件;
若在所述存储空间查找不到固件或者查找不到正确且完整的固件,转入固件加载失败流程。
依据上述防止CPU自锁的安全启动方法,通过线性验证固件的完整性与正确性,在满足这些条件后再加载该固件,从而避开了固件与嵌入式系统硬件平台不对应或者固件本身损坏时可能造成的CPU死锁。同时在闪存开辟的存储空间中存放多份固件镜像,可以保持固件的使用寿命,当一份固件不能满足加载条件时,可以查找下一份固件镜像,系统启动失败的概率被降低。由于固件不需要频繁更新,也就是相应的存储空间不会频繁的擦写,该存储空间的使用寿命通常要高于闪存的其他区域。
当所有固件都不能被加载时,因其本身没有进入加载程序,使得系统能够正常退出,还可以通过对闪存上的固件进行更新,也避免了固件下载错误或者失败可能导致启动自锁。
上述防止CPU自锁的安全启动方法,固件含有固件信息描述头和固件程序,其中固件信息描述头含有描述头标志、对应固件支持的功能模块识别码,从而判断所查到固件正确性与否的步骤为:
检查读取的数据中含有描述头标志,则说明此数据为固件描述头,否则扫描下一个闪存单元;
读取该固件支持的功能模块识别码,并与片上系统中的功能模块识别码做一致性比较,若一致,则表示当前固件是正确的固件,否则查找下一份固件或在所述存储空间被遍历的条件下等待固件更新。
上述防止CPU自锁的安全启动方法,完整性验证包括对固件描述头的完整性验证和对固件程序完整性的验证,且完整性验证是在相应对象的正确性验证之后进行。
上述防止CPU自锁的安全启动方法,所述完整性验证采用CRC校验进行验证。
上述防止CPU自锁的安全启动方法,所述存储空间以块为单位存放固件,并在一个块中先存放固件信息描述头,然后是固件程序,进而依序生成预定个数个备份。
上述防止CPU自锁的安全启动方法,用于系统初始化的引导程序存放在片上的ROM中,片上RAM用于加载查找到的固件。
上述防止CPU自锁的安全启动方法,所述固件加载失败流程为启动结束,然后进入等待固件更新步骤。
附图说明
图1为依据本发明的防止CPU自锁的安全启动方法流程图(结合硬件结构和固件结构)。
具体实施方式
参照说明书附图1,为了更清楚地表达,图1所示的流程图被嵌入式系统的硬件结构和固件结构所描述,并使用虚线箭头引入固件信息描述头中存放的参量作为判断依据。
界定一个方法,当下载的固件和嵌入式系统硬件平台不对应时,仍能重新下载新的固件而不会导致相应的硬件设备报废的情况;当由于存储设备(NANDFlash,与非闪存,闪烁存储器的一种)部分损坏而导致所存放的固件损坏时,仍能重新进行在线更新。从而,能够有效地防止CPU运行不对应固件或者已损坏的固件导致系统启动时自锁的情况发生。因此,能够对固件进行安全有效地加载来完成启动过程,保证嵌入式系统的正常运行。
依据前述的内容可知,参见说明书附图1,上述界定的方法所应用的硬件架构是典型的嵌入式系统结构,一个片上系统(SoC,SystemonChip)芯片,载有ARM(AdvancedRISCMachines)核,通过片上总线或者相应通信接口连接有功能模块,以实现嵌入式系统(专用芯片)的专有功能,并连接有ROM(Read-OnlyMemory,只读存储器)、RAM(RandomAccessMemory,随机存储器)和NAND(与非,即与非闪存)控制器,用于连接外部存储器,以扩展内部存储器。图中连接的是与非闪存(NANDflash),且图中在与非闪存中开辟了一个存储空间(块0到块M),用于存放嵌入式系统的的固件。而ROM存放引导代码,或者说引导程序,用于嵌入式系统的初始化,并加载固件。
图1中,在与非闪存开辟的存储空间存放有多份固件镜像,所占用空间也不会太大,由于与非闪存有一定的使用寿命,主要是可擦写次数有限制,在当前与非闪存存储容量比较大的条件下,多份固件镜像所消耗的资源非常有限,但却能够大大提高系统运行的安全性。整体上,可以显著提干固件存放的寿命。
图中固件架构,多份固件并没有连续存放,这样能够相对的提高系统启动的成功率。图1中带有剖面线的块表示存放有固件的块。
图中上面表示的固件结构,首先是固件信息描述头,然后是跟随其后的固件程序,被连续存放。为了满足安全启动的需要,固件信息描述头提供验证固件正确性与完整性的信息。
固件是针对专用的嵌入式系统编译生成对应的,当然,嵌入式系统是专用芯片,固件识别通常与功能模块生产厂商紧密关联。
我们知道,SoC是将微处理器、模拟IP核、数字IP核和存储器(或片外存储器接口)集成到单一芯片上形成的系统,也叫系统级芯片,是一个专用目标集成电路。SoC的典型结构通常由至少一个作为主控制器或者主逻辑运算单元的高性能CPU/DSP和若干通过片内总线连接的功能IP组成,其中CPU/DSP被称为主设备或者主器件,功能IP被称为从设备或者从器件。其中的IP,即IntellectualProperty,知识产权模块,也就是前面所说的功能模块,为直接集成的某些生产厂商提供的模块,减少重复研发投资,可以大大降低SoC的研发周期和成本。
那么固件就是针对特定的硬件平台编译生成具有特定功能的代码,也具有专用性,同时也具有可识别性。那么进一步的要求是,确保硬件平台内部具有标识意义的芯片ID,并保持固件支持的芯片ID和实际的硬件芯片ID相一致。这样,就能确保固件和硬件平台是一一对应的。
对固件做CRC校验,并把校验结果保存,与固件信息描述头中存放的校验值进行比较就可以判断相应的完整性。
固件由固件信息描述头和固件程序两部分组成。其中固件信息描述头中主要应该由固件开始标志str、描述头本身的CRC校验值、固件支持的硬件芯片ID、固件本身的CRC校验值组成,并且还可以存放其他的一些配置信息,以进行所需要的配置。固件则是为支持该硬件平台特定功能的代码组成,为已知结构,在此不再赘述。
在嵌入式系统生产或者升级时,通过匹配的协议,上位机把固件信息描述头和固件程序作为一个整体下载至闪存好块中,并做多份备份。
当系统启动时,先使用ROM中的启动程序,即引导程序完成系统的初级初始化,因固件是底层程序,整个初始化,或者说启动需要固件的加载,因此,更准确的表述为这里引导程序用于初始的初始化。
然后加载存储在闪存中的一份固件到RAM,并依次检测该固件是不是带有预定的开始标志、固件描述头中CRC校验值和对固件描述头新做的CRC校验得出的校验值是否一致、固件支持的硬件平台和本硬件平台是否一致以及固件描述头中包含的固件本身CRC校验和对固件新做的CRC校验得出的CRC校验值是否一致四大步骤。
若全部满足,则经过上述检查后,固件启动完成。如果某一步骤不满足要求,都会导致启动程序重新查找下一份备份固件。当查找不到合适固件时,该嵌入式系统会进入启动失败的后续处理程序,如等待连接重新下载固件的状态。
其中,判断查找结束的条件之一为查找的存储空间是否超出了预定的存储空间范围,如:把多份固件存储在Flash块号0-100当中;当超出这个范围后就意味着没有找到固件。
一个较佳实施方式表示在说明书附图1中,并作说明如下:
当系统上电启动时,首先ROM中引导启动程序完成系统初始化,接着从Flash加载一份固件到RAM过程中,并做如下处理:
(1)检查读取的数据是否包含固件信息描述头标志str。如果包含说明此数据块载有描述头数据,然后继续下面步骤(2),否则重新扫描预定的存储空间中的下一个flash块。
这里需要注意,如果相关的固件被认定为不完整,可以标记该固件失效,下次再加载固件时,不再对该该固件进行调用,以节省资源。
(2)检查固件信息描述头是否完整,通过对固件描述信息头做CRC校验得D1和信息头中存放的CRC校验C1做比较。如果一致,说明固件信息描述头有效,然后继续步骤(3),否则重新扫描下一个flash块。
(3)检查固件版本支持的硬件平台和当前使用的硬件平台是否一致,通过对固件描述信息头中包含的支持的芯片ID2和当前硬件平台中的芯片ID1做比较。如果一致,说明本固件版本支持当前硬件平台,然后继续步骤(4),否则重新扫描下一个flash块。
(4)检查固件程序是否完整正确,通过对固件程序做CRC校验得D2和信息头中包含的CRC校验C2做比较。如果一致,说明固件程序有效,并继续后续启动操作,否则重新扫描下一个flash块。
(5)在完成(1),(2),(3),(4)步骤后,准确的说是满足所需要的固件正确性和完整性后,引导程序把控制权交付给相关固件,开始跳转至固件执行,完成了整个安全的启动过程。
如果对整个存储空间的查找超过了规定的固件存储Flash块范围后,仍没找到合适的固件时,则进入固件加载失败处理流程,等待固件更新。
依据上述方法,有益效果能够更清楚地为本领域的技术人员所理解,当嵌入式系统生产或者以后在线升级时,如果下载的固件版本有误,由于不会把错误的固件进行刷机,不会导致系统死锁,从而可以重新下载新的固件,这样就不会导致嵌入式系统报废的情况发生。
在下载固件时,会对固件进行多次备份存储,显著提高加载固件成功的概率;而且,当嵌入式系统启动中发生固件损坏的情况时,对该系统仍可进行新的升级,或者说提高了升级的成功的概率。从而,可以有效地防止CPU加载固件导致自锁的情况发生。
而传统的方法,在嵌入式系统生产或者以后在线升级时,如果下载的固件版本有误或者启动时读取固件出错,有可能导致系统运行报废,而且不能重新被更新固件,而导致CPU的自锁。
Claims (6)
1.一种防止CPU自锁的安全启动方法,在嵌入式系统中,存在片上系统和作为该片上系统的外部存储扩展的闪存,其中片上系统含有CPU模块及集成在片上的功能模块,其特征在于,在所述闪存中开辟一存储空间,存放多份固件镜像;
系统初始化,在所述存储空间查找一份固件加载到片上系统,若查到,则判断所查到固件的正确性和完整性,并在同时满足正确性条件和完整性条件时,运行该固件;反之,则在所述存储空间查找下一份固件;
若在所述存储空间查找不到固件或者查找不到正确且完整的固件,转入固件加载失败流程;
所述存储空间以块为单位存放固件,并在一个块中先存放固件信息描述头,然后是固件程序,进而依序生成预定个数个备份。
2.根据权利要求1所述的防止CPU自锁的安全启动方法,其特征在于,固件含有固件信息描述头和固件程序,其中固件信息描述头含有描述头标志、对应固件支持的功能模块识别码,从而判断所查到固件正确性与否的步骤为:
检查读取的数据中含有描述头标志,则说明此数据为固件信息描述头,否则扫描下一个闪存单元;
读取该固件支持的功能模块识别码,并与片上系统中的功能模块识别码做一致性比较,若一致,则表示当前固件是正确的固件,否则查找下一份固件或在所述存储空间被遍历的条件下等待固件更新。
3.根据权利要求2所述的防止CPU自锁的安全启动方法,其特征在于,完整性验证包括对固件信息描述头的完整性验证和对固件程序完整性的验证,且完整性验证是在相应对象的正确性验证之后进行。
4.根据权利要求3所述的防止CPU自锁的安全启动方法,其特征在于,所述完整性验证采用CRC校验进行验证。
5.根据权利要求1所述的防止CPU自锁的安全启动方法,其特征在于,用于系统初始化的引导程序存放在片上的ROM中,片上RAM用于加载查找到的固件。
6.根据权利要求1所述的防止CPU自锁的安全启动方法,其特征在于,所述固件加载失败流程为启动结束,然后进入等待固件更新步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210054189.3A CN102622249B (zh) | 2012-03-05 | 2012-03-05 | 一种防止cpu自锁的安全启动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210054189.3A CN102622249B (zh) | 2012-03-05 | 2012-03-05 | 一种防止cpu自锁的安全启动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102622249A CN102622249A (zh) | 2012-08-01 |
CN102622249B true CN102622249B (zh) | 2015-12-02 |
Family
ID=46562179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210054189.3A Expired - Fee Related CN102622249B (zh) | 2012-03-05 | 2012-03-05 | 一种防止cpu自锁的安全启动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102622249B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605608B (zh) * | 2013-12-04 | 2016-04-20 | 中国航空综合技术研究所 | 一种嵌入式软件安全性分析充分性检查方法 |
CN104516759B (zh) * | 2014-12-08 | 2018-07-27 | 武汉烽火网络有限责任公司 | 一种集成镜像文件生成方法、测试方法和装置 |
CN107045611B (zh) * | 2016-02-05 | 2022-01-25 | 中兴通讯股份有限公司 | 安全启动方法及装置 |
CN107193567A (zh) * | 2017-05-25 | 2017-09-22 | 湖北航天技术研究院总体设计所 | 弹载dsp软件安全启动更新模式及其实现系统、系统制作方法 |
CN107315616B (zh) * | 2017-06-30 | 2020-08-21 | 苏州浪潮智能科技有限公司 | 一种固件的加载方法、装置及电子设备 |
CN109657504B (zh) * | 2018-12-12 | 2020-09-22 | 深圳忆联信息系统有限公司 | 芯片与固件的绑定方法、装置、计算机设备及存储介质 |
CN111209560A (zh) * | 2020-01-06 | 2020-05-29 | 杭州涂鸦信息技术有限公司 | 固件保护方法及装置、电子设备 |
CN112379932B (zh) * | 2020-11-23 | 2023-05-23 | 歌尔科技有限公司 | 电子设备的Boot方法、Boot装置和电子设备 |
CN113343245B (zh) * | 2021-05-27 | 2022-09-30 | 长沙海格北斗信息技术有限公司 | 芯片安全启动方法、安全芯片及其接收机 |
CN113849230A (zh) * | 2021-08-30 | 2021-12-28 | 浪潮电子信息产业股份有限公司 | 服务器启动方法、装置、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216772A (zh) * | 2008-01-15 | 2008-07-09 | 中兴通讯股份有限公司 | 一种嵌入式设备的启动方法及软件升级方法 |
CN101436141A (zh) * | 2008-11-21 | 2009-05-20 | 深圳创维数字技术股份有限公司 | 基于数字签名的固件升级、固件封装方法与装置 |
CN101630266A (zh) * | 2009-08-21 | 2010-01-20 | 成都市华为赛门铁克科技有限公司 | 固件加载方法、装置和固态硬盘 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7640424B2 (en) * | 2005-10-13 | 2009-12-29 | Sandisk Corporation | Initialization of flash storage via an embedded controller |
-
2012
- 2012-03-05 CN CN201210054189.3A patent/CN102622249B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101216772A (zh) * | 2008-01-15 | 2008-07-09 | 中兴通讯股份有限公司 | 一种嵌入式设备的启动方法及软件升级方法 |
CN101436141A (zh) * | 2008-11-21 | 2009-05-20 | 深圳创维数字技术股份有限公司 | 基于数字签名的固件升级、固件封装方法与装置 |
CN101630266A (zh) * | 2009-08-21 | 2010-01-20 | 成都市华为赛门铁克科技有限公司 | 固件加载方法、装置和固态硬盘 |
Also Published As
Publication number | Publication date |
---|---|
CN102622249A (zh) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102622249B (zh) | 一种防止cpu自锁的安全启动方法 | |
CN105094927B (zh) | 一种设备固件升级方法和装置 | |
CN102385535B (zh) | 处理从非易失性存储器进行设备引导期间的错误 | |
CN109189405B (zh) | 一种验证程序Flash数据一致性的方法及系统 | |
CN104063477B (zh) | 嵌入式系统启动异常的处理方法及装置 | |
CN101650662A (zh) | 一种嵌入式系统的存储器件、固件启动及升级方法 | |
CN103150231A (zh) | 计算机开机的方法与计算机系统 | |
CN102750191A (zh) | 用于启动固态非易失性存储设备内的刷新操作的方法 | |
CN106775877A (zh) | 一种固件刷新方法及一种服务器 | |
CN102637461B (zh) | 支持坏块闪存扫描的启动方法 | |
CN103246534A (zh) | 操作系统迁移方法及装置 | |
CN103136019A (zh) | 用于加载配置信息的方法和装置 | |
CN103577201A (zh) | 嵌入式双系统的更新方法及系统 | |
CN103226505A (zh) | 一种校验基本输入输出系统bios的方法及设备 | |
CN103425549A (zh) | 嵌入式控制器的固件管理方法及系统 | |
CN103593281A (zh) | 测试系统及测试方法 | |
CN108170456B (zh) | 电子设备的固件升级方法及装置 | |
CN105607972A (zh) | 一种异常修复的方法及装置 | |
CN111782246A (zh) | 基于总线的多节点设备嵌入式程序升级方法 | |
CN104049999A (zh) | 基于网络的存储设备自动修复系统及其方法 | |
CN102479124B (zh) | 一种测试方法 | |
US10387306B2 (en) | Systems and methods for prognosticating likelihood of successful save operation in persistent memory | |
CN103544151A (zh) | linux系统中数据处理的方法及系统 | |
CN103631677B (zh) | 一种plc设备数据掉电保持的方法 | |
CN117034294A (zh) | 一种低成本bootloader在线安全固化及安全启动方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151202 |