固件启动方法、装置及嵌入式设备与流程

文档序号:12176571阅读:429来源:国知局
固件启动方法、装置及嵌入式设备与流程

本发明涉及计算机技术领域,尤其涉及一种固件启动方法、装置及嵌入式设备。



背景技术:

在嵌入式设备中,固件是担任着系统最基础最底层工作的程序。在设备加载系统时,或者升级系统时,都需要先启动相应的固件以进行开机操作或系统升级操作。

在现有技术中,固件存储于嵌入式设备的内部存储器,在需要启动固件时,只能从内部存储器读取固件并启动。这样虽然启动速度较快,但是,在启动过程中,一旦遇到错误,例如内部存储器损坏或固件损坏等,将导致固件无法启动,降低系统可靠性及稳定性。



技术实现要素:

有鉴于此,有必要提供一种固件启动方法、装置及嵌入式设备,能够提高系统可靠性及稳定性。

本发明公开了一种固件启动方法,其应用于嵌入式设备,所述嵌入式设备包括内部存储器及外部存储器,所述固件启动方法包括:

分别读取所述内部存储器的第一启动标记及所述外部存储器的第二启动标记;以及

判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号,是则从所述内部存储器启动固件,否则从所述外部存储器启动固件。

作为一种实施方式,从所述内部存储器启动固件之后,所述固件启动方法还包括:

进一步判断所述第二启动标记是否合法,否则将所述内部存储器的固件备份至所述外部存储器;以及

更新所述第二启动标记。

作为一种实施方式,从所述外部存储器启动固件之后,所述固件启动方法还包括:

进一步判断所述第一启动标记是否合法,否则将所述外部存储器的固件备份至所述内部存储器;以及

更新所述第一启动标记。

作为一种实施方式,在判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号之前,所述固件启动方法还包括:

判断所述第一启动标记及所述第二启动标记是否都有效,是则进一步判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号;否则从有效的启动标记所对应的存储器启动固件。

作为一种实施方式,在从有效的启动标记所对应的存储器启动固件之前,所述固件启动方法还包括:

判断所述有效的启动标记所对应的存储器的程序校验值是否有效,是则从有效的启动标记所对应的存储器启动固件。

本发明还公开了一种固件启动装置,应用于嵌入式设备,其特征在于,所述嵌入式设备包括内部存储器及外部存储器,所述固件启动装置包括:

读取模块,用于分别读取所述内部存储器的第一启动标记及所述外部存储器的第二启动标记;以及

启动模块,用于判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号,是则从所述内部存储器启动固件,否则从所述外部存储器启动固件。

作为一种实施方式,所述启动模块包括:

第一备份单元,用于在从所述内部存储器启动固件之后,进一步判断所述第二启动标记是否合法,否则将所述内部存储器的固件备份至所述外部存储器;以及

第二更新单元,用于更新所述第二启动标记。

作为一种实施方式,所述启动模块包括:

第二备份单元,用于在从所述外部存储器启动固件之后,进一步判断所述第一启动标记是否合法,否则将所述外部存储器的固件备份至所述内部存储器;以及

第二更新单元,用于更新所述第一启动标记。

作为一种实施方式,所述启动模块,还用于:

在判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号之前,判断所述第一启动标记及所述第二启动标记是否都有效,是则进一步判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号;否则从有效的启动标记所对应的存储器启动固件。

作为一种实施方式,所述启动模块,还用于:在从有效的启动标记所对应的存储器启动固件之前,判断所述有效的启动标记所对应的存储器的程序校验值是否有效,是则从有效的启动标记所对应的存储器启动固件。

本发明还公开了一种嵌入式设备,其包括内部存储器及外部存储器,还包括如权利要求6至9中任一项所述的固件启动装置。

上述固件启动方法、装置及嵌入式设备,如果系统在内部存储器找不到启动标记,或者其启动标记版本号低于外部存储器的启动标记版本号,则系统从外部存储器内读取固件并启动,从而优先启动版本较高的固件。此外,由于允许设备直接从外部存储器启动,这样即使内部存储器损坏,设备仍然可以正常工作,从而提高系统可靠性及稳定性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他实施例的附图。

图1为本发明一实施例的固件启动方法的流程示意图;

图2为本发明另一实施例的固件启动方法的流程示意图;

图3为本发明又一实施例的固件启动方法的流程示意图;

图4为本发明一实施例的固件启动装置的模块结构示意图;

