CN111095205A - 用于片上系统的预启动环境的多核框架 - Google Patents
用于片上系统的预启动环境的多核框架 Download PDFInfo
- Publication number
- CN111095205A CN111095205A CN201880059809.8A CN201880059809A CN111095205A CN 111095205 A CN111095205 A CN 111095205A CN 201880059809 A CN201880059809 A CN 201880059809A CN 111095205 A CN111095205 A CN 111095205A
- Authority
- CN
- China
- Prior art keywords
- processor
- soc
- boot
- message
- buffer
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4405—Initialisation of multiprocessor systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Stored Programmes (AREA)
Abstract
本文描述了各个方面。在一些方面,本公开提供了一种在片上系统SoC的预启动环境中实现多核框架的方法,所述SoC包括多个处理器,所述多个处理器包括第一处理器和第二处理器。所述方法包含由所述第一处理器发起将所述SoC启动到预启动环境中。所述方法进一步包含由所述第一处理器调度第二处理器对一或多个启动任务的执行。所述方法进一步包含由所述第二处理器在所述预启动环境中执行所述一或多个启动任务。所述方法进一步包含与所述第二处理器执行所述一或多个启动任务并行地由所述第一处理器执行一或多个另外的任务。
Description
相关申请的交叉引用
本申请要求于2018年9月20日提交的美国申请第16/137,226号的优先权,所述美国申请要求于2017年9月25日提交的美国临时专利第62/562,738号的权益。临时申请的内容通过全文引用的方式并入本文。
技术领域
本公开的教导总体上涉及片上系统(SoC)集成电路设计,并且在某些方面,涉及SoC的预启动环境。
背景技术
计算装置是普遍存在的。一些计算装置是便携式的,如移动电话、平板计算机和膝上型计算机。随着此类便携式计算装置的功能的增加,所需的计算或处理功率以及总体上支持此类功能的数据存储容量也增加。除了这些装置的主要功能之外,许多装置还包含支持外围功能的元件。例如,蜂窝电话可以包含实现并支持蜂窝电话呼叫的主要功能和静态相机、视频相机、全球定位系统(GPS)导航、网络浏览、发送和接收电子邮件、发送和接收文本消息、按键通话能力等的外围功能。这些便携式装置中的许多便携式装置包含片上系统(SoC),以在特定装置上实现一或多个主要功能和外围功能。
SoC总体上包含嵌入集成电路或芯片中并耦接到本地总线的多个中央处理单元(CPU)核。CPU核可以被进一步布置成一或多个计算集群。SoC总体上可以进一步包含硬件组件和其它处理器。例如,SoC可以包含分组成一或多个子系统的一或多个CPU、具有多个核的CPU、一或多个数字信号处理器等。
与如台式计算机和服务器计算机等大型计算装置一样,SoC在通电时依赖于启动序列或启动代码。启动序列是在向SoC首次施加电力时SoC所执行的初始操作集。启动代码实现了初始化并启动SoC(例如,以运行操作系统(OS))的过程(例如,自举)。出于快速存取、低复杂性、空间效率、低成本和安全性的原因,启动代码通常存储在只读存储器(ROM)中。
启动序列可以利用内部存储器(例如,在与SoC相同的芯片上的片上存储器,如静态随机存取存储器(SRAM))和复杂的驱动器以便安全地启动SoC以及外部存储器(例如,在与SoC相同的芯片外的片外存储器,包含动态随机存取存储器(DRAM),如双数据速率(DDR)同步DRAM(SDRAM)、低功率DDR(LPDDR)等),如以便节省在SoC具有需要更多内存来启动的更多功能时所使用的内部存储器的量的成本。外部存储器可以与SoC堆叠(例如,应用处理器、调制解调器芯片等)、可以被配置成层叠封装设计、可以完全是外部的(例如,不在与SoC相同的封装上)等。
作为启动序列的一部分,为了启动SoC的硬件组件和其它处理中的每个硬件组件或处理器或者硬件组件组或处理器组,可以有一系列启动加载器和切换安全可执行件(例如,固件可执行件等,也称为固件映像)。具体地,SoC的硬件组件和其它处理中的每个硬件组件或处理器可能需要使用特定硬件组件的固件映像来启动(例如,安全地启动)。可以使用链加载方法通过执行固件映像中的每个固件映像来启动SoC的各种硬件组件。SoC上的硬件组件的数量越多,需要执行的SoC的固件映像的数量就越多。因此,SoC的启动时间(例如,用于组件的安全启动和非安全启动)是固件映像的数量的函数。
另外,硬件组件中的一或多个硬件组件的启动可以是受到保护的,如以便满足某些应用中对强完整性检查、认证或其它安全性算法的要求,从而确保固件映像未被篡改或损坏并且源自预期方。因此,SoC可以实施哈希算法(例如,SHA256、SHA384、SHA512等)、加密算法(例如,AES变体)和/或数字签名算法(例如,RSA 2K、RSA 4K、ECC P384等),以检查固件映像的完整性和认证。进一步地,即使未实现安全启动,仍可以使用哈希算法如在从闪存媒体或无闪存接口或互连(例如,USB、PCIe等)启动时强制执行固件映像的完整性检查。这些各种算法可以在SoC上的硬件或软件中实施并且由于计算复杂性而可能导致SoC的启动时间增加。固件映像的数量越多,此类算法在固件映像上运行的时间就越长,从而增加了启动时间。
在某些情景中,SoC可能需要满足某些启动时间关键性能指标(KPI)度量。例如,SoC的某些组件可能需要在某些时间段(例如,约500毫秒)内启动,以满足KPI(例如,使第一寿命符号通电、使显示器上的闪屏通电、使OS主屏幕通电、在调制解调器或WiFi或其它子系统启动并准备连接到网络时通电、使汽车的后置相机、安全启动对应装置等通电)。随着SoC上的组件数量的增加,满足KPI会变得困难。因此,需要减少SoC启动时间。
统一可扩展固件接口(UEFI)是定义OS与OS在其上执行的硬件平台(例如,SoC)之间的软件接口的规范。例如,UEFI区分预启动环境(例如,在OS在SoC上执行之前)与其中OS在SoC上执行的启动后环境。这允许OS以跨硬件的方式设计,因为软件接口创建了OS与SoC之间的接口。UEFI规范以及平台初始化(PI)规范定义了包含SoC的一系列启动阶段(例如,安全(SEC)阶段、预EFI初始化阶段(PEI)、驱动器执行环境(DXE)阶段、启动装置选择(BDS)阶段、OS加载器阶段等)的预启动环境(例如,在启动过程完成并且OS完全运行之前)。预启动环境可以通过在SoC处加载并执行实现预启动环境的固件映像来实施。预启动环境可以提供某些驱动器、框架、协议和接口并且还允许某些应用在预启动环境中在SoC上运行。例如,OS可以先在加载OS的预启动环境中执行启动管理器应用。还可以在预启动环境中运行其它应用,如测试和验证CPU核、存储器等的功能的应用;(例如,通过快速启动)将固件映像(例如,在工厂)编程到SoC的应用;等。
发明内容
以下呈现了对本公开的一或多个方面的简化概括,以提供对此类方面的基本理解。此概括不是对本公开的所有设想特征的全面概览,并且既不旨在标识本公开的所有方面的关键元素或重要元素,也不旨在描绘本公开的任何或所有方面的范围。其唯一的目的是以简化的形式呈现本公开的一或多个方面的某些概念,作为随后呈现的更详细的描述的序言。
在一些方面,本公开提供了一种在片上系统(SoC)的预启动环境中实现多核框架的方法,所述SoC包括多个处理器,所述多个处理器包括第一处理器和第二处理器。所述方法包含由所述第一处理器发起将所述SoC启动到预启动环境中。所述方法进一步包含由所述第一处理器调度第二处理器对一或多个启动任务的执行。所述方法进一步包含由所述第二处理器在所述预启动环境中执行所述一或多个启动任务。所述方法进一步包含与所述第二处理器执行所述一或多个启动任务并行地由所述第一处理器执行一或多个另外的任务。
在一些方面,本公开提供了一种片上系统(SoC),所述SoC包括第一处理器和第二处理器。所述第一处理器被配置成发起将所述SoC启动到预启动环境中。所述第一处理器被配置成调度第二处理器对一或多个启动任务的执行。所述第一处理器被配置成与所述第二处理器执行所述一或多个启动任务并行地执行一或多个另外的任务。所述第二处理器被配置成在所述预启动环境中执行所述一或多个启动任务。
在一些方面,本公开提供了一种非暂时性计算机可读存储媒体,所述非暂时性计算机可读存储媒体存储有指令,所述指令在被包括包含第一处理器和第二处理器的多个处理器的片上系统(SoC)执行时使所述SoC执行在所述SoC的预启动环境中实现多核框架的方法。所述方法包含由所述第一处理器发起将所述SoC启动到预启动环境中。所述方法进一步包含由所述第一处理器调度第二处理器对一或多个启动任务的执行。所述方法进一步包含由所述第二处理器在所述预启动环境中执行所述一或多个启动任务。所述方法进一步包含与所述第二处理器执行所述一或多个启动任务并行地由所述第一处理器执行一或多个另外的任务。
在随后对详细说明进行审阅后,将更加充分地理解本发明的这些方面和其它方面。在结合附图审阅下面对本发明的具体的示范性实施例的说明之后,本发明的其它方面、特征和实施例对于本领域普通技术人员来说将变得显而易见。虽然可以相对于下面的某些实施例和附图讨论本发明的特征,但本发明的所有实施例可以包含本文所讨论的优势特征中的一或多个优势特征。换句话说,虽然可以将一或多个实施例讨论成具有某些优势特征,但根据本文所讨论的本发明的各个实施例,也可以使用此类特征中的一或多个特征。以类似的方式,虽然下面可以将示范性实施例讨论成装置、系统或方法实施例,但应理解的是,此类示范性实施例可以在各种装置、系统和方法中实施。
附图说明
为了可以详细地理解本发明的上述特征的方式,可以通过参考各方面来获得上面简要总结的更具体的描述,附图中展示了所述方面中的一些方面。然而,应注意的是,附图仅展示了本公开的某些典型方面并且因此不应被认为是限制本公开的范围,因为本发明可以承认其它同等有效的方面。
图1是根据本公开的某些方面的片上系统(SoC)的简化示意图。
图1A是展示了其中在预启动环境中实现仅单个核的SoC的示例常规启动的框图。
图1B是展示了根据本公开的某些方面的其中在预启动环境中实现多个核的SoC的示例启动的框图。
图2是根据本公开的某些方面的支持多核的预启动环境(multicore-capablepre-boot environment)的框架的框图。
图3展示了根据本公开的某些方面的代码随时间推移在启动捆绑处理器(BSP)和辅助处理器(AP)上的执行。
图4是根据本公开的某些方面的在AP上执行的应用如何向BSP请求服务的信号流程图。
图5是展示了根据本公开的某些方面的用于在片上系统(SoC)的预启动环境中实现多核框架的示例操作的流程图。
图6是展示了根据本公开的某些方面的用于在片上系统(SoC)的预启动环境中实现多核框架的示例操作的流程图。
具体实施方式
以下结合附图阐述的详细说明旨在作为对各种配置的说明并且不旨在表示可以在其中实践本文所描述的概念的仅有配置。出于提供对各种概念的透彻理解的目的,详细说明包含具体细节。然而,对本领域技术人员来说将显而易见的是,这些概念可以在没有这些具体细节的情况下实践。在一些情况下,以框图形式示出了众所周知的结构和组件以避免模糊此类概念。
尽管本公开的教导是根据集成电路(例如,SoC)展示的,但是所述教导适用于其它领域。所公开的教导不应被解释为限于SoC设计或所展示的实施例。所展示的实施例仅仅是用于描述和展示本文公开的发明教导的实例的工具。进一步地,尽管用于加载用于启动的固件映像的某些技术是关于外部存储器进行描述的,但是可以使用类似的技术以从如超高速装置/接口等其它组件加载用于启动的固件映像。
图1是根据本公开的某些方面的示范性SoC 100的简化示意图。SoC 100可以通过如高速外围组件互连(PCIe)、通用串行总线(USB)、串行外围接口(SPI)等一或多个芯片到芯片接口与其它芯片互连。在某些方面,所述一或多个芯片到芯片接口中的一个芯片到芯片接口可以用于启动SoC 100。
如所示出的,SoC 100包含CPU子系统(CPUSS)105。CPUSS 105包含多个CPU核111、112、121和122。尽管CPUSS 105被示出为具有特定数量的CPU核,但是应注意的是,CPUSS105中可以有另外的核或更少的核。进一步地,CPU核111和112是集群110的一部分,并且CPU核121和122集群120的一部分。再次,尽管被示出为具有特定数量的CPU核,但CPUSS 105可以包含另外的集群或更少的集群。进一步地,每个集群可以包含相同数量或不同数量的CPU核。CPU核111、112、121和122可以是同一类型或者可以是不同的类型(例如,ARM设计、非ARM设计等)。进一步地,给定集群(例如,CPU集群110或120)中的CPU核可以是同一类型或者可以是不同的类型(例如,集群内big.LITTLE设计、基于集群的big.LITTLE设计等)。big.LITTLE设计可以指包含提供电池节省的低功率、较慢的处理器核(例如,LITTLE(小))以及提供更好的处理性能的高功率、较快的处理器核(例如,big(大))的计算架构。
进一步地,CPUSS 105可以包含如一或多个缓存等CPU资源。如所示出的,集群110和120分别包含缓存115和125。在某些实施例中,集群110和120的CPU核可以分别共享缓存115和125以供存储器存储。应注意的是,CPUSS 105可以包含另外的CPU资源或不同于所示出那些CPU资源的CPU资源。例如,在一些方面,一或多个CPU核可以具有其自己的相关联的缓存、一或多个集群可以具有其自己的相关联的(例如,集群的CPU核共享的)缓存和/或CPUSS 105可以包含一或多个集群和/或CPU核共享的一或多个缓存。SoC 100进一步可以包含另外的CPUSS 103和如DSPSS 107和DSPSS 109等一或多个数字信号处理器子系统(DSPSS)。在某些方面,CPUSS 103、DSPSS 107和DSPSS 109中的每一个可以分别具有其自己的SRAM 152、154和156,用作(例如,代替)用于读取数据和写入数据的缓存。CPUSS 103被示出为具有单个CPU核114,但是可以包含另外的核、缓存等。
SoC 100进一步包含全部被示出为SoC 100的内部(例如,片上)组件的复位控制器130、电子熔丝组件140、静态随机存取存储器(SRAM)150、只读存储器(ROM)160、动态RAM(DRAM)控制器170、存储控制器180和启动接口(I/F)控制器183。SoC 100的内部组件通过总线185耦接在一起。进一步地,DRAM控制器170通过总线192耦接到DRAM 190,所述DRAM在SoC100外部(例如,片外)。DRAM 190的物理实施方案可以与SoC 100堆叠、可以被配置为层叠封装设计、可以完全在外部(例如,不是与SoC 100相同的封装的一部分)等。存储控制器180通过总线197耦接到在SoC 100外部(例如,片外)的存储装置195(例如,闪存装置)。除了缓存115和125之外,SRAM 150、DRAM 190和存储装置195还可以为SoC 100提供存储容量。
在一些方面,在系统启动期间,复位控制器130被配置成使CPUSS 105的CPU核从复位中释放。在一些方面,所释放的CPU核然后被配置成开始执行来自ROM 160的如如所示出的ROM启动加载器BL0等代码/数据(例如,启动代码),以开始启动SoC 100。ROM 160(例如,启动ROM)是包含CPUSS 105在初始通电期间或在看门狗复位条件(例如,在通过SoC 100上未复位或未“超时”的定时器检测到的SoC 100的故障之后)下执行的一或多个代码(例如,启动代码)的集成电路。在一些方面,ROM在固件中实现。在一些方面,CPUSS 105通过运行存储在存储装置195中以用于启动SoC 100的可执行件、数据图像等(包含SoC 100的各种硬件组件)来从存储装置195(例如,安全地)启动。例如,CPUSS 105将固件映像从存储装置195加载到DRAM 190中以供执行。在一些方面,CPUSS 105从传输层而不是存储装置(例如,无闪存传输层)(例如,安全地)启动。例如,CPUSS 105可以通过将经由传输层接收的启动SoC 100的固件映像加载到DRAM 190中以供执行来从传输层启动。具体地,SoC 100可以利用启动I/F控制器183通过芯片到芯片接口与另一个组件(例如,另一个SoC)通信。例如,SoC 100的启动I/F控制器183可以控制如PCIe 188或USB 186等SoC 100的芯片到芯片接口(例如,传输层)与另一个组件的芯片到芯片接口通信。因此,SoC 100可以通过启动I/F控制器183经由传输层通信。
在某些方面,CPUSS 105通过在执行用于启动的固件映像之前检查固件映像的完整性(例如,使用加密签名协议、信任链、认证标签、校验和等)来安全地启动。
在某些方面,CPUSS 105被配置成通过运行被示出为加载在DRAM 190、SRAM 150、SRAM 152、SRAM 154和SRAM 156中的固体映像来启动。例如,CPUSS 105执行来自ROM 160的ROM启动加载器BL0。ROM启动加载器BL0使CPUSS 105执行SRAM 150中的启动加载器BL1a。启动加载器BL1a可以初始化DRAM控制器170和DRAM 190。在某些方面(例如,在来自闪存装置的启动配置中),启动加载器BL1a还初始化存储控制器180和存储装置195并且使CPUSS 105将固件映像从存储装置195加载到DRAM 190中以供执行。在某些方面(例如,在无闪存启动配置中),代替初始化存储控制器180和存储装置195,启动加载器BL1a还初始化启动I/F控制器183,并且使CPUSS 105将经由传输层接收的固件加载到DRAM 190中以供执行。因此,SoC 100可以从DRAM 190存取固件映像。BL1a可以进一步通过控制如启动加载器BL2、BL3和BL4、TZ(例如,安全世界固件)、HYP(例如,管理程序固件)和OS1(例如,操作系统)等另外的固件映像在应用处理器(例如,CPUSS 105)子系统上的执行来启动SoC 100。进一步地,在某些方面,启动过程期间启动的其它子系统固件映像包含PWR(例如,电源固件)、CPUSS103FW1(例如,CPUSS 103固件)、CPUSS103 OS1(例如,CPUSS 103操作系统)、DSPSS107 FW1(例如,DSPSS 107固件)和DSPSS109 FW1(例如,DSPSS 109固件)。在某些方面,BL1a可以进一步通过控制其它子系统对另外的固件映像的执行(如由DSPSS 107执行BL1b和由CPUSS 103执行BL1c)来启动SoC 100。在某些方面,通过BL1a启动某些早期固件映像,并且通过如OS1等操作系统启动剩余的固件映像。
常规地,BL0、BL1a、BL2、BL3和BL4的执行是在CPUSS 105的单个核(例如,CPU核111)上进行的,并且如OS1内核等操作系统是在SoC 100上执行的第一固件映像,所述第一固件映像使调度器能够实现多核优化,以允许CPUSS 105的多个CPU核在启动期间执行另外的固件映像。例如,BL2和BL3可以实施并实现预启动环境(例如,如UEFI规范所定义的),并且BL4可以是加载OS的启动管理器。
图1A是展示了其中在预启动环境中实现仅单个核的SoC 100的示例常规启动的框图。在图1A中,(例如,如通过BL0初始化的)CPU核111执行BL1a。CPU核111进一步执行BL2、BL3和BL4。如所示出的,只有当OS开始执行时,OS才可以调度代码(例如,固件映像)在如CPU核112、121和122等其它核上执行。
应注意的是,在某些方面,可以有更多或更少的启动加载器。进一步地,应注意的是,启动加载器中的更多或更少个启动加载器可以映射到实施并实现(例如,如UEFI规范所定义的)预启动环境的启动阶段。例如,BL0、BL1a、BL2、BL3和BL4全部可以实施并实现预启动环境。
具体地,UEFI规范和如Uboot、coreboot等大多数常规的启动加载器或预启动环境使用SoC的单个CPU核。例如,在预启动环境中运行的应用使用SoC的单个CPU核,并且SoC的启动仅可以使用SoC的单个CPU核进行。
多个CPU核的使用常规地仅在执行操作系统的内核时发生。具体地,内核包含复杂的完整调度器以利用多个CPU核。
因此,本文的某些方面涉及在不要求(例如,OS或启动加载器的)内核具有在SoC上运行的完整调度器的情况下,实现在预启动环境中使用SoC的多个CPU核。有利的是,这可以减少用于启动SoC的启动时间。例如,在某些方面,多个CPU核的使用可以在加载BL3固件映像时实现。所述多个CPU核可以是单个CPUSS的CPU核和/或多个CPUSS的CPU核。
在某些方面,SoC 100的一个CPU核可以用作主要核以启动SoC 100。例如,CPU核111可以用作主要核并且称为启动捆绑处理器(BSP)111。BSP 111本身可以例如加载和运行固件映像BL0、BL1a和BL2。进一步地,BSP 111可以具有BSP 111可获得的并且在所述BSP上可执行的核心预启动环境堆栈(例如,UEFI堆栈)。例如,如定期且未缓存存储器分配、串行输入/输出(I/O)等服务可以作为预启动环境堆栈的一部分实施并且是BSP 111可获得的并且在所述BSP上可执行。
进一步地,SoC 100的一或多个另外的核可以用作次要核以在预启动环境中运行过程。例如,CPU核112、121和122可以用作次要核并且称为辅助处理器(AP)112、121和122。BSP 111以及作为多个CPU核的AP 112、121和122可以使用本文所讨论的技术执行用于加载和运行固件映像BL3的过程。AP 112、121和122可以不具有其在本地可获得的核心预启动环境堆栈,并且因此,作为核心预启动环境堆栈的一部分提供的服务可能无法由AP 112、121和122执行。然而,AP 112、121和122可以用于在每个CPU核处执行在本地不需要核心预启动环境堆栈的功能。应注意的是,尽管某些方面在本文中被描述为在预启动环境中实现单个CPUSS的多个核,但是可以使用类似的技术跨预启动环境中的多个CPUSS实现多个核。
因为AP不具有其可获得的核心预启动环境堆栈,所以为了执行作为核心预启动环境堆栈的一部分提供的服务,本文的某些方面涉及用于允许AP利用BSP来执行作为核心预启动环境堆栈的一部分提供的服务的技术和机制。这有利地允许在预启动环境中使用包含BSP和AP的多个CPU核。
在某些方面,AP 112、121和122各自被配置成运行代码以设置AP向BSP 111请求服务,其中所述代码可以被称为辅助内核(AK)。另外,AK可以为AP 112、121和122中的每一个建立堆栈、存储器管理单元(MMU)、缓存、翻译后备缓冲器(TLB)、定时器等。进一步地,当AP112、121和122未运行其它代码时,AK可以在所述AP上运行空闲任务。空闲任务可以是将AP保持在低功率状态的代码,如等待中断(WFI)状态,其中所述AP等待来自BSP 111的中断以执行任务或执行应用。
图1B是展示了根据本公开的某些方面的其中在预启动环境中实现多个核的SoC100的示例启动的框图。本文描述的其中在预启动环境中实现多个核的用于启动的技术可以用于启动与关于图1A描述的常规技术相同的类型的SoC,但是在预启动环境中实现多个核,代替仅单个核。在图1B中,(例如,如通过BL0初始化的)BSP 111执行BL1a。CPU BSP 111进一步执行BL2、BL3和BL4。然而,不同于图1A,一旦BL3被执行并且在OS执行之前,AP 112、121和122中的每一个可以开始执行代码(例如,固件映像的任务)。具体地,作为BL3执行的一部分,AP 112、121和122中的每一个执行AK,这如将讨论的进一步使AP能够向BSP 111请求服务。
BSP 111以及AP 112、121和122全部可以能够访问(例如,被称为邮箱的)共享存储器以在BSP 111与AP 112、121和122之间进行处理器间通信(IPC)。共享存储器可以是处理器可访问的任何适合的存储器(例如,未缓存存储器),如SRAM 150、DRAM 190等中的一或多个。例如,AP 112、121和122可以利用邮箱来请求由BSP 111执行服务,并且BSP 111可以利用邮箱向AP 112、121和122返回服务的结果。在某些方面,在初始运行时或在处于WFI状态时接收软件产生的中断(SGI)之后,在AP上运行的AK被配置成使AP检查邮箱以确定要在AP上执行的下一个任务。如果邮箱中没有为AP调度任务,则AP返回到运行空闲任务。在某些方面,AK可以在AP处禁用快速中断请求(FIQ)和中断请求(IRQ),以实现SGI。
在某些方面,邮箱包含每个AP的标记(例如,消息(MSG)标记和确认(ACK)标记)组和对应的消息缓冲器。例如,BSP 111和AP 112可以利用MSG标记、ACK标记和消息缓冲器来进行IPC。MSG标记和ACK标记中的每一个一次仅被一个实体(例如,BSP或AP)所拥有,这意味着仅拥有实体有权更改或写入标记值(但是任何其它实体可以能够读取标记值)。对于AP发起的到BSP 111的通信,AP拥有MSG标记并且BSP 111拥有ACK标记。对于BSP 111发起的到AP的通信,BSP 111拥有MSG标记并且AP拥有ACK标记。在某些方面,当MSG标记和ACK标记两者被设为OFF(关闭)值(例如,0)时,对应的消息缓冲器中没有消息。在某些方面,当MSG标记被设为ON(开启)值(例如,1)并且ACK标记被设为OFF时,消息已经由源实体放入对应的消息缓冲器中发送到目的实体。在某些方面,当MSG标记为ON并且ACK标记为ON时,消息已经被目的实体确认。在某些方面,当MSG标记为OFF并且ACK标记为ON时,源实体已经从目的实体接收了确认。
在某些方面,提供用于调度的技术以用于将任务从BSP 111分配到AP 112、121和122。例如,核心预启动环境堆栈可以使允许模块(例如,在BSP 111上运行的应用、驱动器、库等)请求使用核心预启动环境堆栈执行服务的协议实现。在某些方面,在预启动环境中提供(例如,被称为EFI_MP_SCHED_PROTOCOL的)多核调度协议。多核调度协议可以被配置成将CPU核的标识符(例如,编号)和CPU核要执行的代码(例如,函数)视为输入并且然后使CPU核执行代码。在某些方面,代替多核调度协议接收标识特定CPU核的输入以运行代码,多核调度协议可以选择CPU核来运行代码(例如,利用负载平衡算法)。例如,多核调度协议可以在BSP 111上执行以实现由AP 112、121和122执行代码。当BSP 111接收对多核调度协议的调用以调度代码在特定AP上的执行时,运行多核调度协议的BSP 111调度代码在特定AP上的执行。例如,多核调度协议(例如,在SoC 100上的适合的存储器(如SRAM、DRAM等)中)保持跟踪AP 112、121和122中的每一个的状态,包含AP是否处于断电状态、低通电状态(例如,WFI状态)或者运行另一个任务的通电状态。
多核调度协议然后确定如何基于AP的状态调度代码在特定AP上的执行。例如,如果AP处于断电状态,多核调度协议使AP通电。例如,BSP 111可以运行实施用于为CPU核上电和掉电的电源状态协调接口(PSCI)的固件映像。在某些方面,根据如ARM所定义的PSCI规范实施PSCI。BSP 111进一步使AP运行AK以设置并管理AP。AP然后检查邮箱并运行被调度用于在邮箱中执行的代码。如果AP处于低通电状态,BSP 111产生SGI来唤醒AP以检查邮箱并运行被调度用于在邮箱中执行的代码。例如,AP检查以查看邮箱中是否设置了MSG标记并且如果是则执行对应的缓冲器中的代码。如果AP处于运行对应于其它代码的另一个任务的通电状态,则BSP 111在调度代码以供执行之前等待直到任务完成(例如,AP进入低功率状态)。
在某些方面,调度技术进一步提供在BSP 111上运行的(例如,被称为AKUefiDriverEntryPoint的)进入点库,所述进入点库用于充当BSP 111与AP之间的桥梁以用于为在AP上运行的代码设置进入点(例如,用于将控制转移到要在AP上运行的代码)。例如,当AP上的AK需要在AP上运行代码(例如,启动应用)时,AK可能需要将进入点参数传送到代码。进入点库通过用关于进入点参数的信息(例如,消息、AP的标识符、代码的标识符、进入点等)建立邮箱来为AK建立桥梁。然后,AK可以从邮箱中读取信息,并且在AP上运行的进入点功能可以基于供代码在AP上运行的进入点参数设置进入点。
在某些方面,提供了用于AP 112、121和122请求由BSP 111执行服务的技术。例如,在某些方面,在预启动环境中提供(例如,被称为EFI_MP_IO_PROTOCOL的)多核I/O协议。多核I/O协议可以被配置成注册用于访问BSP 111以在BSP 111与AP之间执行通用I/O的“端口”。例如,AP 112、121和122各自可以有单独的端口来与BSP 111通信。在某些方面,每个端口可以用于针对几种不同的服务类型(例如,存储器分配、串行记录(例如,使用通用异步接收器-发射器(UART))等)传送信息并且在BSP 111和对应的AP两者处注册。BSP 111和AP可以被配置成使用消息传递接口(MPI)语义来发送/接收消息,如以便处理来自AP的远程程序调用(RPC)请求。在某些方面,多核I/O协议用于在BSP 111处注册端口。
在某些方面,每当在BSP 111或AP 112、121和122上运行时,代码集或任务各自被传递允许BSP 111或AP 112、121和122使用预启动环境堆栈提供的服务的系统表。系统表可以包含启动服务表和运行时间服务表。系统表可以包含指向包含对应于服务的代码的存储器位置的指针。当通过在BSP或AP上运行的代码调用服务时,系统表可以用于确定在哪里找到对应于服务的代码以供执行。
图2是根据本公开的某些方面的支持多核的预启动环境的框架的框图。
如所示出的,驱动器和库205对应于在BSP 111上执行的核心框架驱动器和库。在BSP 111上执行的(例如,被称为MpCoreDxe的)核心驱动器212是实施所讨论的调度和I/O服务的核心驱动器。核心驱动器212包含(例如,被称为MpIoLib的)I/O库214,所述I/O库实施多核I/O协议。I/O库214与实施预启动环境堆栈的一些服务的(例如,被称为MpAKServicesDxe的)服务驱动器220一起工作,以向AP 112、121和122提供服务。如所示出的,I/O库214可以注册如所讨论的由服务驱动器220提供服务的端口。
核心驱动器212进一步包含实施多核调度协议的(例如,被称为MpSchedLib的)调度库216。调度库与进入点库218一起工作以便为在AP上运行的代码设置进入点。
进一步地,库210对应于在AP 112、121和122上执行的库。(例如,被称为AKSerialPortLib的)串行端口库222是为AP提供串行I/O支持的库。(例如,被称为AKBootServicesTableLib的)启动服务表库224是提供如存储器分配等启动服务支持的库。(例如,被称为AKDXEServicesTableLib的)DXE服务表库226是提供如未缓存存储器分配等DXE服务支持的库。串行端口库222、启动服务表库224和DXE服务表库226中的每一个与(例如,被称为AuxKernelLib的)AP I/O实体228通信,所述AP I/O实体与I/O库214通信以通过BSP 111与AP 112、121和122之间的端口执行I/O。在某些方面,AP 112、121和122各自处的AP I/O实体228分别在AP 112、121和122处注册端口。AP 112、121和122各自处的AP I/O实体228还可以分别为AP 112、121和122提供通用应用编程接口(API)以与BSP 111通信。
图3展示了根据本公开的某些方面的代码随时间推移在BSP 111和AP 112和121上的执行。如所示出的,存储器305展示了当在BSP 111和AP 112和121上执行代码时存储器(例如,DRAM 190)的状态。
行310展示了代码在BSP 111处的执行。为了执行代码(例如,被示出为SampleMpTest的应用),进入点实体312接收指向在BSP 111上执行的服务的实际代码的系统表350(例如,UEFI系统表)。进入点实体312可以被称为AKDriverEntryPoint,所述AKDriverEntryPoint可以对应于进入点库218。进入点实体312然后调用调度库216以请求在AP 112上执行代码。在所示出的实例中,调度库216确定AP 112处于断电状态并且因此利用PSCI调用来使AP 112通电或打开所述AP并使AP 112运行AK 314。
行315展示了代码在AP 112处的执行。AP 112执行AK 314(例如,所述AK可以对应于AP I/O实体228)。进一步地,AK 314向SampleMpTest 316传递系统表355以在AP 112上执行SampleMpTest 316。系统表355与系统表350的不同之处在于,系统表355不直接指向要在AP 112上运行的核心预启动环境堆栈的服务,而是包含指向回调到BSP 111以执行核心预启动环境堆栈的服务的功能的指针。因此,SampleMpTest 316对服务的任何调用都会回调到BSP 111以供执行。然后在AP 112上执行SampleMpTest 316。当SampleMpTest 316运行完成时,AP 112返回到执行AK 314,所述AK可以运行空闲任务并将AP 112置于低功率状态。
由于BSP 111需要在AP 112上而不是在BSP 111上执行SampleMpTest 316,因此BSP 111可以要求与在AP 112上执行SampleMpTest 316并行地在AP 121和/或BSP 111上执行另一个程序(例如,与SampleMpTest 316相同或不同的)SampleMpTest 318。例如,进入点实体312在BSP 111上执行并且接收系统表350。进入点实体312然后调用调度库216以请求在AP 121上执行代码。在所示出的实例中,调度库216确定AP 121处于低功率状态并且因此利用SGI来唤醒AP 121。
行325展示了代码在AP 121处的执行。在AP 121上执行的AK 314向SampleMpTest318传递系统表360以在AP 121上执行SampleMpTest 318。系统表360与系统表350的不同之处在于,系统表355不直接指向要在AP 121上运行的核心预启动环境堆栈的服务,而是包含指向回调到BSP 111以执行核心预启动环境堆栈的服务的功能的指针。因此,SampleMpTest318对服务的任何调用都会回调到BSP 111以供执行。然后在AP 121上执行SampleMpTest318。当SampleMpTest 318运行完成时,AP 121返回到执行AK 314,所述AK可以运行空闲任务并将AP 121置于低功率状态。
在某些方面,在SampleMpTest 316和SampleMpTest 318分别在AP 112和AP 121上运行时,BSP 111可以自由地执行其它代码(例如,被示出为Foo 320)。
图4是根据本公开的某些方面的在AP上执行的应用如何向BSP请求服务的信号流程图。
如所示出的,SampleMpTest 316可以在AP 112上运行。在步骤402处,SampleMpTest316向未缓存存储器分配库490请求未缓存存储器,这可以是核心预启动环境堆栈提供的服务。在步骤404处,未缓存存储器分配库490调用启动服务表库224。启动服务表库224访问系统表355以请求用于分配存储器的服务(未示出)。在步骤406处,启动服务表库224调用在AP 112上运行的AP I/O实体228以请求BSP 111分配存储器。在步骤408处,API/O实体228被配置成在邮箱中为BSP 111设置信息。例如,AP I/O实体228将对应于从AP112到BSP 111的通信的MSG标记设为ON并且在对应的信息缓冲器中包含请求分配存储器的消息。
在BSP 111上运行的核心驱动器212被配置成(例如,定期)检查邮箱,以确定是否有来自AP的针对BSP 111的任何消息。因此,核心驱动器212确定对应于AP 112的MSG标记被设为ON,并且因此对应的消息缓冲器中有消息。在步骤410处,核心驱动器212将对应于AP112的ACK标记设为确认消息的ON。AP I/O实体228然后将对应于AP 112的MSG标记设为OFF,并且核心驱动器212将对应于AP 112的ACK标记设为OFF(未示出)。
核心驱动器212然后读取消息缓冲器中的消息并且确定消息正在请求分配存储器。例如,核心驱动器212确定对分配存储器的请求是存储器端口请求。在步骤412处,核心驱动器212调用服务驱动器220来服务用于分配存储器的请求。服务驱动器220实施包含用于分配存储器的端口的端口。在步骤414处,服务驱动器220向核心驱动器212发送向AP 112请求消息存储器中的存储器分配消息的请求,所述存储器分配消息可以包含存储器分配的大小。在步骤416处,核心驱动器212将存储器分配消息返回到服务驱动器220。在步骤418处,服务驱动器220然后调用(例如,被称为UEFIBootServicesTableLib的)服务库,所述服务库访问(例如,使用在步骤404处作出的同一调用)系统表350以请求用于分配存储器的服务。访问系统表350的服务库分配存储器并且在步骤420处将指向所分配的存储器的指针返回到服务驱动器220。在步骤422处,服务驱动器220然后调用核心驱动器212以响应从AP112接收的服务请求。
因此,在步骤424处,核心驱动器212被配置成在邮箱中为AP 112设置信息。例如,核心驱动器212将对应于从BSP 111到AP 112的通信的MSG标记设为ON并且在对应的信息缓冲器中包含包括指向所分配的存储器的指针的消息。
AP I/O实体228确定对应于AP 112的MSG标记被设为ON,并且因此,对应的消息缓冲器中有消息。在步骤426处,AP I/O实体228将对应于AP 112的ACK标记设为确认消息的ON。核心驱动器212然后将对应于AP 112的MSG标记设为OFF,并且AP I/O实体228将对应于AP 112的ACK标记设为OFF(未示出)。
在步骤428处,AP I/O实体228将指向所分配的存储器的指针返回到启动服务表库224。在步骤430处,由于存储器分配请求是针对未缓存存储器的,因此启动服务表库224使所分配的存储器的缓存无效。在步骤432处,启动服务表库224将指向所分配的存储器的指针返回到未缓存存储器分配库490。进一步地,由于访问系统表350的服务库默认分配缓存存储器而不是未缓存存储器,因此未缓存存储器分配库490产生将所分配的存储器的属性改为未缓存存储器(例如,使缓存、TLB等无效)的调用。
在步骤434处,未缓存存储器分配库490调用DXE服务表库226。DXE服务表库226访问系统表355以改变所分配的存储器的属性(未示出)。在步骤436处,DXE服务表库226调用在AP 112上运行的AP I/O实体228以请求BSP 111改变所分配的存储器的属性。AP I/O实体228被配置成在邮箱中为BSP 111设置信息。例如,AP I/O实体228将对应于从AP 112到BSP111的通信的MSG标记设为ON并且在对应的信息缓冲器中包含请求改变所分配的存储器的属性的消息。
尽管未示出,但核心驱动器212确定对应于AP 112的MSG标记被设为ON,并且因此,对应的消息缓冲器中有消息。核心驱动器212将对应于AP 112的ACK标记设为确认消息的ON(未示出)。AP I/O实体228然后将对应于AP 112的MSG标记设为OFF,并且核心驱动器212将对应于AP 112的ACK标记设为OFF(未示出)。
核心驱动器212读取消息缓冲器中的消息并且确定消息正在请求改变所分配的存储器的属性(未示出)。在步骤438处,核心驱动器212调用服务驱动器220来服务用于改变所分配的存储器的属性的请求。在步骤440处,服务驱动器220然后调用(例如,被称为DxeServicesTableLib的)服务库495,所述服务库访问(例如,使用在步骤434处作出的同一调用)系统表350以请求改变所分配的存储器的属性。服务库495改变所分配的存储器的属性并且在步骤442处向服务驱动器220返回属性已经改变的消息。
在步骤444处,服务驱动器220然后在指示属性已经改变的返回消息中从DXE服务表库226返回调用。例如,尽管未示出,但服务驱动器220调用核心驱动器212以响应从AP112接收的服务请求。核心驱动器212被配置成在邮箱中为AP 112设置信息。例如,核心驱动器212将对应于从BSP 111到AP 112的通信的MSG标记设为ON并且在对应的信息缓冲器中包含包括指示属性已经改变的返回消息的消息(未示出)。AP I/O实体228确定对应于AP 112的MSG标记被设为ON,并且因此,对应的消息缓冲器中有消息(未示出)。AP I/O实体228将对应于AP 112的ACK标记设为确认消息的ON(未示出)。核心驱动器212然后将对应于AP 112的MSG标记设为OFF,并且AP I/O实体228将对应于AP 112的ACK标记设为OFF(未示出)。AP I/O实体228在指示属性已经改变的返回消息中从DXE服务表库226返回调用(未示出)。
在步骤446处,由于存储器分配请求是针对未缓存存储器的,因此DXE服务表库226使所分配的存储器的TLB无效。在步骤448处,DXE服务表库226向未缓存存储器分配库490返回指示存储器已经改变的消息。在步骤450处,未缓存存储器分配库490将指向所分配的未缓存存储器的指针返回到SampleMpTest 316。
在预启动环境中使用多个核可以有益地减少启动时间、允许在预启动环境中测试多个核和/或用于下载二进制文件以通过快速启动对SoC进行更快的工厂编程。
图5是展示了根据本公开的某些方面的用于在片上系统(SoC)的预启动环境中实现多核框架的示例操作500的流程图。例如,图5的操作可以由SoC 100或另一个适合的电路执行。
在步骤505处,向一或多个辅助处理器中的第一辅助处理器(例如,AP)提供第一系统表,所述第一系统表被配置成将第一辅助处理器上的服务调用引导到在辅助处理器上运行的第一实体,所述第一辅助处理器上的所述第一实体被配置成(例如,利用共享的存储器空间)与在主处理器(例如,BSP)上运行的第二实体通信。
在步骤510处,向主处理器提供第二系统表,所述第二系统表被配置成使第二实体执行对应于服务调用的功能并且(例如,利用共享的存储器空间)将功能的结果返回到第一实体。
图6是展示了根据本公开的某些方面的用于在片上系统(SoC)的预启动环境中实现多核框架的示例操作600的流程图。例如,图6的操作可以由SoC 100或另一个适合的电路执行。
在步骤605处,SoC的第一处理器发起将SoC启动到预启动环境中(例如,其中在所述预启动环境中,操作系统不在SoC上执行)。在步骤610处,第一处理器调度第二处理器对一或多个启动任务的执行。
在步骤615处,第二处理器在预启动环境中执行所述一或多个启动任务。在步骤620处,与第二处理器执行所述一或多个启动任务并行地,第一处理器执行一或多个另外的任务。
在一些配置中,在不必需偏离本公开的范围的情况下,一或多个术语‘通信(communicate、communicating和/或communication)’可以是指‘接收(receive、receiving、reception)’和/或其它相关或适合的方面。在一些配置中,在不必需偏离本公开的范围的情况下,一或多个术语‘通信’可以是指‘传输(transmit、transmitting和/或transmission)’和/或其它相关或适合的方面。
在本公开中,词语“示范性”用来意指“充当实例、例子或说明”。本文中被描述为“示范性”的任何实施方案或方面不一定应被解释为比本公开的其它方面更优选或更有利。同样地,术语“方面”不要求本公开的所有方面均包含所讨论的特征、优点或操作模式。术语“耦接”在本文中用于指代两个物体之间的直接或间接耦接。例如,如果物体A物理接触物体B并且物体B接触物体C,则即使物体A和C没有直接彼此物理接触,物体A和C仍然可以被视为彼此耦接。例如,即使第一物体从未与第二物体直接物理接触,第一物体也可以耦接到第二物体。术语“电路”和“电路系统”被广泛地使用并且旨在包含电气装置的硬件实施方案和导体的硬件实施方案两者,所述电气装置和所述导体在被连接和配置时在不限制电子电路的类型的情况下实现了执行本公开中描述的功能。
本文所展示的组件、步骤、特征和/或功能中的一或多个可以被重新布置和/或组合成单个组件、步骤、特征或功能或体现在若干个组件、步骤或功能中。在不脱离本文所公开的新颖特征的情况下,还可以添加另外的元件、组件、步骤和/或功能。本文所展示的设备、装置和/或组件可以被配置成执行本文所描述的方法、特征或步骤中的一或多个。本文所描述的新颖算法也可以高效地实施在软件中和/或嵌入到硬件中。
应理解的是,所公开的方法中的步骤的具体顺序或层次是对示范性过程的说明。基于设计偏好,应理解,可以重新布置方法中的步骤的具体顺序或层次。所附方法权利要求书以样本顺序呈现了各个步骤的元素并且除非在本文中有特别说明否则不意指限于所呈现的具体顺序或层次。
提供先前的描述是为了使本领域任何技术人员能够实践本文所描述的各个方面。对这些方面的各种修改对本领域技术人员而言将是显而易见的,并且本文所定义的一般原理可以适用于其它方面。因此,权利要求书不旨在限于本文所示出的方面,而是旨在符合与权利要求书的语言一致的全部范围,其中以单数形式引用元素并不意在指“有且仅有一个”,而是指“一或多个”,除非特别如此说明。除非特别另外声明,否则术语“一些”是指一或多个。指代一系列项目中的“至少一个”的短语是指这些项目的任何组合,包含单个成员。作为实例,“a、b或c中的至少一个”旨在涵盖:a;b;c;a和b;a和c;b和c;以及a、b和c。本领域技术人员已知或之后知道的贯穿本公开的所描述的各个方面的元素的所有结构等效物和功能等效物都通过引用的方式明确地并入本文并且旨在被权利要求书涵盖。此外,本文所公开的任何内容都不旨在贡献给公众,无论此类公开是否在权利要求书中被明确地叙述。除非使用短语“用于……的装置”来明确地叙述元素,或者在方法权利要求书的情况下使用短语“用于……的步骤”来叙述元素,否则不应按照35U.S.C.§112(f)的规定来理解权利要求书元素。
这些设备和方法在详细说明中进行了描述并且在附图中通过各种框、模块、组件、电路、步骤、过程、算法等(统称为“元素”)进行展示。这些元素可以使用硬件、软件或其组合实施。此类元素被实施成硬件还是软件取决于特定的应用和施加到整个系统上的设计约束。
通过举例,元素或元素的任何部分或元素的任何组合可以利用包含一或多个处理器的“处理系统”实施。处理器的实例包含微处理器、微控制器、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、可编程逻辑装置(PLD)、状态机、门控逻辑、离散硬件电路以及被配置成执行贯穿本公开描述的各种功能的其它适合的硬件。处理系统中的一或多个处理器可以执行软件。软件应被广泛地解释成意指指令、指令集、代码、代码段、程序代码、程序、子程序、软件模块、应用、软件应用、软件包、固件、例程、子例程、对象、可执行件、执行线程、规程、函数等,无论其被称为软件、固件、中间件、微代码、硬件描述语言还是其它皆是如此。
因此,在一或多个示范性实施例中,所描述的功能可以在硬件、软件或其组合中实施。如果在软件中实施,则功能可以存储在计算机可读媒体上或作为一或多个指令或代码在计算机可读媒体上进行编码。计算机可读媒体包含计算机存储媒体。存储媒体可以是可以被计算机访问的任何可用媒体。作为实例而非限制,此类计算机可读媒体可以包括RAM、ROM、EEPROM、PCM(相变存储器)、闪速存储器、CD-ROM或其它光盘存储装置、磁盘存储装置或其它磁存储装置、或可以用来以指令或数据结构形式承载或存储期望的程序代码并且可以被计算机访问的任何其它媒体。如本文所用,碟或盘包含压缩盘(CD)、激光盘、光盘、数字通用盘(DVD)、软盘和蓝光盘。上述的组合还应被包含在计算机可读媒体的范围内。
Claims (30)
1.一种在片上系统SoC的预启动环境中实现多核框架的方法,所述SoC包括多个处理器,所述多个处理器包括第一处理器和第二处理器,所述方法包括:
由所述第一处理器发起将所述SoC启动到预启动环境中;
由所述第一处理器调度第二处理器对一或多个启动任务的执行;
由所述第二处理器在所述预启动环境中执行所述一或多个启动任务;以及
与所述第二处理器执行所述一或多个启动任务并行地,由所述第一处理器执行一或多个另外的任务。
2.根据权利要求1所述的方法,其中在所述预启动环境中,操作系统不在所述SoC上执行,并且所述方法进一步包括:
通过加载所述操作系统在所述预启动环境中完成执行;以及
由所述操作系统调度代码在所述第一处理器和所述第二处理器上的并行执行。
3.根据权利要求1所述的方法,其进一步包括:
由所述第二处理器将与所述一或多个启动任务相关的服务调用引导到所述第一处理器;
由所述第一处理器执行对应于所述服务调用的功能;以及
由所述第一处理器向所述第二处理器返回所述功能的结果。
4.根据权利要求3所述的方法,其中所述引导是使用提供到所述第二处理器的第一系统表执行的,所述第一系统表被配置成将所述第二处理器上的所述服务调用引导到在所述第二处理器上运行的第一实体,在所述第二处理器上的所述第一实体被配置成与在所述第一处理器上运行的第二实体通信,并且其中所述执行和所述返回是使用提供到所述第一处理器的第二系统表执行的,所述第二系统表被配置成使所述第二实体执行对应于所述服务调用的所述功能并且将所述功能的所述结果返回到所述第一实体。
5.根据权利要求4所述的方法,其中所述第二系统表包括统一可扩展固件接口UEFI系统表。
6.根据权利要求3所述的方法,其进一步包括:
由所述第二处理器接收所述服务调用;
在第一缓冲器中存储对应于所述服务调用的第一消息;
由所述第二处理器设置与所述第一缓冲器相关联的第一标记以向所述第一处理器指示所述第一缓冲器包含所述第一消息;
由所述第一处理器基于所述第一标记确定所述第一缓冲器包含所述第一消息;
由所述第一处理器从所述第一缓冲器中读取所述第一消息;
由所述第一处理器基于所述第一消息执行对应于所述服务调用的所述功能;
由所述第一处理器在第二缓冲器中存储对应于所述功能的所述结果的第二消息;
由所述第一处理器设置与所述第二缓冲器相关联的第二标记以向所述第二处理器指示所述第二缓冲器包含所述第二消息;
由所述第二处理器基于所述第二标记确定所述第二缓冲器包含所述第二消息;以及
由所述第二处理器从所述第二缓冲器中读取所述第二消息。
7.根据权利要求3所述的方法,其中所述服务调用包括存储器分配请求、与所述第二处理器的验证相关的调用或与编程所述SoC相关的调用中的至少一个。
8.根据权利要求1所述的方法,其中所述第二处理器和所述第一处理器被配置成使用共享的存储器空间进行通信,所述共享的存储器空间包括一或多个标记和与所述一或多个标记相关联的一或多个缓冲器,其中所述一或多个标记用于同步所述第一处理器与所述第二处理器之间的消息传递。
9.根据权利要求8所述的方法,其中对于所述一或多个标记中的每个标记,多个计算核中的每个计算核被经启用以读取所述标记,并且所述多个计算核中的仅一个计算核经启用以为写入所述标记。
10.根据权利要求1所述的方法,其进一步包括:
由所述第一处理器确定所述第二处理器的状态;以及
基于所述第二处理器的所述状态向所述第二处理器发送中断或打开所述第二处理器中的至少一个。
11.一种片上系统SoC,其包括:
第一处理器,所述第一处理器被配置成:
发起将所述SoC启动到预启动环境中;
调度第二处理器对一或多个启动任务的执行;并且
与所述第二处理器执行所述一或多个启动任务并行地执行一或多个另外的任务;以及
所述第二处理器,所述第二处理器被配置成:
在所述预启动环境中执行所述一或多个启动任务。
12.根据权利要求11所述的SoC,其中在所述预启动环境中,操作系统不在所述SoC上执行,并且其中所述第一处理器被进一步配置成:
通过加载所述操作系统在所述预启动环境中完成执行,并且其中所述操作系统被配置成调度代码在所述第一处理器和所述第二处理器上的并行执行。
13.根据权利要求11所述的SoC,其中:
所述第二处理器被进一步配置成:
将与所述一或多个启动任务相关的服务调用引导到所述第一处理器;并且
所述第一处理器被进一步配置成:
执行对应于所述服务调用的功能;并且
向所述第二处理器返回所述功能的结果。
14.根据权利要求13所述的SoC,其中所述引导是使用提供到所述第二处理器的第一系统表执行的,所述第一系统表被配置成将所述第二处理器上的所述服务调用引导到在所述第二处理器上运行的第一实体,在所述第二处理器上的所述第一实体被配置成与在所述第一处理器上运行的第二实体通信,并且其中所述执行和所述返回是使用提供到所述第一处理器的第二系统表执行的,所述第二系统表被配置成使所述第二实体执行对应于所述服务调用的所述功能并且将所述功能的所述结果返回到所述第一实体。
15.根据权利要求14所述的SoC,其中所述第二系统表包括UEFI系统表。
16.根据权利要求13所述的SoC,其中:
所述第二处理器被进一步配置成:
接收所述服务调用;
在第一缓冲器中存储对应于所述服务调用的第一消息;并且
设置与所述第一缓冲器相关联的第一标记以向所述第一处理器指示所述第一缓冲器包含所述第一消息;
所述第一处理器被进一步配置成:
基于所述第一标记确定所述第一缓冲器包含所述第一消息;
从所述第一缓冲器中读取所述第一消息;
基于所述第一消息执行对应于所述服务调用的所述功能;
在第二缓冲器中存储对应于所述功能的所述结果的第二消息;并且
设置与所述第二缓冲器相关联的第二标记以向所述第二处理器指示所述第二缓冲器包含所述第二消息;并且
所述第二处理器被进一步配置成:
基于所述第二标记确定所述第二缓冲器包含所述第二消息;并且
从所述第二缓冲器中读取所述第二消息。
17.根据权利要求13所述的SoC,其中所述服务调用包括存储器分配请求、与所述第二处理器的验证相关的调用或与编程所述SoC相关的调用中的至少一个。
18.根据权利要求11所述的SoC,其中所述第二处理器和所述第一处理器被配置成使用共享的存储器空间进行通信,所述共享的存储器空间包括一或多个标记和与所述一或多个标记相关联的一或多个缓冲器,其中所述一或多个标记用于同步所述第一处理器与所述第二处理器之间的消息传递。
19.根据权利要求18所述的SoC,其中对于所述一或多个标记中的每个标记,多个计算核中的每个计算核经启用以读取所述标记,并且所述多个计算核中的仅一个计算核经启用以写入所述标记。
20.根据权利要求11所述的SoC,其中所述第一处理器被进一步配置成:
确定所述第二处理器的状态;并且
基于所述第二处理器的所述状态向所述第二处理器发送中断或打开所述第二处理器中的至少一个。
21.一种非暂时性计算机可读存储媒体,其存储有指令,所述指令在被包括包含第一处理器和第二处理器的多个处理器的片上系统SoC执行时使所述SoC执行在所述SoC的预启动环境中实现多核框架的方法,所述方法包括:
由所述第一处理器发起将所述SoC启动到预启动环境中;
由所述第一处理器调度第二处理器对一或多个启动任务的执行;
由所述第二处理器在所述预启动环境中执行所述一或多个启动任务;以及
与所述第二处理器执行所述一或多个启动任务并行地,由所述第一处理器执行一或多个另外的任务。
22.根据权利要求21所述的非暂时性计算机可读存储媒体,其中在所述预启动环境中,操作系统不在所述SoC上执行,并且其中所述方法进一步包括:
通过加载所述操作系统在所述预启动环境中完成执行;以及
由所述操作系统调度代码在所述第一处理器和所述第二处理器上的并行执行。
23.根据权利要求21所述的非暂时性计算机可读存储媒体,其中所述方法进一步包括:
由所述第二处理器将与所述一或多个启动任务相关的服务调用引导到所述第一处理器;
由所述第一处理器执行对应于所述服务调用的功能;以及
由所述第一处理器向所述第二处理器返回所述功能的结果。
24.根据权利要求23所述的非暂时性计算机可读存储媒体,其中所述引导是使用提供到所述第二处理器的第一系统表执行的,所述第一系统表被配置成将所述第二处理器上的所述服务调用引导到在所述第二处理器上运行的第一实体,在所述第二处理器上的所述第一实体被配置成与在所述第一处理器上运行的第二实体通信,并且其中所述执行和所述返回是使用提供到所述第一处理器的第二系统表执行的,所述第二系统表被配置成使所述第二实体执行对应于所述服务调用的所述功能并且将所述功能的所述结果返回到所述第一实体。
25.根据权利要求24所述的非暂时性计算机可读存储媒体,其中所述第二系统表包括UEFI系统表。
26.根据权利要求23所述的非暂时性计算机可读存储媒体,其中所述方法进一步包括:
由所述第二处理器接收所述服务调用;
在第一缓冲器中存储对应于所述服务调用的第一消息;
由所述第二处理器设置与所述第一缓冲器相关联的第一标记以向所述第一处理器指示所述第一缓冲器包含所述第一消息;
由所述第一处理器基于所述第一标记确定所述第一缓冲器包含所述第一消息;
由所述第一处理器从所述第一缓冲器中读取所述第一消息;
由所述第一处理器基于所述第一消息执行对应于所述服务调用的所述功能;
由所述第一处理器在第二缓冲器中存储对应于所述功能的所述结果的第二消息;
由所述第一处理器设置与所述第二缓冲器相关联的第二标记以向所述第二处理器指示所述第二缓冲器包含所述第二消息;
由所述第二处理器基于所述第二标记确定所述第二缓冲器包含所述第二消息;以及
由所述第二处理器从所述第二缓冲器中读取所述第二消息。
27.根据权利要求23所述的非暂时性计算机可读存储媒体,其中所述服务调用包括存储器分配请求、与所述第二处理器的验证相关的调用或与编程所述SoC相关的调用中的至少一个。
28.根据权利要求21所述的非暂时性计算机可读存储媒体,其中所述第二处理器和所述第一处理器被配置成使用共享的存储器空间进行通信,所述共享的存储器空间包括一或多个标记和与所述一或多个标记相关联的一或多个缓冲器,其中所述一或多个标记用于同步所述第一处理器与所述第二处理器之间的消息传递。
29.根据权利要求28所述的非暂时性计算机可读存储媒体,其中对于所述一或多个标记中的每个标记,多个计算核中的每个计算核经启用以读取所述标记,并且所述多个计算核中的仅一个计算核经启用以写入所述标记。
30.根据权利要求21所述的非暂时性计算机可读存储媒体,其中所述方法进一步包括:
由所述第一处理器确定所述第二处理器的状态;以及
基于所述第二处理器的所述状态向所述第二处理器发送中断或打开所述第二处理器中的至少一个。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762562738P | 2017-09-25 | 2017-09-25 | |
US62/562,738 | 2017-09-25 | ||
US16/137,226 US10860332B2 (en) | 2017-09-25 | 2018-09-20 | Multicore framework for use in pre-boot environment of a system-on-chip |
US16/137,226 | 2018-09-20 | ||
PCT/US2018/052179 WO2019060691A1 (en) | 2017-09-25 | 2018-09-21 | MULTI-CORE INFRASTRUCTURE FOR USE IN A PRE-BOOST ENVIRONMENT OF A CHIP SYSTEM |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111095205A true CN111095205A (zh) | 2020-05-01 |
Family
ID=65809109
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880059809.8A Pending CN111095205A (zh) | 2017-09-25 | 2018-09-21 | 用于片上系统的预启动环境的多核框架 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10860332B2 (zh) |
CN (1) | CN111095205A (zh) |
WO (1) | WO2019060691A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764822A (zh) * | 2021-02-07 | 2021-05-07 | 中国第一汽车股份有限公司 | 操作系统启动方法、装置、设备及介质 |
CN113642006A (zh) * | 2021-08-30 | 2021-11-12 | 南方电网数字电网研究院有限公司 | 双核继电保护系统安全启动方法 |
CN113687868A (zh) * | 2021-08-31 | 2021-11-23 | 联想(北京)有限公司 | 设备固件启动方法、装置及电子设备 |
CN114647453A (zh) * | 2022-03-01 | 2022-06-21 | 芯原微电子(成都)有限公司 | 多处理器的可信动态启动方法、系统、存储介质及终端 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019066780A1 (en) * | 2017-09-26 | 2019-04-04 | Intel Corporation | METHODS AND APPARATUS FOR REDUCING BOOT TIME IN A PROCESSOR AND PROGRAMMABLE LOGIC DEVICE ENVIRONMENT |
WO2020199009A1 (zh) * | 2019-03-29 | 2020-10-08 | 华为技术有限公司 | 启动装置的处理方法、装置、设备及存储介质 |
US11340684B2 (en) * | 2020-06-05 | 2022-05-24 | Dell Products L.P. | System and method for predictive battery power management |
US20220180005A1 (en) * | 2020-12-03 | 2022-06-09 | Seagate Technology Llc | Secure system-on-a-chip (soc) bootup |
US20210357202A1 (en) * | 2021-07-29 | 2021-11-18 | Intel Corporation | Firmware updating |
EP4184359A1 (en) * | 2021-11-18 | 2023-05-24 | Samsung Electronics Co., Ltd. | Storage device and operating method of storage device |
WO2023211980A1 (en) * | 2022-04-26 | 2023-11-02 | Motional Ad Llc | Boot process system-on-chip node configuration |
US11836500B2 (en) * | 2022-05-06 | 2023-12-05 | Dell Products L.P. | Systems and methods for basic input/output system driver offline protocol |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273540A1 (en) * | 2004-05-11 | 2005-12-08 | Stmicroelectronics Limited | Interrupt handling system |
CN101479704A (zh) * | 2006-03-27 | 2009-07-08 | 相干逻辑公司 | 为多处理器系统设计程序 |
US20120106609A1 (en) * | 2010-10-29 | 2012-05-03 | Texas Instruments Incorporated | System and method for channel classification |
US20150106609A1 (en) * | 2013-10-16 | 2015-04-16 | Xilinx, Inc. | Multi-threaded low-level startup for system boot efficiency |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6158000A (en) | 1998-09-18 | 2000-12-05 | Compaq Computer Corporation | Shared memory initialization method for system having multiple processor capability |
US20030009654A1 (en) * | 2001-06-29 | 2003-01-09 | Nalawadi Rajeev K. | Computer system having a single processor equipped to serve as multiple logical processors for pre-boot software to execute pre-boot tasks in parallel |
US7600109B2 (en) | 2006-06-01 | 2009-10-06 | Dell Products L.P. | Method and system for initializing application processors in a multi-processor system prior to the initialization of main memory |
US9092622B2 (en) * | 2012-08-20 | 2015-07-28 | Freescale Semiconductor, Inc. | Random timeslot controller for enabling built-in self test module |
KR101947652B1 (ko) * | 2012-09-28 | 2019-04-25 | 삼성전자 주식회사 | 휴대 단말기의 저전력 근거리 통신 기능 운용 방법 및 장치 |
US9208113B2 (en) * | 2013-01-15 | 2015-12-08 | Apple Inc. | Deferred inter-processor interrupts |
KR101861724B1 (ko) | 2013-10-31 | 2018-05-29 | 인텔 코포레이션 | 사전 부팅 펌웨어 갱신을 위한 선택적인 전력 관리 |
US9536094B2 (en) * | 2014-01-13 | 2017-01-03 | Raytheon Company | Mediated secure boot for single or multicore processors |
JP6399916B2 (ja) * | 2014-01-20 | 2018-10-03 | キヤノン株式会社 | 情報処理装置およびその制御方法 |
US9753836B2 (en) | 2014-09-12 | 2017-09-05 | Intel Corporation | Low power debug architecture for system-on-chips (SoCs) and systems |
KR102348219B1 (ko) * | 2014-11-05 | 2022-01-07 | 삼성전자 주식회사 | 탈부착이 가능한 전자 장치 및 그 동작 방법 |
US10228745B2 (en) | 2015-01-29 | 2019-03-12 | Hewlett-Packard Development Company, L.P. | Resuming a system-on-a-chip device |
US20160253501A1 (en) | 2015-02-26 | 2016-09-01 | Dell Products, Lp | Method for Detecting a Unified Extensible Firmware Interface Protocol Reload Attack and System Therefor |
US10515218B2 (en) * | 2016-10-01 | 2019-12-24 | Intel Corporation | Systems, apparatuses, and methods for platform security |
US10599442B2 (en) | 2017-03-02 | 2020-03-24 | Qualcomm Incorporated | Selectable boot CPU |
-
2018
- 2018-09-20 US US16/137,226 patent/US10860332B2/en active Active
- 2018-09-21 WO PCT/US2018/052179 patent/WO2019060691A1/en active Application Filing
- 2018-09-21 CN CN201880059809.8A patent/CN111095205A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050273540A1 (en) * | 2004-05-11 | 2005-12-08 | Stmicroelectronics Limited | Interrupt handling system |
CN101479704A (zh) * | 2006-03-27 | 2009-07-08 | 相干逻辑公司 | 为多处理器系统设计程序 |
US20120106609A1 (en) * | 2010-10-29 | 2012-05-03 | Texas Instruments Incorporated | System and method for channel classification |
US20150106609A1 (en) * | 2013-10-16 | 2015-04-16 | Xilinx, Inc. | Multi-threaded low-level startup for system boot efficiency |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764822A (zh) * | 2021-02-07 | 2021-05-07 | 中国第一汽车股份有限公司 | 操作系统启动方法、装置、设备及介质 |
CN113642006A (zh) * | 2021-08-30 | 2021-11-12 | 南方电网数字电网研究院有限公司 | 双核继电保护系统安全启动方法 |
CN113687868A (zh) * | 2021-08-31 | 2021-11-23 | 联想(北京)有限公司 | 设备固件启动方法、装置及电子设备 |
CN114647453A (zh) * | 2022-03-01 | 2022-06-21 | 芯原微电子(成都)有限公司 | 多处理器的可信动态启动方法、系统、存储介质及终端 |
CN114647453B (zh) * | 2022-03-01 | 2023-06-09 | 芯原微电子(成都)有限公司 | 多处理器的可信动态启动方法、系统、存储介质及终端 |
Also Published As
Publication number | Publication date |
---|---|
US10860332B2 (en) | 2020-12-08 |
WO2019060691A1 (en) | 2019-03-28 |
US20190095220A1 (en) | 2019-03-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10860332B2 (en) | Multicore framework for use in pre-boot environment of a system-on-chip | |
US10802875B2 (en) | Multithread framework for use in pre-boot environment of a system-on-chip | |
US8544021B2 (en) | Execution context isolation in a driver execution environment (DXE) with marshaling arguments to a common location in response to an LPC | |
RU2435200C2 (ru) | Быстрая загрузка операционной системы из выключенного состояния | |
US7493460B2 (en) | Preboot memory of a computer system | |
US10747883B2 (en) | Collated multi-image check in system-on-chips | |
US7493435B2 (en) | Optimization of SMI handling and initialization | |
KR20120061938A (ko) | 시스템 관리 모드의 프로세서에 상태 스토리지를 제공하기 위한 장치, 방법 및 시스템 | |
EP3910469A1 (en) | Interface and warm reset path for memory device firmware upgrades | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
JP2018511104A (ja) | 改善されたハイブリッドスリープ電力管理のための技術 | |
US11334427B2 (en) | System and method to reduce address range scrub execution time in non-volatile dual inline memory modules | |
US20210357202A1 (en) | Firmware updating | |
US11461178B2 (en) | System and method to prevent endless machine check error of persistent memory devices | |
CN114201222A (zh) | 针对提早显示器初始化和可视化改善引导过程 | |
EP3633507B1 (en) | Technologies for secure and efficient native code invocation for firmware services | |
US9417884B2 (en) | Method for enabling calibration during start-up of a micro controller unit and integrated circuit therefor | |
US9910677B2 (en) | Operating environment switching between a primary and a secondary operating system | |
EP4187374A1 (en) | Kernel restarting method | |
US9946665B2 (en) | Fetch less instruction processing (FLIP) computer architecture for central processing units (CPU) | |
US20210232405A1 (en) | Circuit and register to prevent executable code access | |
US10409513B2 (en) | Configurable low memory modes for reduced power consumption | |
US11204781B2 (en) | Optimizing power, memory and load time of a computing system during image loading based on image segmentation | |
US20230161600A1 (en) | Kernel reboot method | |
US11829772B2 (en) | Heterogeneous compute domains with an embedded operating system in an information handling system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |