一种基于异构多核芯片的启动方法以及存储介质

文档序号:152915 发布日期:2021-10-26 浏览:36次 >En<

阅读说明:本技术 一种基于异构多核芯片的启动方法以及存储介质 (Starting method based on heterogeneous multi-core chip and storage medium ) 是由 张金伟 董宗祥 牛建龙 李占坤 倪戎超 李明 于 2020-04-23 设计创作,主要内容包括:本申请涉及一种基于异构多核芯片的启动方法,包括如下步骤:选取BootRom为可信根,并通过BootRom校验对启动引导模块进行校验;以及若所述启动引导模块通过校验则根据预定配置选择所述异构多核芯片中要启动的核。(The application relates to a starting method based on a heterogeneous multi-core chip, which comprises the following steps: selecting BootRom as a root of trust, and verifying the boot module through BootRom verification; and if the starting guide module passes the verification, selecting a core to be started in the heterogeneous multi-core chip according to a preset configuration.)

一种基于异构多核芯片的启动方法以及存储介质

技术领域

本发明涉及嵌入式系统领域,具体而言,涉及一种基于异构多核芯片的启动方法以及计算机可读存储介质。

背景技术

物联网、人工智能等技术的发展对嵌入式系统提出了更多的要求,在一些应用场合,不仅要求系统有较高的实时性,而且要求其具有较强的数据处理能力。如在汽车电子领域,网关需要支持传统的CAN、LIN通信,因此需要运行一个实时操作系统,以达到快速响应、避免通信丢帧的目的。同时,为了支持FOTA、大数据、入侵检测等功能,则需要有性能更强的处理核心以运行更复杂的操作系统。因此,实际存在的多样化需求促使芯片厂商在嵌入式芯片中集成多个不同架构的处理核心,以满足丰富的应用场景。

发明内容

本发明提出了一种基于异构多核芯片的系统安全启动方案。具体而言:

根据本发明的一方面,提供一种基于异构多核芯片的启动方法,包括如下步骤:选取BootROM为可信根,并通过BootROM对启动引导模块进行校验;以及若所述启动引导模块通过校验则根据预定配置选择所述异构多核芯片中要启动的核及其对应的待校验内容。

可选地,在本发明的一些实施例中,若选择的要启动的核为控制器核心,则所述待校验内容包括标定文件、APP文件,所述方法还包括:通过所述启动引导模块对所述标定文件、所述APP文件进行校验,若校验通过则释放所述控制器核心。

可选地,在本发明的一些实施例中,若选择的要启动的核为处理器核心,则所述待校验内容包括uboot程序、环境变量、内核、系统服务、启动脚本以及应用程序,所述方法还包括:通过所述启动引导模块对所述uboot程序进行校验,若校验通过则释放所述处理器核心;通过所述处理器核心执行所述uboot程序,并在所述uboot程序中校验所述环境变量和所述内核;若所述内核通过校验则拷入文件系统并对其系统服务、启动脚本进行校验;以及若系统服务、启动脚本通过校验则执行所述应用程序,并利用所述启动引导模块对所述应用程序进行校验。

可选地,在本发明的一些实施例中,若所述待校验内容的尺寸小于预定值,则所述待校验内容包括多个备份以一起形成待校验集,所述方法还包括:若所述待校验集中的一项未通过校验则将该项记录,并利用所述待校验集中的剩余项进行校验:若所述待校验集中的所有项均未通过校验则所述待校验内容校验失败;以及若所述待校验集中的任意一项通过校验则所述待校验内容校验成功,并且利用通过校验的项目替换记录的项目。

可选地,在本发明的一些实施例中,若所述待校验内容的尺寸大于等于预定值,则所述待校验内容包括一个备份文件,所述方法还包括:通过确定默克尔树集是否合法来对所述待校验内容进行校验,其中所述默克尔树集包括按如下方式生成的主文件默克尔树、备份文件默克尔树:将所述待校验内容按照预设规则划分成多个小文件并对每个小文件计算哈希值以构造所述主文件默克尔树;以及将所述备份文件按照所述预设规则划分成多个小文件并对每个小文件计算哈希值以构造所述备份文件默克尔树。

可选地,在本发明的一些实施例中,所述默克尔树集还包括所述主文件默克尔树的多个备份、所述备份文件默克尔树的多个备份。