图5为本发明另一实施例的固件启动装置的模块结构示意图;

图6为本发明又一实施例的固件启动装置的模块结构示意图;

图7为本发明一实施例的嵌入式设备的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

下面结合附图描述根据本发明实施例的固件启动方法、装置及嵌入式设备。例如,本发明一实施例的固件启动方法包括以下步骤:分别读取所述内部存储器的第一启动标记及所述外部存储器的第二启动标记;判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号,是则从所述内部存储器启动固件,例如从内部存储器启动系统固件或启动固件升级程序;否则从所述外部存储器启动固件,例如从外部存储器启动系统固件或启动固件升级程序。

请参阅图1,其为本发明一实施例的固件启动方法的流程示意图,所述固件启动方法应用于嵌入式设备,所述嵌入式设备包括内部存储器及外部存储器,例如,所述内部存储器为内部非易失存储器(Nonvolatile RAM,简称:NVRAM),所述外部存储器为外部可移动NVRAM。如图1所示,所述固件启动方法包括以下步骤:

S110,分别读取所述内部存储器的第一启动标记及所述外部存储器的第二启动标记。

例如,预先设置用于读取外部存储器及内部存储器的工具,使得能读取所述第一启动标记及所述第二启动标记。例如,预先在CPU内设置用于读取外部存储器及内部存储器的程序代码。

在本实施例中,第一启动标记指的是内部存储器的启动标记,例如内部NVRAM的启动标记。第二启动标记指的是外部存储器的启动标记,例如外部可移动NVRAM的启动标记。

其中,启动标记用于指示固件是否存在、固件是否正常升级完成以及固件的版本。例如,启动标记包括用于指示固件是否存在的第一标记,用于指示固件是否正常升级完成的第二标记,以及,用于指示固件版本的第三标记。例如第一标记为0或1,0表示固件不存在,1表示固件存在。例如第二标记包括0或1,0表示正常升级完成,1表示正常升级失败;例如第二标记还包括升级时间。例如第三标记包括版本号。

作为一种实施方式,启动标记包括多组字符/字符串,例如包括3组字符/字符串,每组字符/字符串分别为第一标记、第二标记和第三标记。

作为另一种实施方式,启动标记为一组字符串,所述一组字符串包括多段标记位,例如所述一组字符串包括3段标记位,第一段标记位对应的字符为第一标记,第二段标记位对应的字符为第二标记,第三段标记位对应的字符为第三标记。又如,所述一组字符串例为数值串,每段标记位对应的字符均为数字。

S130,判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号,是则执行步骤S150,否则执行步骤S170。

在本实施例中,第一启动标记和第二启动标记各自包括一版本号,用于指示固件版本,例如第一启动标记的版本号用于指示内部存储器中存储的固件的版本,第二启动标记用于指示外部存储器中存储的固件的版本。

具体地,将第一启动标记的版本号与第二启动标记的版本号进行比较,以判断第一启动标记的版本号是否大于第二启动标记的版本号。其中,版本号越大表示固件的版本越新。例如,版本号包括主版本号、次版本号及修改次数版本号,先比较第一启动标记和第二启动标记的主版本号,主版本号较大的启动标记所对应的版本号较大;若主版本号相同,再比较次版本号,此时次版本号较大的启动标记所对应的版本号较大;若主版本号和次版本号相同,则比较修改次数版本号,此时修改次数版本号较大的启动标记所对应的版本号较大。又如,版本号5.2.11,其中5为主版本号,2位次版本号,11为修改次数版本号。

S150,从所述内部存储器启动固件。

在本实施例中,当内部存储器的固件版本与外部存储器的固件版本一致时,即第一启动标记的版本号等于第二启动标记的版本号时,优先从内部存储器启动固件。当内部存储器的固件版本与外部存储器的固件版本不一致时,优先启动版本较高的固件,因此,若第一启动标记的版本号和第二启动标记的版本号不相同,则从版本号较大的启动标记所对应的存储器启动固件,例如,当第一启动标记的版本号大于第二启动标记的版本号时,从第一启动标记所对应的内部存储器启动固件,即读取内部存储器所存储的固件并启动该固件。

在一个实施例中,从所述内部存储器启动固件之前,还执行步骤:判断所述内部存储器的程序校验值是否有效,是则从所述内部存储器启动固件。例如,上述第一启动标记为数值串,上述程序校验值为该数值串的校验和,用以校验第一启动标记的完整性和准确性。

在一个实施例中,若所述内部存储器的程序校验值无效,则尝试重启,例如返回步骤S110。

在一个实施例中,从内部存储器启动过程中,若遇到错误导致无法启动,则重启。例如,从内部存储器重启,或者从外部存储器重启。例如,系统从内部非易失性存储器启动过程中,遇到错误导致无法继续执行,程序擦除内部非易失性存储器的启动标记,然后重新读取外部存储器所存储的固件并启动该固件。

S170,从所述外部存储器启动固件。例如,读取外部存储器所存储的固件并启动该固件。

在一个实施例中,从所述外部存储器启动固件之前,还执行步骤:判断所述外部存储器的程序校验值是否有效,是则从所述外部存储器启动固件。例如,上述第二启动标记为数值串,上述程序校验值为该数值串的校验和,用以校验第二启动标记的完整性和准确性。

在一个实施例中,若所述外部存储器的程序校验值无效,则尝试重启,例如返回步骤S110。

在一个实施例中,从外部存储器启动固件的过程中,若发生错误导致启动失败,则从内部存储器启动固件。例如擦除外部存储器的启动标记,读取内部存储器所存储的固件并启动该固件。

上述固件启动方法,如果系统在内部存储器找不到启动标记,或者其启动标记版本号低于外部存储器的启动标记版本号,则系统从外部存储器内读取固件并启动,从而优先启动版本较高的固件。此外,由于允许设备直接从外部存储器启动,这样即使内部存储器损坏,设备仍然可以正常工作,从而提高系统可靠性及稳定性。

在一个实施例中,步骤S130之前,还执行步骤:判断所述第一启动标记及所述第二启动标记是否都有效,是则执行步骤S130,否则从有效的启动标记所对应的存储器启动固件。例如,若判断第一启动标记有效,并且第二启动标记无效,则从内部存储器启动固件;例如,若判断第一启动标记无效,并且第二启动标记有效,则从外部存储器启动固件;例如,若第一启动标记和第二启动标记均无效,则返回步骤S110,尝试重新启动。

作为一种实施方式,若第一启动标记无效并且第二启动标记有效,或者若第一启动标记的版本号小于第二启动标记的版本号,则从外部存储器启动固件之后,还将外部存储器的固件备份至内部存储器,并更新内部存储器的第一启动标记,这样,保证内部存储器存储有较新版本的固件以及正确有效的启动标记,从而提高系统可靠性。

作为另一种实施方式,若第二启动标记无效并且第一启动标记有效,或者若第二启动标记的版本号小于第一启动标记的版本号,则从内部存储器启动固件之后,还将内部存储器的固件备份至外部存储器,并更新外部存储器的第二启动标记,这样,保证外部存储器存储有较新版本的固件以及正确有效的启动标记,从而提高系统可靠性。

在一个实施例中,从有效的启动标记所对应的存储器启动固件之前,还执行步骤:判断所述有效的启动标记所对应的存储器的程序校验值是否有效,是则从有效的启动标记所对应的存储器启动固件。例如,若有效的启动标记为第一启动标记,则判断内部存储器的程序校验值是否有效;若有效的启动标记为第二启动标记,则判断外部存储器的程序校验值是否有效。又如,第一启动标记和第二启动标记为数值串,上述程序校验值为该数值串的校验和,用以校验第一启动标记或第二启动标记的完整性和准确性。

在一个实施例中,如图2所示,若步骤S130的判断结果为是,则步骤S150之后,还执行如下步骤:

S161,判断所述第二启动标记是否合法,否则执行步骤S163。

在本实施例中,当外部可移动非易失性存储器的启动标记版本号存在,且小于等于内部非易失性存储器的启动标记版本号时,其为合法值。

由于在步骤S150之前,已判断第一启动标记大于或等于第二启动标记或第二启动标记无效,因此,作为一种实施方式,进一步判断所述第二启动标记的版本号是否存在,是则所述第二启动标记的版本号为合法值,继续执行从内部存储器启动固件的步骤;否则所述第二启动标记的版本号不是合法值,执行步骤S163。

作为另一种实施方式,为了保证判断准确率,在进一步判断所述第二启动标记的版本号是否存在之后,再次判断所述第二启动标记的版本号是否小于或等于第一启动标记的版本号,若再次判断结果为是,则所述第二启动标记的版本号为合法值,继续执行从内部存储器启动固件的步骤;若进一步判断结果为否,或者再次判断结果为否,则执行步骤S163。

