CN112711427A - 一种镜像文件的获取方法以及装置 - Google Patents
一种镜像文件的获取方法以及装置 Download PDFInfo
- Publication number
- CN112711427A CN112711427A CN201911018528.0A CN201911018528A CN112711427A CN 112711427 A CN112711427 A CN 112711427A CN 201911018528 A CN201911018528 A CN 201911018528A CN 112711427 A CN112711427 A CN 112711427A
- Authority
- CN
- China
- Prior art keywords
- tasks
- time length
- task
- image file
- program source
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- 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/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1417—Boot up procedures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
-
- 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
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/84—Using snapshots, i.e. a logical point-in-time copy of the data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种镜像文件的获取方法,包括:确定程序源码中N个任务中的每一个任务的第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载N个任务中的每一个任务所需时长,N为正整数。根据第一数值由大到小对N个任务排序。对排序后的N个任务进行链接以获取镜像文件。通过本申请提供的技术方案,嵌入式装置在下载该镜像文件后,依次加载、执行N个任务,缩短了嵌入式装置的启动时间。
Description
技术领域
本申请涉及通信技术领域,具体涉及一种镜像文件的获取方法。
背景技术
嵌入式设备包括主机和目标机,主机和目标机是基于不同体系架构的开发,主机负责开发和编译,也即开发和编译装置,目标机运行从主机下载的编译后的程序,目标机也称为嵌入式装置。
在嵌入式装置中,其***的启动速度是一个重要的衡量指标,特别是对于消费类的嵌入式装置,例如行车记录仪、相机和智能打印服务器等,***的启动时间直接影响用户体验。
通常情况下,使用宏内核作为嵌入式装置首选的内核架构,因此嵌入式装置内核程序代码和应用程序代码会被打包到一起开发调试,这两部代码会被编译、链接成一个整体的镜像文件,然后再将这个镜像文件部署到嵌入式装置中。嵌入式装置上电后会加载镜像文件,因此,镜像文件的加载速度与嵌入式装置启动的速度密切相关。因此,如何实现镜像文件的快速加载,优化嵌入式装置的启动时间是一个亟待解决的问题。
发明内容
本申请实施例提供一种镜像文件的获取方法,缩短了嵌入式装置的启动时间。
为达到上述目的,本申请实施例提供如下技术方案:
本申请第一方面提供一种镜像文件的获取方法,可以包括:确定程序源码中N个任务中的每一个任务的第一数值,任务为完成某些功能的代码集合,每一个任务都可能包含若干函数。第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载N个任务中的每一个任务所需时长,N为正整数。根据第一数值由大到小对N个任务排序。对排序后的N个任务进行链接以获取镜像文件。由第一方面可知,通过对N个任务按照执行时间从长到短进行排序,或者按照时间比从大到小进行排序,对排序后的N个任务进行链接,以生成镜像文件后,可使得嵌入式装置在下载该镜像文件后,先加载执行时间较长的任务,这样在前一个任务执行的过程中,可以加载下一个任务,或者嵌入式装置在下载了该镜像文件后,先加载加载时间短而执行任务时间长的任务,这样可以保证执行完成N个任务所需总时长最短,缩短了嵌入式装置的启动时间。
可选地,结合上述第一方面,在第一种可能的实现方式中,获取N个任务中的每一个任务的函数依赖关系,每一个任务的函数依赖关系为N个任务中的每一个任务所包括的函数之间的调用关系。对排序后的N个任务进行链接以获取镜像文件,包括:根据N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所包括的函数进行链接以获取镜像文件。
可选地,结合上述第一方面第一种可能的实现方式,在第二种可能的实现方式中,该获取N个任务中的每一个任务的函数依赖关系,可以包括:获取程序源码中全部任务的语法树信息,全部任务可以包括N个任务。根据语法树信息获取全部任务的函数依赖关系,全部任务的函数依赖关系为全部任务所可以包括的函数之间的调用关系。根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。由第一方面第二种可能的实现方式可知,可以通过语法树信息以及程序源码中的标注得到每一个任务的函数依赖关系,增加方案的多样性。
可选地,结合上述第一方面或第一方面第一种或第一方面第二种可能的实现方式中,在第三种可能的实现方式中,该方法还可以包括:划分程序源码,划分后的程序源码可以包括N个任务对应的程序源码和M个任务对应的程序源码,N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。由第一方面第二种可能的实现方式可知,N个任务为关键任务,在嵌入式启动场景中,先加载并执行关键任务,缩短了嵌入式装置的启动时间。
可选地,结合上述第一方面或第一方面第一种至第一方面第三种可能的实现方式中,在第四种可能的实现方式中,确定程序源码中N个任务中的每一个任务的第一数值,可以包括:根据N个任务中的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置包括第一时间戳,结束位置包括第二时间戳。运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。
本申请第二方面提供一种嵌入式装置的启动方法,可以包括:加载***镜像文件中的N个任务并运行N个任务,N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。由第二方面可知,通过本申请提供的方案,在嵌入式装置启动的过程中,不仅可以先加载并执行关键任务,还可以进一步缩短加载关键任务所需的时间。本方案通过对关键任务进行排序,根据排序对所述N个任务进行链接,以生成镜像文件,在运行前一个关键任务的同时可以加载下一个任务,实行不同任务的加载操作和执行操作并行最大化,保证嵌入式装置的快速启动。
可选地,结合上述第二方面,在第一种可能的实现方式中,还可以包括:在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件可以包括的一个或多个任务。
本申请第三方面提供一种镜像文件的获取装置,可以包括:存储器,用于存储计算机可读指令;还可以包括,与存储器耦合的处理器,执行存储器中的计算机可读指令从而执行以下操作:确定程序源码中N个任务中的每一个任务的第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载N个任务中的每一个任务所需时长,N为正整数;根据第一数值由大到小对N个任务排序;对排序后的N个任务进行链接以获取镜像文件。
可选地,结合上述第三方面,在第一种可能的实现方式中,处理器,还用于:获取N个任务中的每一个任务的函数依赖关系,每一个任务的函数依赖关系为N个任务中的每一个任务所可以包括的函数之间的调用关系;根据N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所可以包括的函数进行链接以获取镜像文件。
可选地,结合上述第三方面第一种可能的实现方式,在第二种可能的实现方式中,处理器,具体用于:获取程序源码中全部任务的语法树信息,全部任务可以包括N个任务;根据语法树信息获取全部任务的函数依赖关系,全部任务的函数依赖关系为全部任务所可以包括的函数之间的调用关系;根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。
可选地,结合上述第三方面或第三方面第一种或第三方面第二种可能的实现方式中,在第三种可能的实现方式中,处理器,还用于:划分程序源码,划分后的程序源码可以包括N个任务对应的程序源码和M个任务对应的程序源码,N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。
可选地,结合上述第三方面或第三方面第一种至第三方面第三种可能的实现方式中,在第四种可能的实现方式中,处理器,具体用于:根据N个任务中的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置可以包括第一时间戳,结束位置可以包括第二时间戳;运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。
本申请第四方面提供一种嵌入式装置,可以包括:存储器,用于存储计算机可读指令;还可以包括,与存储器耦合的处理器,执行存储器中的计算机可读指令从而执行以下操作:加载***镜像文件中的N个任务并运行N个任务,N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。
可选地,结合上述第四方面,在第一种可能的实现方式中,处理器,还用于:
在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件可以包括的一个或多个任务。
本申请第五方面提供一种镜像文件的获取装置,可以包括:存储单元,用于存储计算机可读指令;还可以包括,处理单元,执行存储单元中的计算机可读指令从而执行以下操作:确定程序源码中N个任务中的每一个任务的第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载N个任务中的每一个任务所需时长,N为正整数;根据第一数值由大到小对N个任务排序;对排序后的N个任务进行链接以获取镜像文件。
可选地,结合上述第五方面,在第一种可能的实现方式中,处理单元,还用于:获取N个任务中的每一个任务的函数依赖关系,每一个任务的函数依赖关系为N个任务中的每一个任务所可以包括的函数之间的调用关系;根据N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所可以包括的函数进行链接以获取镜像文件。
可选地,结合上述第五方面第一种可能的实现方式,在第二种可能的实现方式中,处理单元,具体用于:获取程序源码中全部任务的语法树信息,全部任务可以包括N个任务;根据语法树信息获取全部任务的函数依赖关系,全部任务的函数依赖关系为全部任务所可以包括的函数之间的调用关系;根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。
可选地,结合上述第五方面或第五方面第一种或第五方面第二种可能的实现方式中,在第三种可能的实现方式中,处理单元,还用于:划分程序源码,划分后的程序源码可以包括N个任务对应的程序源码和M个任务对应的程序源码,N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。
可选地,结合上述第五方面或第五方面第一种至第五方面第三种可能的实现方式中,在第四种可能的实现方式中,处理单元,具体用于:根据N个任务中的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置可以包括第一时间戳,结束位置可以包括第二时间戳;运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。
本申请第六方面提供一种嵌入式装置,可以包括:存储单元(或称存储器),用于存储计算机可读指令;还可以包括,处理单元(或称处理器),执行存储单元中的计算机可读指令从而执行以下操作:加载***镜像文件中的N个任务并运行N个任务,N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。
可选地,结合上述第六方面,在第一种可能的实现方式中,处理单元,还用于:
在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件可以包括的一个或多个任务。
本申请第七方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行上述第一方面或第一方面任意一种可能实现方式的镜像文件的获取方法。
本申请第八方面提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机可以执行上述第二方面或第二方面任意一种可能实现方式的嵌入式装置的启动方法。该计算机可以包括一个或多个处理单元。
本申请第九方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行上述第一方面或第一方面任意一种可能实现方式的镜像文件的获取方法。
本申请第十方面提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机可以执行上述第二方面或第二方面任意一种可能实现方式的嵌入式装置的启动方法。
其中,第三方面、第五方面、第七方面、第九方面中任一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。
其中,第四方面、第六方面、第八方面、第十方面中任一种实现方式所带来的技术效果可参见第二方面中不同实现方式所带来的技术效果,此处不再赘述。
本申请提供一种镜像文件的获取方法,通过对N个任务按照执行所需时长从长到短进行排序,或者按照时间比从大到小进行排序,这样对所述N个任务进行链接获取镜像文件后,可使得嵌入式装置在下载该镜像文件后,先加载执行时间较长的任务,这样在前一个任务执行的过程中,可以加载下一个任务,或者嵌入式装置在下载了该镜像文件后,先加载加载时间短而执行任务时间长的任务,这样可以保证执行完成N个任务所需总时长最短,缩短了嵌入式装置的启动时间。
附图说明
图1为本申请实施例提供的一种嵌入式设备的示意图;
图2为嵌入式装置启动时间的示意图;
图3为基于快照法的快速启动技术中的启动时间示意图;
图4为基于分散加载方法的快速启动方案中的启动时间示意图;
图5为本申请实施例提供的一种镜像文件的获取方法的流程示意图;
图6为本申请实施例提供的另一种镜像文件的获取方法的流程示意图;
图7为本申请实施例提供的一种嵌入式装置的启动方法的流程示意图;
图8为本申请提供的场景示意图;
图9为本申请实施例提供的镜像文件的获取装置的硬件结构示意图;
图10为本申请实施例提供的镜像文件的获取装置的结构示意图;
图11为本申请实施例提供的镜像文件的获取装置的结构示意图;
图12为本申请实施例提供的嵌入式装置的硬件结构示意图;
图13为本申请实施例提供的嵌入式装置的结构示意图。
具体实施方式
下面结合附图,对本申请的实施例进行描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请实施例提供一种镜像文件的获取方法、嵌入式装置的启动方法及嵌入式装置。本申请提供的技术方案,根据任务执行时间从长到短或者根据任务的时间比从大到小调整不同任务在镜像文件中的位置,当前一个任务在执行过程中,可以加载下一个或多个任务,实现嵌入式装置的快速启动,以下分别进行详细说明。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块。在本申请中出现的对步骤进行的命名或者编号,并不意味着必须按照命名或者编号所指示的时间/逻辑先后顺序执行方法流程中的步骤,已经命名或者编号的流程步骤可以根据要实现的技术目的变更执行次序,只要能达到相同或者相类似的技术效果即可。本申请中所出现的模块的划分,是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个***中,或一些特征可以忽略,或不执行,另外,所显示的或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些端口,模块之间的间接耦合或通信连接可以是电性或其他类似的形式,本申请中均不作限定。并且,作为分离部件说明的模块或子模块可以是也可以不是物理上的分离,可以是也可以不是物理模块,或者可以分布到多个电路模块中,可以根据实际的需要选择其中的部分或全部模块来实现本申请方案的目的。
图1为本申请实施例提供的一种嵌入式设备的示意图,如图1所示,该嵌入式设备包括开发和编译装置和嵌入式装置,其中开发和编译装置为主机,嵌入式装置为目标机,本申请用于实现嵌入式装置的快速启动。该目标机,即该嵌入式装置可以为行车记录仪、智能打印服务器、相机、智能摄像机等,对应的,主机就负责开发和编译行车记录仪、智能打印服务器、相机、智能摄像机等目标机的***程序。
通常情况下,嵌入式装置使用宏内核作为其首选的内核架构,宏内核是一种操作***内核架构,此架构的的特性是整个内核程序是一个单一的二进制可执行文件,且代码只能处于内核态下监管模式运行。与宏内核对应的是微内核架构,微内核将内核和***服务分离,使内核具有模块化属性,不同模块之间采用进程间通信(inter processcommunication,IPC)进行通信,其性能远不如宏内核。由于采用宏内核作为内核架构,因此嵌入式***的内核程序代码和应用程序代码会被打包到一起开发调试,这两部代码会被编译、链接成一个整体的二进制镜像文件,然后再将这个二进制文件部署到嵌入式装置中。在衡量这类嵌入式装置的启动时间的指标时,常常将从嵌入式装置上电时刻起,到某个指定关键任务执行完成时刻之间的区间作为该设备的启动时间。不同的嵌入式装置,设定的关键任务通常也不相同,例如行车记录仪的关键业务可能是摄像业务和无线连接业务,那么在行车记录器上电的时刻,到执行完成摄像业务和无线连接业务之间的时长为该行车记录仪的启动时间,再例如智能摄像机,该关键任务可能是显示图像任务,那么智能摄像机的启动时间是从上电时刻起到显示图像任务执行完成的时刻之间的时长。本申请提到的任务是指完成一定功能的代码块集合,至少包含一个完整函数代码块。如2所示,是嵌入式装置启动时间的示意图,嵌入式装置启动时间可以包括:***上电所需时长、镜像加载所需时长、***初始化所需时长以及关键任务执行所需时长。本申请所称的加载是指程序代码从其它存储介质中传输到内存当中。当加载程序把程序代码加载到内存中时,首先将程序代码的地址、偏移等信息更新到进程控制块中,当处理器访问这些地址时,会触发缺页中断,这时才真正将程序代码复制到内存中。
为了能提升嵌入式装置的启动时间,有两种方式,一种是基于快照法的快速启动方案,另一种是基于分散加载方法的快速启动方案,以下对这两种方案进行介绍。
快照是一种基于时间点或者程序执行某个位置点时触发的数据拷贝技术,拷贝的数据大小没有限制,可以是单个任务,也可以是整个内存数据。基于快照法的快速启动方案,首先将嵌入式***的内核程序代码和应用程序代码打包、编译、链接成一个完整的二进制可执行镜像文件,然后将该镜像文件烧录到嵌入式装置中。当第一次启动嵌入式装置时,在执行完指定任务(该指定任务可以看做是关键任务)后开始制作全***的快照操作,并且将快照保存到存储介质中的指定位置。如图3所示,是基于快照法的快速启动技术中的启动时间示意图,如图3所示,当嵌入式装置再次上电启动时,首先将***快照(代替原始镜像)加载到内存中,然后开始执行快照恢复操作,主要恢复***状态信息、内存信息等,当快照恢复操作成功后,嵌入式装置可以从保存快照的位置继续执行程序代码,从而达到快速启动嵌入式装置的目的。
基于快照法的快速启动方案,快照镜像需要额外的存储空间,增加了嵌入式装置的成本,对于存储空间受限的嵌入式装置,快照法更是不适用的。
分散加载是将应用程序划分成两个相对独立的部分,在加载的时候,可以先加载第一部分代码,然后再加载第二部分代码。基于分散加载方法的快速启动方案,将整个***程序代码划分为两部分,整个***的程序代码包括全部内核程序代码和全部应用程序代码:第一部分是从嵌入式装置上电启动到执行完关键任务的代码,第二部分是后续其它任务代码。将第一部分代码划分成相对独立的部分是分散加载方法的核心步骤。分散加载方法,需要开发者剪裁、筛选与第一部分相关的程序代码,然后通过修改链接脚本文件将第一部分代码放置到镜像的指定段中,最后将整个镜像分为两个相对独立的部分:快速启动部分和非快速启动部分。如图4所示,是基于分散加载方法的快速启动方案中的启动时间示意图,如图4所示,当嵌入式装置上电启动后,首先加载镜像文件中快速启动部分,即上述所说的第一部分,加载完快速启动部分后,执行快速启动部分代码,执行完快速启动部分代码,再加载镜像文件中非快速启动部分,加载完非快速启动部分后,执行非快速启动部分的代码。
基于分散加载方法的快速启动技术,需要开发者将快速启动部分代码从整个***的程序代码中分离出来。开发者首先创建一个从嵌入式装置启动到关键任务执行的相对独立的工程,然后将这个工程与完整的工程做对比,然后将原有完整工程中与快速启动部分无关的代码删除,仅保留必须的代码或者文件,然后通过编译、烧写,验证剪裁出来的代码是否能保证关键任务的正确执行。在这一过程中,需要开发者投入大量的精力对出现的错误进行定位和修复,执行过程复杂,尤其是对于复杂的嵌入式装置的开发,开发者可能无法完成上述剪裁、调试等工作。
为了解决上述问题,本申请提供一种镜像文件的获取方法,相比于基于快照法的快速启动方案,本申请提供的发案既能实现快速启动嵌入式装置的目的,还无需占用额外存储空间,相比于基于分散加载方法的快速启动方案,本方案提供的方案无需开发者将快速启动部分代码从整个***的程序代码中分离出来,无需开发者投入大量的精力对出现的错误进行定位和修复,简化了开发的过程。
如图5所示为本申请实施例提供的一种镜像文件的获取方法的流程示意图。
如图5所示,一种镜像文件的获取方法,可以包括如下步骤:
501、确定程序源码中N个任务中的每一个任务的第一数值。
N为正整数,任务为完成某些功能的代码集合,每一个任务都可能包含若干函数。程序源码包括全部内核程序源代码和全部应用程序源代码。程序源码中包括多个任务,但是由于基于宏内核架构的嵌入式装置,内核程序源代码和应用程序源代码可能分布在镜像文件中的任何位置,因此每一个任务所包括的代码,或者说每一个任务所包括的函数都可能分布在镜像文件中的任何位置。第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长。以下将执行一个任务所需的时长简称为执行时间,将加载一个任务所需的时长简称为加载时间。
对于N个任务中的每一个任务都可以获得任务的加载时间和执行时间,在本方案中可以将执行时间和加载时间的比值称为时间比,第一数值可以是执行时间也可以是时间比。主机可以通过多种方式获知执行时间以及加载时间,示例性的,下面给出两种获知执行时间的方式:
在一个具体的实施方式中,获取程序源码中的N个任务中的每一个任务的函数依赖关系,根据每一个任务的函数依赖关系可以确定每一个任务代码的起始位置和结束位置,起始位置包括第一时间戳,结束位置包括第二时间戳,运行每一个任务后,可以确定第一时间戳和第二时间戳的差值,可以根据实际需求,多次运行任务,得到多个第一时间戳和第二时间戳的差值,可以将获得的多个第一时间戳和第二时间戳的差值的平均值视为一个任务的执行所需要的时间。任务的函数依赖关系为任务中包括的多个函数之间的相互调用关系。本方案可以通过编译器分析技术分析N个任务中的每一个任务的函数依赖关系,即分析N个任务中的每一个任务所包括的多个函数之间的依赖关系,换句话说,通过借助编译器分析技术分析程序源码中N个任务中的每一个任务的函数依赖关系,划分每个任务功能所需的最小代码集合。举例说明,假设N为3,N个任务分别为第一任务,第二任务和第三任务,其中第一任务(task1)包括函数(func)1-1,func1-2,func1-3,func1-4;第二任务(task2)包括func2-1,func2-2,func2-3,func2-4;第三任务(task3)包括func3-1,func3-2,func3-3,func3-4,task1、task2以及task3包括的多个函数可能分布在镜像文件中的任何位置,通过编译技术对程序源码进行分析,主机可以分别得到task1、task2以及task3的函数依赖关系,比如,经过通过编译器分析技术,得到以下以任务为单位的函数依赖关系的集合:
{第一任务:func1-1,func1-2,func1-3,func1-4}
{第二任务:func2-1,func2-2,func2-3,func2-4}
{第三任务:func3-1,func3-2,func3-3,func3-4}
编译技术,是把高级计算机语言编写的程序代码翻译成为计算机可以运行的二进制机器语言代码的技术,现有技术中通过编译技术获得任务的函数依赖关系的方法以及通过其他手段获得任务的函数依赖关系的方法,本申请都可以采用。
需要说明的是,本申请中有时也将“主机”称为“嵌入式装置的开发和编译装置”或者“镜像文件的获取装置”,在不特意强调三者的区别之时,本领域的技术人员应当明确三者表示相同的意思。
获得加载一个任务所需的时长与上述获得执行一个任务所需的时长方法类似,即可以通过多次加载任务,得到多个第一时间戳和第二时间戳的差值,通过将获得的多个第一时间戳和第二时间戳的差值的平均值视为加载一个任务的执行所需要的时间。
除了上述提到的通过测试的方式获取执行一个任务所需的时长,在一个具体的实施方式中,还可以通过计算的方式算出执行时间以及加载时间,比如根据主机确定的N个任务中的每一个任务的依赖关系可以确定每一个任务包括的函数,每一个任务包括的全部函数执行所需时长的总和即为执行时间,每一个任务包括的全部函数加载所需时长的总和即为加载时间。
502、根据第一数值由大到小对N个任务排序。
第一数值是执行时间时,主机可以根据执行时间从长到短对N个任务排序。例如N为3,N个任务分别是task1、task2以及task3,假设主机根据执行时间确定T1大于T2和T3,T2大于T3,其中T1代表task1的执行时间,T2代表task2的执行时间,T3代表task3的执行时间,因为T1>T2>T3,则N个任务的排序为task1排在首位、task2次之,task3在最后。
第一数值是时间比时,主机可以根据时间比从大到小对N个任务排序。例如N为3,N个任务分别是task1、task2以及task3,T1代表task1的执行时间,T2代表task2的执行时间,T3代表task3的执行时间,t1代表task1的加载时间,t2代表task2的加载时间,t3代表task3的加载时间,假设主机根据确定T1/t1大于T2/t2和T3/t3,T3/t3大于T2/t2,因为T1/t1>T3/t3>T2/t2,则N个任务的排序为task1排在首位、task3次之,task2在最后。
503、对排序后的N个任务进行链接以获取镜像文件。
获取N个任务中的每一个任务的函数依赖关系,每一个任务的函数依赖关系为N个任务中的每一个任务所包括的函数之间的调用关系,根据N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所包括的函数进行链接以获取镜像文件。
确定了函数依赖关系,即确定了每一个任务所包括的函数,将每一个任务所包括的函数组成的配置文件称为链接脚本文件,在链接过程中使用这些链接脚本文件,根据步骤501和步骤502确定的N个任务的排序规则,将N个任务中的每一个任务中包括的函数按照此排序规则链接到镜像文件中,以生成镜像文件。
通过图5对应的实施例可知,通过对N个任务按照执行时间从长到短进行排序,或者按照时间比从大到小进行排序,这样根据N个任务的排序对所述N个任务进行链接,以生成镜像文件后,可使得嵌入式装置在下载该镜像文件后,先加载执行时间较长的任务,这样在前一个任务执行的过程中,可以加载下一个任务,或者嵌入式装置在下载了该镜像文件后,先加载加载时间短任务,这样可以保证加载完成N个任务的加载所需总时长最短,缩短了加载镜像文件所需的时间。
由图5对应的实施例可知,需要获取程序源码中的N个任务中的每一个任务的函数依赖关系,根据第一数值由大到小对N个任务排序以及根据排序对所述N个任务进行链接,以生成镜像文件,下面对如何在程序源码中选择出N个任务进行说明。
如图6所示为本申请实施例提供的一种镜像文件的获取方法的流程示意图。
如图6所示,一种镜像文件的获取方法,可以包括如下步骤:
601、划分程序源码,划分后的程序源码包括N个任务对应的程序源码和M个任务对应的程序源码。
N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。例如,目标机为行车记录仪时,其关键业务可以为录像业务、无线连接的业务,程序源码中还可以包括其他任务,比如蓝牙业务、拍照业务等,蓝牙业务、拍照业务等即为处关键任务之外的其余任务。在本方案中,可以根据实际应用的需求确定程序源码中包括的多个任务中的哪些任务为关键任务,即上述说到的N个任务。
602、获取程序源码中的N个任务中的每一个任务的函数依赖关系,N为正整数。
主机通过编译技术对程序源码进行分析得到程序源码中全部任务的函数依赖关系。具体的,通过编译技术可以获得程序源码的全部任务的语法树信息,根据程序源码的全部任务的语法树信息可以获取程序源码的全部任务的函数依赖关系。
此外,从全部任务的函数依赖关系中获取N个任务的函数依赖关系的方式可能有多种方式,比如可以根据程序源码中的标注获取N个任务的函数依赖关系,还可以根据程序源码的运行结果获取该N个任务的功能,进而获取N个任务的函数依赖关系,以下分别进行说明:
在一个具体的实施方式,如果开发者在编写程序源码时对程序源码进行了标注,该标注用于标识任务的功能,通过标注可以区分程序源码中的多个任务。在本种方式中,通过提取程序源码对应的标注,得到程序源码包括的多个任务中的每个任务对应的功能,通过预先确定好关键任务的功能,根据标注可以从程序源码中划分出每一个关键任务,根据标注和函数依赖关系可以获取N个任务中的每一个任务的函数依赖关系。
在一个具体的实施方式,还可以根据程序源码的运行结果获取该N个任务。如果开发者在编写程序源码时没有对程序源码进行标注,还可以通过程序源码的运行结果获取程序源码包括的多个任务中的每个任务对应的功能,通过预先确定好关键任务的功能以及输入条件,运行程序源码,根据在该输入条件下得到的运行结果可以从程序源码中划分出每一个关键任务,即获取该N个任务,根据运行结果和全部任务的函数依赖关系可以获取N个任务中的每一个任务的函数依赖关系。
603、确定第一数值。
604、根据第一数值由大到小对N个任务排序。
605、对排序后的N个任务进行链接以获取镜像文件。
步骤603至步骤605可以参考图5对应的实施例中的步骤502至步骤504进行理解,此处不再重复赘述。
在主机编译链接完成后,可从主机将镜像文件下载至目标机的Flash芯片中,当目标机启动运行时,镜像文件就会从Flash芯片中加载至嵌入式装置即目标机的内存中,下面结合图7对目标机启动的加载过程进行介绍。
如图7所示为本申请实施例提供的一种嵌入式装置的启动方法的流程示意图。
如图7所示,一种嵌入式装置的启动方法,可以包括如下步骤:
701、加载***镜像文件中的N个任务。
嵌入式装置通过***引导程序加载***镜像文件中的N个任务。具体地,可通过对***引导程序进行修改,使得***引导程序在加载镜像文件时先加载***镜像文件中的N个任务。N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。具体的关于N个任务以及镜像文件可以参考图5和图6对应的实施例进行理解,此处不再重复赘述。
702、运行N个任务。
当嵌入式装置支持不同任务加载操作和执行操作并行时,第一任务加载完成后运行,在第一任务运行的同时,可以加载下一个任务,下一个任务比如是第二任务,第一任务和第二任务可以是N个任务中任意两个相邻链接的任务。
在一个具体的实施方式,还可以包括:在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件包括的一个或多个任务。
通过本申请提供的方案,在嵌入式装置启动的过程中,不仅可以先加载并执行关键任务,还可以进一步缩短加载关键任务所需的时间。本方案通过对关键任务进行排序,对排序后的所述N个任务进行链接,以生成镜像文件,在运行前一个关键任务的同时可以加载下一个任务,实行不同任务的加载操作和执行操作并行最大化,保证嵌入式装置的快速启动。
下面结合图8所示的本申请提供的场景示意图对本申请实施例提供的方案举例说明:程序源码包括全部内核程序源代码和全部应用程序源代码。程序源码中包括多个任务,假设程序源码包括多个任务,其中4个任务为关键任务,分别是任务1,任务2,任务3,任务4,但是由于基于宏内核架构的嵌入式装置,内核程序源代码和应用程序源代码可能分布在镜像文件中的任何位置,因此每一个任务所包括的代码,或者说每一个任务所包括的函数都可能分布在镜像文件中的任何位置,如图8中的a所示的原始镜像,方块1代表任务1中包括的代码或者函数,方块2代表任务2中包括的代码,方块3代表任务3中包括的代码,方块4代表任务4中包括的代码,但是需要说明的是,不同任务之间可能共用相同的代码,比如方块1中的任意一个方块可能和方块4中的任意一个方块是相同的代码。假设通过本方案图5和图6对应的实施例中描述的方法,确定任务1,任务2,任务3,任务4依次链接,则通过本方案得到的镜像文件为图8中的b所示的修改后的镜像文件。在主机编译链接完成后,可从主机将镜像文件下载至目标机的Flash芯片中,当目标机启动运行时,镜像文件就会从Flash芯片中加载至嵌入式装置即目标机的内存中,当目标机,即嵌入式装置上电后,会优先加载任务1,任务2,任务3以及任务4,如图8中的c所示,当任务1加载完成后,任务1运行,在任务1运行的同时,可以加载任务2,由于任务1所需的执行时间最长,任务1在执行过程中,后续任务可能已经加载完成,如图8中的c所示,任务1执行完成时,任务2已经加载完成,任务3也已经加载了一部分,保证任务1执行完成后,后续任务可以尽快加载完成并执行,避免任务1已经执行完成,任务2还未开始加载,或者还需要很长时间任务2才能加载完成的情况。如果按照时间比进行排序,则可以保证加载任务所需的总时间最短,本方案通过缩短镜像文件的加载时间,达到快速启动嵌入式装置的目的。在运行任务1,任务2,任务3以及任务4后,还可以根据业务的需求,加载镜像文件中除N个任务以外的镜像文件包括的一个或多个任务。
可以理解的是,上述开发和编译的装置以及嵌入式装置为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
从硬件结构上来描述,图5至图7中的镜像文件的获取装置以及嵌入式装置可以由一个实体设备实现,也可以由多个实体设备共同实现,还可以是一个实体设备内的一个逻辑功能模块,本申请实施例对此不作具体限定。
例如,镜像文件的获取装置可以通过图9中的通信设备来实现。图9所示为本申请实施例提供的镜像文件的获取装置的硬件结构示意图。包括:通信接口901和处理器902,还可以包括存储器903。
通信接口901可以使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。
处理器902包括但不限于中央处理器(central processing unit,CPU),网络处理器(network processor,NP),专用集成电路(application-specific integratedcircuit,ASIC)或者可编程逻辑器件(programmable logic device,PLD)中的一个或多个。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)或其任意组合。处理器902负责通信线路904和通常的处理,还可以提供各种功能,包括定时,***接口,电压调节,电源管理以及其他控制功能。存储器903可以用于存储处理器902在执行操作时所使用的数据。
存储器903可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyer服务器able programmable read-only memory,EEPROM)、只读光盘(compact discread-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过通信线路904与处理器902相连接。存储器903也可以和处理器902集成在一起。如果存储器903和处理器902是相互独立的器件,存储器903和处理器902相连,例如存储器903和处理器902可以通过通信线路通信。通信接口901和处理器902可以通过通信线路通信,通信接口901也可以与处理器902直连。
通信线路904可以包括任意数量的互联的总线和桥,通信线路904将包括由处理器902代表的一个或多个处理器902和存储器903代表的存储器的各种电路链接在一起。通信线路904还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本申请不再对其进行进一步描述。
在一个具体的实施方式中,该镜像文件的获取装置,可以包括:存储器,用于存储计算机可读指令;还可以包括,与存储器耦合的处理器,执行存储器中的计算机可读指令从而执行以下操作:确定程序源码中N个任务中的每一个任务的第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载N个任务中的每一个任务所需时长,N为正整数;根据第一数值由大到小对N个任务排序;对排序后的N个任务进行链接以获取镜像文件。
在一个具体的实施方式中,处理器,还用于:获取N个任务中的每一个任务的函数依赖关系,每一个任务的函数依赖关系为N个任务中的每一个任务所可以包括的函数之间的调用关系;根据N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所可以包括的函数进行链接以获取镜像文件。
在一个具体的实施方式中,处理器,具体用于:获取程序源码中全部任务的语法树信息,全部任务可以包括N个任务;根据语法树信息获取全部任务的函数依赖关系,全部任务的函数依赖关系为全部任务所可以包括的函数之间的调用关系;根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。
在一个具体的实施方式中,处理器,还用于:划分程序源码,划分后的程序源码可以包括N个任务对应的程序源码和M个任务对应的程序源码,N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。
在一个具体的实施方式中,处理器,具体用于:根据N个任务中的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置可以包括第一时间戳,结束位置可以包括第二时间戳;运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。
本申请实施例可以根据上述方法示例对该镜像文件的获取装置进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
比如,以采用集成的方式划分各个功能单元的情况下,图10示出了一种镜像文件的获取装置的结构示意图。
如图10所示,本申请实施例提供的镜像文件的获取装置,包括:
存储单元1001,用于存储计算机可读指令。还可以包括,与存储单元1001耦合的处理单元1002,执行存储单元1001中的计算机可读指令从而执行以下操作:获取程序源码中的N个任务中的每一个任务的函数依赖关系,N为正整数。确定第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长。根据第一数值由大到小对N个任务排序。根据函数依赖关系以及排序对N个任务进行链接,以生成镜像文件。
在一个具体的实施方式中,处理单元1002,具体用于:获取程序源码的全部任务的语法树信息。根据全部任务的语法树信息获取程序源码中全部任务的函数依赖关系。根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。
在一个具体的实施方式中,处理单元1002,还用于:划分程序源码,划分后的程序源码可以包括N个任务对应的程序源码和M个任务对应的程序源码,N个任务对应嵌入式装置的关键业务,M个任务对应嵌入式装置中除关键业务以外的其余业务。
在一个具体的实施方式中,处理单元1002,具体用于:根据N个任务的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置可以包括第一时间戳,结束位置可以包括第二时间戳。运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。
再比如,对应各个功能划分各个功能单元,图11示出了一种镜像文件的获取装置的结构示意图。
如图11所示,本申请实施例提供的镜像文件的获取装置,包括:
编译分析模块1101,用于获取程序源码中的N个任务中的每一个任务的函数依赖关系,N为正整数。
任务排序分析模块1102,用于确定第一数值,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长。根据第一数值由大到小对N个任务排序。
链接任务模块1103,用于根据N个任务的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所包括的函数进行链接,以生成镜像文件。
在一个具体的实施方式中,编译分析模块1101包括语法树分析单元11011和分析函数依赖关系单元11012。其中,语法树分析单元11011,用于获取镜像文件的程序源码中的全部任务的语法树信息。分析函数依赖关系单元11012,用于根据全部任务的语法树信息获取程序源码中的全部任务的函数依赖关系,根据程序源码中的标注以及全部任务的函数依赖关系确定N个任务中的每一个任务的函数依赖关系,标注为预先设定、用于标识任务的功能,N个任务的功能预先规定。
在一个具体的实施方式中,任务排序分析模块1102包括计算单元11021和排序单元11022,计算单元11021,用于根据N个任务中的每一个任务的函数依赖关系确定N个任务中的每一个任务的起始位置和结束位置,起始位置可以包括第一时间戳,结束位置可以包括第二时间戳。运行N个任务中的每一个任务,根据第一时间戳和第二时间戳的差值确定第一数值。排序单元11022,用于根据第一数值由大到小对N个任务排序。
此外,嵌入式装置可以通过图12中的通信设备来实现。图12所示为本申请实施例提供的嵌入式装置的硬件结构示意图。包括:通信接口1201和处理器1202,还可以包括存储器1203。
通信接口1201可以使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless localarea networks,WLAN)等。
处理器1202包括但不限于中央处理器(central processing unit,CPU),网络处理器(network processor,NP),专用集成电路(application-specific integratedcircuit,ASIC)或者可编程逻辑器件(programmable logic device,PLD)中的一个或多个。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)或其任意组合。处理器1202负责通信线路1204和通常的处理,还可以提供各种功能,包括定时,***接口,电压调节,电源管理以及其他控制功能。存储器1203可以用于存储处理器1202在执行操作时所使用的数据。
存储器1203可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically er服务器able programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过通信线路1204与处理器1202相连接。存储器1203也可以和处理器1202集成在一起。如果存储器1203和处理器1202是相互独立的器件,存储器1203和处理器1202相连,例如存储器1203和处理器1202可以通过通信线路通信。通信接口1201和处理器1202可以通过通信线路通信,通信接口1201也可以与处理器1202直连。
通信线路1204可以包括任意数量的互联的总线和桥,通信线路1204将包括由处理器1202代表的一个或多个处理器1202和存储器1203代表的存储器的各种电路链接在一起。通信线路1204还可以将诸如***设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本申请不再对其进行进一步描述。
在一个具体的实施方式中,该嵌入式装置,可以包括:存储器,用于存储计算机可读指令。还可以包括,与存储器耦合的处理器,执行存储器中的计算机可读指令从而执行以下操作:加载***镜像文件中的N个任务并运行N个任务,N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。
在一个具体的实施方式中,处理器,还用于:在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件可以包括的一个或多个任务。
本申请实施例可以根据上述方法示例对该嵌入式装置进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
比如,以采用集成的方式划分各个功能单元的情况下,图13示出了一种嵌入式装置的结构示意图。
如图13所示,本申请实施例提供的嵌入式装置,包括:存储单元1301,用于存储计算机可读指令。还可以包括,与存储单元1301耦合的处理单元1302,执行存储单元1301中的计算机可读指令从而执行以下操作:加载***镜像文件中的N个任务并运行N个任务,N个任务根据第一数值由大到小链接,第一数值为执行N个任务中的每一个任务所需第一时长,或者第一数值为第一时长与第二时长的比值,第二时长为加载每一个任务所需时长,N为正整数。
在一个具体的实施方式中,处理单元1302,还用于:在运行N个任务后,加载镜像文件中除N个任务以外的镜像文件可以包括的一个或多个任务。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本申请实施例所提供的镜像文件的方法、嵌入式装置的启动方法、镜像文件的获取装置以及嵌入式装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (18)
1.一种镜像文件的获取方法,其特征在于,包括:
确定程序源码中N个任务中的每一个任务的第一数值,所述第一数值为执行所述N个任务中的每一个任务所需第一时长,或者所述第一数值为所述第一时长与第二时长的比值,所述第二时长为加载所述N个任务中的每一个任务所需时长,所述N为正整数;
根据所述第一数值由大到小对所述N个任务排序;
对排序后的所述N个任务进行链接以获取镜像文件。
2.根据权利要求1所述的镜像文件的获取方法,其特征在于,所述方法还包括:
获取所述N个任务中的每一个任务的函数依赖关系,所述每一个任务的函数依赖关系为所述N个任务中的每一个任务所包括的函数之间的调用关系;
所述对排序后的N个任务进行链接以获取镜像文件,包括:
根据所述N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所包括的函数进行链接以获取镜像文件。
3.根据权利要求2所述的方法,其特征在于,所述获取所述N个任务中的每一个任务的函数依赖关系,包括:
获取所述程序源码中全部任务的语法树信息,所述全部任务包括所述N个任务;
根据所述语法树信息获取所述全部任务的函数依赖关系,所述全部任务的函数依赖关系为所述全部任务所包括的函数之间的调用关系;
根据所述程序源码中的标注以及所述全部任务的函数依赖关系确定所述N个任务中的每一个任务的函数依赖关系,所述标注为预先设定、用于标识任务的功能,所述N个任务的功能预先规定。
4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:
划分所述程序源码,划分后的所述程序源码包括所述N个任务对应的程序源码和M个任务对应的程序源码,所述N个任务对应所述嵌入式装置的关键业务,所述M个任务对应所述嵌入式装置中除所述关键业务以外的其余业务。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述确定程序源码中N个任务中的每一个任务的第一数值,包括:
根据所述N个任务中的每一个任务的函数依赖关系确定所述N个任务中的每一个任务的起始位置和结束位置,所述起始位置包括第一时间戳,所述结束位置包括第二时间戳;
运行所述N个任务中的每一个任务,根据所述第一时间戳和所述第二时间戳的差值确定所述第一数值。
6.一种嵌入式装置的启动方法,其特征在于,包括:
加载***镜像文件中的N个任务并运行所述N个任务,所述N个任务根据第一数值由大到小链接,所述第一数值为执行所述N个任务中的每一个任务所需第一时长,或者所述第一数值为所述第一时长与第二时长的比值,所述第二时长为加载所述每一个任务所需时长,所述N为正整数。
7.根据权利要求6所述启动方法,其特征在于,还包括:
在运行所述N个任务后,加载所述镜像文件中除所述N个任务以外的所述镜像文件包括的一个或多个任务。
8.一种镜像文件的获取装置,其特征在于,包括:
存储器,用于存储计算机可读指令;
还包括,与所述存储器耦合的处理器,执行所述存储器中的计算机可读指令从而执行以下操作:
确定程序源码中N个任务中的每一个任务的第一数值,所述第一数值为执行所述N个任务中的每一个任务所需第一时长,或者所述第一数值为所述第一时长与第二时长的比值,所述第二时长为加载所述N个任务中的每一个任务所需时长,所述N为正整数;
根据所述第一数值由大到小对所述N个任务排序;
对排序后的所述N个任务进行链接以获取镜像文件。
9.根据权利要求8所述的装置,其特征在于,所述处理器,还用于:
获取所述N个任务中的每一个任务的函数依赖关系,所述每一个任务的函数依赖关系为所述N个任务中的每一个任务所包括的函数之间的调用关系;
根据所述N个任务中的每一个任务的函数依赖关系对排序后的N个任务中的每一个任务所包括的函数进行链接以获取镜像文件。
10.根据权利要求9所述的装置,其特征在于,所述处理器,具体用于:
获取所述程序源码中全部任务的语法树信息,所述全部任务包括所述N个任务;
根据所述语法树信息获取所述全部任务的函数依赖关系,所述全部任务的函数依赖关系为所述全部任务所包括的函数之间的调用关系;
根据所述程序源码中的标注以及所述全部任务的函数依赖关系确定所述N个任务中的每一个任务的函数依赖关系,所述标注为预先设定、用于标识任务的功能,所述N个任务的功能预先规定。
11.根据权利要求8至10任一项所述的装置,其特征在于,所述处理器,还用于:
划分所述程序源码,划分后的所述程序源码包括所述N个任务对应的程序源码和M个任务对应的程序源码,所述N个任务对应所述嵌入式装置的关键业务,所述M个任务对应所述嵌入式装置中除所述关键业务以外的其余业务。
12.根据权利要求8至11任一项所述的装置,其特征在于,所述处理器,具体用于:
根据所述N个任务中的每一个任务的函数依赖关系确定所述N个任务中的每一个任务的起始位置和结束位置,所述起始位置包括第一时间戳,所述结束位置包括第二时间戳;
运行所述N个任务中的每一个任务,根据所述第一时间戳和所述第二时间戳的差值确定所述第一数值。
13.一种嵌入式装置,其特征在于,包括:
存储器,用于存储计算机可读指令;
还包括,与所述存储器耦合的处理器,执行所述存储器中的计算机可读指令从而执行以下操作:
加载***镜像文件中的N个任务并运行所述N个任务,所述N个任务根据第一数值由大到小链接,所述第一数值为执行所述N个任务中的每一个任务所需第一时长,或者所述第一数值为所述第一时长与第二时长的比值,所述第二时长为加载所述每一个任务所需时长,所述N为正整数。
14.根据权利要求13所述的嵌入式装置,其特征在于,所述处理器,还用于:
在运行所述N个任务后,加载所述镜像文件中除所述N个任务以外的所述镜像文件包括的一个或多个任务。
15.一种计算机可读存储介质,其特征在于,当指令在计算机装置上运行时,使得所述计算机装置执行如权利要求1至5任一所述的方法。
16.一种计算机可读存储介质,其特征在于,当指令在计算机装置上运行时,使得所述计算机装置执行如权利要求6或7所述的方法。
17.一种计算机程序产品,当其在计算机上运行时,使得计算机可以执行如权利要求1至5任一所述的方法。
18.一种计算机程序产品,当其在计算机上运行时,使得计算机可以执行如权利要求6或7所述的方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911018528.0A CN112711427A (zh) | 2019-10-24 | 2019-10-24 | 一种镜像文件的获取方法以及装置 |
PCT/CN2020/113239 WO2021077916A1 (zh) | 2019-10-24 | 2020-09-03 | 一种镜像文件的获取方法以及装置 |
EP20879292.9A EP4036716B1 (en) | 2019-10-24 | 2020-09-03 | Method and device for acquiring mirror image file |
US17/727,166 US20220244931A1 (en) | 2019-10-24 | 2022-04-22 | Image file obtaining method and apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911018528.0A CN112711427A (zh) | 2019-10-24 | 2019-10-24 | 一种镜像文件的获取方法以及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112711427A true CN112711427A (zh) | 2021-04-27 |
Family
ID=75540324
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911018528.0A Pending CN112711427A (zh) | 2019-10-24 | 2019-10-24 | 一种镜像文件的获取方法以及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20220244931A1 (zh) |
EP (1) | EP4036716B1 (zh) |
CN (1) | CN112711427A (zh) |
WO (1) | WO2021077916A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116166341A (zh) * | 2023-04-25 | 2023-05-26 | 中国人民解放军军事科学院***工程研究院 | 一种基于深度学习的静态云边协同架构函数计算卸载方法 |
US20230244467A1 (en) * | 2022-02-03 | 2023-08-03 | Red Hat, Inc. | Reducing the size of image files usable for deploying software in computing environments |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101515239A (zh) * | 2009-04-08 | 2009-08-26 | 南京航空航天大学 | X86飞控计算机快速启动方法 |
US20100262839A1 (en) * | 2007-06-29 | 2010-10-14 | Johan Eker | Obfuscating Execution Traces of Computer Program Code |
US20140280719A1 (en) * | 2013-03-15 | 2014-09-18 | Desire2Learn Incorporated | System and method for dynamically loading a webpage |
CN105630543A (zh) * | 2015-12-21 | 2016-06-01 | 北京奇虎科技有限公司 | 一种应用冷启动加速的方法及装置 |
CN105760201A (zh) * | 2016-02-29 | 2016-07-13 | 华为技术有限公司 | 一种嵌入式装置的启动方法和装置 |
CN106055462A (zh) * | 2016-05-20 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 一种时长获取方法和装置 |
CN114064141A (zh) * | 2021-10-22 | 2022-02-18 | 用友网络科技股份有限公司 | 中间件启动时长优化方法、装置和可读存储介质 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001065359A2 (en) * | 2000-02-29 | 2001-09-07 | Peter Petrov | Method and apparatus for building a memory image |
US20030121024A1 (en) * | 2001-12-13 | 2003-06-26 | Microsoft Corporation | System and method for building a runtime image from components of a software program |
US20030140174A1 (en) * | 2002-01-08 | 2003-07-24 | Tsutomu Ohishi | Method for generating application for information processing apparatus and image forming apparatus |
US7694291B2 (en) * | 2004-04-06 | 2010-04-06 | Hewlett-Packard Development Company, L.P. | Build optimizer tool for efficient management of software builds for mobile devices |
EP2356567A2 (en) * | 2008-12-08 | 2011-08-17 | Kpit Cummins Infosystems Ltd. | Method for reorganizing tasks for optimization of resources |
CN101794232A (zh) * | 2009-06-23 | 2010-08-04 | 深圳市朗科科技股份有限公司 | 快速启动***的方法 |
US8719808B1 (en) * | 2010-01-27 | 2014-05-06 | Altera Corporation | Method and apparatus for using object files to provide reliable program operation |
US8918766B2 (en) * | 2012-12-12 | 2014-12-23 | Microsoft Corporation | Analysis of propagated information using annotated forests |
US9830242B2 (en) * | 2015-01-14 | 2017-11-28 | Mediatek Inc. | Loading calculation method and loading calculation system for processor in electronic device |
US20160350081A1 (en) * | 2015-05-27 | 2016-12-01 | Runnable Inc. | Automatic container definition |
US10579341B2 (en) * | 2015-06-08 | 2020-03-03 | Synopsys, Inc. | Generation of workload models from execution traces |
CN109284137B (zh) * | 2018-09-21 | 2022-02-11 | 武汉光庭信息技术股份有限公司 | 一种基于Hypervisor的QNX操作***启动方法及装置 |
US20200159536A1 (en) * | 2018-11-21 | 2020-05-21 | Sri International | Unicontainers |
US11080027B2 (en) * | 2019-01-10 | 2021-08-03 | Vmware, Inc. | Curated image management in a FaaS infrastructure |
-
2019
- 2019-10-24 CN CN201911018528.0A patent/CN112711427A/zh active Pending
-
2020
- 2020-09-03 WO PCT/CN2020/113239 patent/WO2021077916A1/zh unknown
- 2020-09-03 EP EP20879292.9A patent/EP4036716B1/en active Active
-
2022
- 2022-04-22 US US17/727,166 patent/US20220244931A1/en active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100262839A1 (en) * | 2007-06-29 | 2010-10-14 | Johan Eker | Obfuscating Execution Traces of Computer Program Code |
CN101515239A (zh) * | 2009-04-08 | 2009-08-26 | 南京航空航天大学 | X86飞控计算机快速启动方法 |
US20140280719A1 (en) * | 2013-03-15 | 2014-09-18 | Desire2Learn Incorporated | System and method for dynamically loading a webpage |
CN105630543A (zh) * | 2015-12-21 | 2016-06-01 | 北京奇虎科技有限公司 | 一种应用冷启动加速的方法及装置 |
CN105760201A (zh) * | 2016-02-29 | 2016-07-13 | 华为技术有限公司 | 一种嵌入式装置的启动方法和装置 |
CN106055462A (zh) * | 2016-05-20 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 一种时长获取方法和装置 |
CN114064141A (zh) * | 2021-10-22 | 2022-02-18 | 用友网络科技股份有限公司 | 中间件启动时长优化方法、装置和可读存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230244467A1 (en) * | 2022-02-03 | 2023-08-03 | Red Hat, Inc. | Reducing the size of image files usable for deploying software in computing environments |
US11928452B2 (en) * | 2022-02-03 | 2024-03-12 | Red Hat, Inc. | Reducing the size of image files usable for deploying software in computing environments |
CN116166341A (zh) * | 2023-04-25 | 2023-05-26 | 中国人民解放军军事科学院***工程研究院 | 一种基于深度学习的静态云边协同架构函数计算卸载方法 |
Also Published As
Publication number | Publication date |
---|---|
EP4036716B1 (en) | 2024-08-21 |
US20220244931A1 (en) | 2022-08-04 |
EP4036716A4 (en) | 2022-11-23 |
WO2021077916A1 (zh) | 2021-04-29 |
EP4036716A1 (en) | 2022-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240028320A1 (en) | Methods and systems of software testing, distribution, installation and deployment | |
JP7090657B2 (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
US11481200B1 (en) | Checking source code validity at time of code update | |
CN102402427B (zh) | 一种Java应用程序的更新方法及装置 | |
CN112015491B (zh) | 实现函数跳转的方法、装置及计算机存储介质 | |
US20140149728A1 (en) | Data driven hardware chips initialization via hardware procedure framework | |
US20220244931A1 (en) | Image file obtaining method and apparatus | |
US10409567B2 (en) | Trimming unused dependencies using package graph and module graph | |
US20190050209A1 (en) | Method and system to develop, deploy, test, and manage platform-independent software | |
JPWO2017033441A1 (ja) | システム構築支援システム、方法および記憶媒体 | |
CN113238795A (zh) | 组件发布方法、装置、电子设备、存储介质及程序产品 | |
CN112783516A (zh) | 硬件适配的方法、电子设备和计算机可读存储介质 | |
US11347523B2 (en) | Updated shared library reloading without stopping the execution of an application | |
CN113454606B (zh) | 不同编译的可执行文件之间的软件检查点-恢复 | |
CN114327574A (zh) | 一种差分升级方法、电子设备及存储介质 | |
US11947966B2 (en) | Identifying computer instructions enclosed by macros and conflicting macros at build time | |
CN113626307A (zh) | 一种基于k8s容器平台的数据校验方法和装置 | |
US20230401069A1 (en) | Exception handling method and related apparatus | |
JP3183398B2 (ja) | 資源構成情報管理方式 | |
CN113703728A (zh) | 一种辅助研发的微组件业务处理方法、装置以及设备 | |
CN114942801A (zh) | 基于fsm的应用发布任务处理方法、装置及电子设备 | |
CN116302332A (zh) | 模拟器的处理方法、装置、计算机设备、存储介质 | |
CN116932044A (zh) | 一种指令翻译方法及其相关设备 | |
CN118259978A (zh) | 一种应用配置参数修改方法、装置、电子设备及存储介质 | |
CN118427094A (zh) | 嵌入式***模糊测试方法、***、设备及存储介质 |
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 |