可选地,在本发明的一些实施例中,若所述默克尔树集中任意一项是合法的,则将所述待校验内容按照所述预设规则构造当前待校验内容默克尔树;比较所述当前待校验内容默克尔树与所述默克尔树集中的任意一项的各个节点:若所述当前待校验内容默克尔树的各个节点与任意一项的各个节点一致,则当前待校验内容通过校验;或者若所述当前待校验内容默克尔树的每一个节点在所述默克尔树集中的任意一项中存在一致的节点,则将这些一致的节点所对应的数据块组合以取代所述待校验内容,并且取代的内容通过校验。

可选地,在本发明的一些实施例中,所述启动引导模块包括多个备份,所述方法包括如下步骤:配置BootROM要启动的核;以及通过该核运行所述启动引导模块及其备份中版本最新的。

可选地,在本发明的一些实施例中,将所述待校验内容及其备份按照版本自新到旧的顺序进行校验。

根据本发明的另一方面,提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,当所述指令由处理器执行时,使得所述处理器执行如上文所述的任意一种方法。

附图说明

从结合附图的以下详细说明中,将会使本发明的上述和其他目的及优点更加完整清楚,其中,相同或相似的要素采用相同的标号表示。

图1图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图2图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图3图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图4图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图5图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图6图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

图7图示了根据本发明的一个实施例基于异构多核芯片的启动方法。

具体实施方式

通常,嵌入式系统从芯片中的固件BootROM开始运行,然后跳转到事先配置的用户程序地址执行,由该段程序配置系统时钟、相关外设并运行操作系统。然而,当处理器具有多个核心,且每个核的架构及运行的操作系统不同时,可选的启动路径就变得很多,如何选择启动过程中的启动文件直接影响到后续程序的正确运行。

此外,随着万物互联的概念日益深入人心,越来越多的嵌入式设备开始接入网络,网络安全成为一个无法规避的问题。如果启动过程是不可靠的,则后续应用程序的安全也就无从谈起。如果仅通过选取一个可信根,并据此形成一个可信链来配置启动方案,选用的可信根的可靠性仍有待进一步加强。

最后,在启动过程中,根据可信链上各个程序的运行顺序,上级程序检验下级程序可靠性、完整性,如果校验失败,当前的做法是放弃启动,这种方式造成的后果是,如果某一文件遭到破坏或者文件更新失败,将会严重阻碍系统功能的正常执行,这必然会引起用户的抱怨。可采取的措施是对文件进行备份,如果一个文件校验失败,自动启用备份文件。其存在的问题是缺乏文件损坏后的恢复机制,当两个文件同时被篡改或者两个文件中一个更新失败,另一个被篡改,系统同样无法启动,如何提高启动过程的可靠性也是一个需要解决的问题。

在本发明的上下文中,若无特别说明,若校验不通过则启动失败。出于简洁考虑,本发明的一些示例可能仅描述了校验流程中通过校验的流向,但本领域技术人员在阅读本申请后可以知晓应当按照启动失败的正常流程进行处理,除非本发明在一些示例中另有说明。

本发明的目的是设计一种用于异构多核芯片的嵌入式系统安全启动方案,以安全地启动具有异构多核特点的嵌入式芯片,从而为后续程序提供一个可信的运行环境。

根据本发明的一方面,提供一种基于异构多核芯片的启动方法,如图7所示,该方法包括如下步骤:选取BootROM为可信根,并通过BootROM对启动引导模块进行校验;以及若启动引导模块通过校验则根据预定配置选择异构多核芯片中要启动的核及其对应的待校验内容。

在本发明的一些示例中,可以选取BootROM为可信根,针对异构多核芯片的特点以所设计的启动引导模块为中介建立了可信链,并提出了可信性度量的几种方案。BootROM是芯片里面的一块受保护的存储区域,里面保存着芯片上电后首先执行的代码,这段代码在芯片出厂前被写入,出厂后用户无法进行修改,所以采用BootROM作为安全根是非常可靠的。此时BootROM需要支持对下一级程序完整性和真实性的校验,现在一些芯片(如TC297、S32G)已经支持这种功能。通常,这些芯片也提供了一个硬件安全模块进行加解密的计算,对于装有硬件安全模块的芯片, BootROM需首先校验硬件加密模块的固件,然后运行该固件,通过硬件加密模块的程序或者仍由BootROM校验首先执行的用户程序(例如,启动引导模块)。

在本发明的一些实施例中,若选择的要启动的核为控制器核心,则待校验内容包括标定文件、APP文件,方法还包括:通过启动引导模块对标定文件、APP文件进行校验,若校验通过则释放控制器核心。

在本发明的一些示例中,通过校验后,启动引导模块开始执行,该模块根据配置选择需要启动的核及其对应的程序。如果是控制器核心,需要运行实时操作系统,则启动引导模块首先验证标定文件,然后验证APP文件,验证通过释放该核,由此形成的可信链如图1所示。