S163,将所述内部存储器的固件备份至所述外部存储器。

在本实施例中,若第二启动标记的版本号不是合法值,表示外部存储器中不存在固件或外部存储器的固件有误,因此将内部存储器的固件备份至外部存储器,这样,使得外部存储器备份有正确的固件,从而提高系统可靠性。

S165,更新所述第二启动标记。

外部存储器更新固件之后,相应更新其对应的第二启动标记,例如更新第二启动标记的版本号、版本更新时间等。例如,擦除外部存储器原有的第二启动标记,重新设置第二启动标记,使新设置的第二启动标记的版本号与第一启动标记的版本号相同,以确保更新后的第二启动标记正确有效。

在一个实施例中,如图3所示,若步骤S130的判断结果为否,则步骤S170之后,还执行如下步骤:

S181,判断所述第一启动标记是否合法,否则执行步骤S183。

在本实施例中,当内部可移动非易失性存储器的启动标记版本号存在且有效时,其为合法值。

作为一种实施方式,进一步判断所述第一启动标记的版本号是否存在,是则所述第一启动标记的版本号为合法值,继续执行从外部存储器启动固件的步骤;否则所述第一启动标记的版本号不是合法值,执行步骤S183。

作为另一种实施方式,在进一步判断所述第一启动标记的版本号存在之后,再次判断所述第一启动标记的版本号是否大于或等于第二启动标记的版本号,若再次判断结果为是,则继续执行从内部存储器启动固件的步骤;若再次判断结果为否,则执行步骤S183。

S183,将所述外部存储器的固件备份至所述内部存储器。

在本实施例中,若第一启动标记的版本号不是合法值,表示内部存储器中不存在固件或外部存储器的固件有误,若第一启动标记的版本号低于

因此将外部存储器的固件备份至内部存储器,这样,使得外部存储器备份有正确的固件,从而提高系统可靠性。

S185,更新所述第一启动标记。

内部存储器更新固件之后,相应更新其对应的第一启动标记,例如更新第一启动标记的版本号、版本更新时间等。例如,擦除外部存储器原有的第一启动标记,重新设置第一启动标记,使新设置的第一启动标记的版本号与第二启动标记的版本号相同,以确保更新后的第一启动标记正确有效。

例如,本发明一实施例的固件启动方法具体包括:设备内部CPU启动时,读取内部非易失性存储器的启动标记和外部可移动非易失性存储器内的启动标记。根据启动标记来判断从何种介质开始启动系统。判断标准是启动标记的版本号,系统从版本号更高的介质内读取程序并启动。如果版本号相同,优先从内部非易失性存储器启动。

系统开始启动后,检查另一种介质的启动标记。即如果是从内部非易失性存储器启动,程序加载并读取外部可移动非易失性存储器的启动标记,检查其合法性,当外部可移动非易失性存储器的启动标记版本号存在,且小于等于内部非易失性存储器的启动标记版本号时,其为合法值。否则需要将内部非易失性存储器的固件备份到外部可移动非易失性存储器内,并更新外部可移动非易失性存储器的启动标记。如果系统从内部非易失性存储器启动过程中,遇到错误导致无法执行,程序擦除内部非易失性存储器的启动标记,然后重启。

如果系统在内部非易失性存储器找不到启动标记,或者其启动标记版本号低于外部可移动非易失性存储器的启动标记版本号,则系统从外部可移动非易失性存储器内读取程序并启动。

如果系统从外部可移动非易失性存储器内读取程序并启动,程序需要检查内部非易失性存储器的启动标记,如果内部非易失性存储器的启动标记不存在,或者其版本号低于外部可移动非易失性存储器的启动标记版本号,则程序擦除内部非易失性存储器的固件,将外部可移动非易失性存储器内的固件备份到内部非易失性存储器中。

上述固件启动方法可以用在固件升级过程中,例如,待启动的固件为固件升级程序。当升级固件时,先将固件升级到外部可移动非易失性存储器中,此时,即使升级过程中断,也不影响到内部存储器内的固件。当升级完成后,系统重新启动时,根据启动标记判断是否需要将外部存储器的固件升级到内部存储器中。例如,若内部存储器的启动标记版本号低于外部存储器的启动标记版本号,则将外部存储器的固件升级到内部存储器中。