在本发明的一些实施例中,若选择的要启动的核为处理器核心,则待校验内容包括uboot程序、环境变量、内核、系统服务、启动脚本以及应用程序,方法还包括:通过启动引导模块对uboot程序进行校验,若校验通过则释放处理器核心;通过处理器核心执行uboot程序,并在uboot程序中校验环境变量和内核;若内核通过校验则拷入文件系统并对其系统服务、启动脚本进行校验;以及若系统服务、启动脚本通过校验则执行应用程序,并利用启动引导模块对应用程序进行校验。

在本发明的一些示例中,通过校验后,启动引导模块开始执行,该模块根据配置选择需要启动的核及其对应的程序。如果是处理器核心,需要运行Linux等复杂的操作系统,启动引导模块首先校验uboot,验证通过后释放该核,由该处理器核心执行uboot程序,并在uboot程序中验证环境变量和内核,内核通过验证后拷入文件系统并对其系统服务、启动脚本进行校验,校验通过后,应用程序开始执行,同时启动引导模块对所需执行的应用程序进行校验,由此形成的可信链如图2所示。

在本发明的一些示例中,程序的校验可以选择数字签名,程序下载时对该程序计算哈希值,并用厂商的私钥对该哈希值加密,生成的数字签名与程序一起保存在非易失性内存中,控制器中的写保护内存中保存有对应的公钥,每次启动程序前对该签名进行验证,验证通过后计算当前程序的哈希值并与内存中存储的值比较,如果相同,则证明程序是完整且真实可信的。此外,也可以一些认证方法,如HMAC、CMAC、GMAC、AES GCM等对下一级程序进行认证,过程中使用到的密钥存储在芯片的内存中,并用加密算法进行保护,使用前先解密得到密钥并验证其真实性,其后再利用解密出的密钥对程序进行认证。

在本发明的一些实施例中,若待校验内容的尺寸小于预定值(例如,50 kB),则待校验内容包括多个备份以一起形成待校验集,方法还包括:若待校验集中的一项未通过校验则将该项记录,并利用待校验集中的剩余项进行校验:若待校验集中的所有项均未通过校验则待校验内容校验失败;以及若待校验集中的任意一项通过校验则待校验内容校验成功,并且利用通过校验的项目替换记录的项目。

在本发明的一些示例中,设计了启动文件恢复的机制,以应对启动文件的篡改、破坏和正常刷新的失败,提高了启动过程的鲁棒性。将文件分为两类,对于较小的文件,其对内存的占用也相对较小,可对其进行多个备份,如果校验失败,则对其进行记录,并启用对备份程序的校验,若所有备份程序均校验失败,系统复位。如果有一个备份程序通过校验,则执行该程序,并对信任链中下一个程序校验。启动完成后,启动引导模块修复所标记的未通过校验的启动程序,具体做法是用本次正常启动中使用到的程序替换相应的校验失败的程序,流程如图3所示。

在本发明的一些实施例中,若待校验内容的尺寸大于等于预定值(例如,50 kB),则待校验内容包括一个备份文件,方法还包括:通过确定默克尔树集是否合法来对待校验内容进行校验,其中默克尔树集包括按如下方式生成的主文件默克尔树、备份文件默克尔树:将待校验内容按照预设规则(例如,图5中以固定大小为单位)划分成多个小文件并对每个小文件计算哈希值以构造主文件默克尔树;以及将所述备份文件按照所述预设规则划分成多个小文件并对每个小文件计算哈希值以构造所述备份文件默克尔树。

在本发明的一些实施例中,默克尔树集还包括主文件默克尔树的多个备份、备份文件默克尔树的多个备份。

在本发明的一些实施例中,若默克尔树集中任意一项是合法的,则将待校验内容按照预设规则构造当前待校验内容默克尔树;比较当前待校验内容默克尔树与默克尔树集中的任意一项的各个节点:若当前待校验内容默克尔树的各个节点与任意一项的各个节点一致,则当前待校验内容通过校验;或者若当前待校验内容默克尔树的每一个节点在默克尔树集中的任意一项中存在一致的节点,则将这些一致的节点所对应的数据块组合以取代待校验内容,并且取代的内容通过校验。

在本发明的一些示例中,对于较大的文件,如控制器核心中使用到的APP程序、处理器核心中涉及的Bootloader程序、内核和文件系统等,如果多次备份,则会导致内存大量消耗,这不适用于内存资源有限的嵌入式领域。对这些文件,可以只进行一次备份,后文称为主文件和备份文件,在逻辑上将两个文件分别划分成多个小文件,对每个小文件计算哈希值,构造默克尔树,由于默克尔树相对于原文件已经小很多,因此可以采用前述方法对其多次备份以进行保护,并附加认证符或进行数字签名后保存到内存中,以uboot为例,其默克尔树如图4所示。

启动引导模块首先对该树形结构的数据进行校验。若通过,则对当前文件以同样的逻辑划分构造默克尔树,比较根节点,若相同,则当前文件校验通过,若不同,则标记出被修改的逻辑块后,对存储的备份文件的默克尔树进行认证,认证通过后对备份文件计算默克尔树并与存储值比较,若备份文件默克尔树的根节点正确,则启用备份文件,否则判断主文件和备份文件存储的默克尔树的根节点是否一致,若一致,则尝试利用主文件和备份文件中的正确的逻辑块互相修复,若所有完好的数据块可构成整个程序,则修复成功,利用组合后的文件继续执行启动进程,否则,启动失败,系统复位,流程如图5所示。

在本发明的一些实施例中,启动引导模块包括多个备份,方法包括如下步骤:配置BootROM要启动的核;以及通过该核运行启动引导模块及其备份中版本最新的。

在本发明的一些实施例中,将待校验内容及其备份按照版本自新到旧的顺序进行校验。

在本发明的一些示例中,针对异构多核嵌入式系统上运行环境复杂、启动文件较多的特点,综合考虑启动时间、文件版本等因素建立了启动过程的引导机制,使系统选择最佳启动路径。例如,可以首先配置BootROM启动的核心,由该核负责运行启动引导模块,而由其他核心运行应用程序,因此启动程序不会影响到应用程序的执行,当启动引导模块被校验通过且被运行时,模块首先比较并选出该模块和其未校验的备份中版本最新的程序,若当前运行的是最新版本程序,则继续。否则,使系统复位重新运行启动过程。此后,根据当前需要启动的核心选择相应的信任链,启动信任链中下一级引导程序(如uboot等)。

在本发明的一些示例中,启动引导模块首先选择信任链中下一级程序中版本最新的,将其标记为主文件,而将其他文件标记为备份文件,模块对主文件进行校验,若通过,则继续运行启动过程,若不通过,选择另一备份文件,比较备份文件的版本号与上一级文件的版本号,若兼容,则校验备份文件,若成功,则将当前文件标记为主文件,若所有备份文件校验失败,则尝试恢复,如果仍失败,则系统复位,当复位次数超过限值时,启动引导模块使芯片进入bootloader模式,该模式下,开发人员可通过各种通信引脚将经过数字签名保护的程序烧入芯片RAM,直接由RAM启动,之后可由该程序加载其他文件,从而正常启动。正常启动成功后,启动引导模块用当前使用的文件覆盖启动过程中校验失败的相应文件,启动引导模块工作过程如图6所示,

为了进一步说明本发明,下面以S32G芯片的启动为例,进行详细描述。

所选用的S32G芯片上有3个Cortex-M7核和4个Cortex-A53核,并且具有一个硬件安全模块HSE。启动时,BootROM中的程序首先开始执行,该程序检查寄存器的功能,并对启动过程中的外设进行配置,随后从外部Flash中拷贝并检验硬件安全模块HSE的固件,若校验通过,则HSE固件开始执行,随后跳转到启动向量表中的用户文件地址处开始执行。

在本实例中,该地址对应的即是启动引导模块的程序首地址,由一个Cortex-M7核执行,HSE固件首先以AES GCM对启动引导模块进行认证,认证由HSE模块负责执行,认证之前需先检验所使用的密钥是否可信,随后比较当前文件版本与未校验的备份文件版本,若当前文件是最新版本,则继续执行。否则,将备份文件的地址写入启动向量表,触发芯片复位,重新运行启动程序,该设置可使得芯片能够运行最新版本的完好的启动引导模块程序。

文件版本检查通过后,根据设置,启动引导模块首先需引导Cortex-M7核运行,模块根据配置将标定和APP程序拷贝至SRAM,以AES GCM分别对标定和APP进行认证,一旦认证通过,模块触发需运行该APP的核心复位并运行。因为本实例中的标定文件较小,所以系统中对其进行了两次备份,如果标定认证失败,则记录该认证失败的文件,将当前标定文件设为备份文件,并将系统中的另一个文件设为主文件认证,判断版本号是否匹配并进行认证,若认证成功,则继续认证APP文件,由于APP文件较大,因此其只有一个备份,首先读取主文件的默克尔树(主文件备份文件的默克尔树均有三个备份)并进行AES GCM认证,若认证失败,则继续读取备份默克尔树进行认证,直至所有备份均认证失败,才放弃当前启动进程。若认证成功,则读取APP文件至SRAM中并计算其默克尔树,比较存储的默克尔树的根节点的值与计算所得的根节点值,相同时表明当前的APP是可被运行的,否则以上述对主文件的处理方法继续读取备份文件的默克尔树和备份文件,若备份文件正确,则启用备份文件,否则判断存储的主文件和备份文件的默克尔树的根节点,若相同,则选取主文件和备份文件中正确的程序块,尝试组成完整的程序,若能成功组成完整的程序,则启动可继续进行 ,否则复位系统,尝试再次启动。如果上述校验均通过,则复位被引导的核,让其开始运行。