例如,在工厂大规模量产中,当升级完单个设备之后,将外部可移动非易失性存储器接入,设备会启动自动升级外部可移动非易失性存储器。当升级完外部可移动非易失性存储器后,可以将外部可移动非易失性存储器接入到未进行升级的设备中,设备的系统启动后,会检查内部非易失性存储器,发现未升级,则从外部可移动非易失性存储器将固件升级到内部非易失性存储器中。

上述固件启动方法,从外部存储器和内部存储器中,优先选择版本较高的固件进行启动,启动后还对版本较低的固件进行更新,以保证内部存储器和外部存储器中的固件及启动标记均正确有效,从而提高设备可靠性。由于允许设备直接从外部存储器启动,这样即使内部存储器损坏,设备仍然可以正常工作,从而提高系统可靠性及稳定性。

在一些特殊的嵌入式设备中,必须接入外部可移动非易失性存储器才能工作,在这种情况下,外部可移动非易失性存储器是必须的。对于这类嵌入式设备,上述固件启动方法直接利用设备必须的外部可移动非易失性存储器实现,无需增加硬件成本,即可提高系统可靠性及稳定性。

请参阅图4,其为本发明一实施例的固件启动装置的结构示意图。所述固件启动装置应用于嵌入式设备,所述嵌入式设备包括内部存储器及外部存储器,例如,所述内部存储器为内部NVRAM,所述外部存储器为外部可移动NVRAM。例如,所述固件启动装置采用上述任一实施例所述的固件启动方法实现。如图4所示,所述固件启动装置400包括读取模块410及启动模块430。

其中,读取模块410,用于分别读取所述内部存储器的第一启动标记及所述外部存储器的第二启动标记。

启动模块430,用于判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号,是则从所述内部存储器启动固件,否则从所述外部存储器启动固件。

在一个实施例中,如图5所示,启动模块430包括第一备份单元431及第一更新单元433。

其中,第一备份单元431,用于在从所述内部存储器启动固件之后,进一步判断所述第二启动标记是否合法,否则将所述内部存储器的固件备份至所述外部存储器。

第一更新单元433,用于更新所述第二启动标记。

在一个实施例中,如图6所示,启动模块430包括第二备份单元435及第二更新单元437。

其中,第二备份单元435,用于在从所述外部存储器启动固件之后,进一步判断所述第一启动标记是否合法,否则将所述外部存储器的固件备份至所述内部存储器。

第二更新单元437,用于更新所述第一启动标记。

在一个实施例中,启动模块430还用于:在判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号之前,判断所述第一启动标记及所述第二启动标记是否都有效,是则进一步判断所述第一启动标记的版本号是否大于或等于所述第二启动标记的版本号;否则从有效的启动标记所对应的存储器启动固件。

在一个实施例中,启动模块430还用于:在从有效的启动标记所对应的存储器启动固件之前,判断所述有效的启动标记所对应的存储器的程序校验值是否有效,是则从有效的启动标记所对应的存储器启动固件。

上述固件启动装置,如果系统在内部存储器找不到启动标记,或者其启动标记版本号低于外部存储器的启动标记版本号,则系统从外部存储器内读取固件并启动,从而优先启动版本较高的固件。此外,由于允许设备直接从外部存储器启动,这样即使内部存储器损坏,设备仍然可以正常工作,从而提高系统可靠性及稳定性。

在一些特殊的嵌入式设备中,必须接入外部可移动非易失性存储器才能工作,在这种情况下,外部可移动非易失性存储器是必须的。对于这类嵌入式设备,上述固件启动装置直接利用设备必须的外部可移动非易失性存储器实现,无需增加硬件成本,即可提高系统可靠性及稳定性。

本发明又一实施例是,一种固件启动装置,其采用上述任一实施例所述固件启动方法;例如,一种固件启动装置,其采用上述任一实施例所述固件启动方法实现;又如,一种固件启动装置,其具有上述任一实施例所述固件启动方法所对应的功能模块。

本发明实施例还提供了一种嵌入式设备,如图7所示,该嵌入式设备700包括内部存储器710、外部存储器730及固件启动装置750,其中固件启动装置750为图4至6中任一项所示实施例所描述的固件启动装置。例如,所述嵌入式设备采用上述任一实施例所述固件启动方法和/或固件启动装置实现。

应该说明的是,上述装置实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能模块的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,相应的程序可以存储于可读取存储介质中,所述存储介质,如ROM/RAM、磁盘、光盘等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1