M7核的程序运行后,启动引导模块开始对A53核的程序进行引导,A53核所使用的bootloader是uboot。首先模块将uboot的第一部分代码拷贝至Nor Flash中,对其进行认证,该段代码中包含着对剩余uboot程序的拷贝和认证。uboot的第一段代码有一个主文件和两个备份,uboot的剩余代码以及随后linux内核、文件系统占据内存较大,只有一个备份,但每个文件保存有3个相应的默克尔树。uboot剩余代码的认证和恢复过程与上述APP一致。uboot的第二段代码中包含着对环境变量和内核的认证程序,内核成功运行后又会对启动脚本和系统服务进行认证。为了减少启动时间,其后应用程序的认证由启动引导程序所在的核心进行,一旦认证失败,启动备用应用程序。

当所有应用程序认证通过后,启动引导模块对认证失败的文件进行处理,具体方式是查询启动过程中的记录,将认证失败的文件用本次启动过程中所使用到的同类型文件覆盖,因此,系统在下次启动时包括主文件和备份文件在内的所有文件均处于完整安全的状态。如果启动过程中认证失败导致的系统复位次数超过了预设的限值,则启动引导程序配置芯片使其Reset后进入S32G的serial boot模式,通过CAN、UART、以太网等通信方式将引导加载程序直接写进RAM开始运行,该引导加载程序使用数字签名或消息认证码保护,确保合法者才能使用该方式启动芯片。由该程序加载新的启动引导程序、M7核使用的标定、APP,A53核使用的uboot、内核、文件系统等,通过这项措施避免芯片由于文件被攻击且无法恢复后不可使用,只能更换的情况,从而降低了用户使用成本。

根据本发明的另一方面,提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,其特征在于,当所述指令由处理器执行时,使得处理器执行如上文所述的任意一种方法。本发明中所称的计算机可读介质包括各种类型的计算机存储介质,可以是通用或专用计算机能够存取的任何可用介质。举例而言,计算机可读介质可以包括RAM、ROM、EPROM、E2PROM、寄存器、硬盘、可移动盘、CD-ROM或其他光盘存储器、磁盘存储器或其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码单元并能够由通用或特定用途计算机、或者通用或特定用途处理器进行存取的任何其他临时性或者非临时性介质。如本文所使用的,盘(disk)和碟(disc)包括紧致碟(CD)、激光碟、光碟、数字多用途光碟(DVD)、软盘和蓝光碟,其中盘通常磁性地复制数据,而碟则用激光来光学地复制数据。上述的组合也应当包括在计算机可读介质的保护范围之内。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读写信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。

鉴于以上内容可见,本发明的方案的一些实施例与现有技术相比,具有以下优点中的至少译者:(1)选用BootROM作为可信根,安全性得到极大增强;(2)根据异构多核芯片可能的应用场景,使用启动引导模块管理和维护多条可信链,确保了整个启动过程的安全可靠;(3)根据启动文件的大小分别制定了不同的启动文件安全机制,该机制能在一定程度上恢复遭破坏的启动文件,与当前做法相比,该机制提高了系统抵抗攻击和防范刷新失败等风险的能力;(4)设计了异构多核系统启动过程中的引导机制,该机制能有效管理系统中的多个文件,并从中选取最优的启动路径,此外,还提供了启动故障时的系统恢复机制,从而保障了系统的安全,提高了系统的可用性,有利于减少用户损失和抱怨。

以上例子主要说明了本发明的基于异构多核芯片的启动方法以及计算机可读存储介质,尽管只对其中一些本发明的实施方式进行了描述,但是本领域普通技术人员应当了解,本发明可以在不偏离其主旨与范围内以许多其他的形式实施。因此,所展示的例子与实施方式被视为示意性的而非限制性的,在不脱离如所附各权利要求所定义的本发明精神及范围的情况下,本发明可能涵盖各种的修改与替换。

17页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:场境粘贴目标预测

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!