CN108241516B - 嵌入式***程序加载方法、装置、计算机设备和存储介质 - Google Patents
嵌入式***程序加载方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN108241516B CN108241516B CN201810136826.9A CN201810136826A CN108241516B CN 108241516 B CN108241516 B CN 108241516B CN 201810136826 A CN201810136826 A CN 201810136826A CN 108241516 B CN108241516 B CN 108241516B
- Authority
- CN
- China
- Prior art keywords
- loading
- segment
- memory
- loaded
- address
- 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.)
- Active
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/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44573—Execute-in-place [XIP]
-
- 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/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请涉及一种嵌入式***程序加载方法、装置、计算机设备和存储介质。所述方法包括:获取携带有待加载任务的应用功能的加载指令;根据加载指令查找功能映射表,确定可执行镜像文件中与应用功能对应的加载段;获取确定的加载段的内存绝对地址;按照内存绝对地址将加载段加载至***的内存。采用本方法能够基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,且无需再通过加载器动态分配地址加载,提高了***启动运行的速度,并降低了对***的内存需求以及对加载器的处理要求。通过降低对整个嵌入式***的软硬件标准,进而能够有效降低对***的成本需求。
Description
技术领域
本申请涉及嵌入式技术领域,特别是涉及一种嵌入式***程序加载方法、装置、计算机设备和存储介质。
背景技术
嵌入式***的启动过程一般可分为初始化阶段、***加载阶段和就绪阶段,其中,***加载阶段为启动过程中最为复杂且最为核心的一个阶段,常用的***加载方法包括静态加载和动态加载。静态加载需要在开始运行可执行镜像文件中的指令前,把整个可执行镜像文件都加载到内存上,需要较大的内存容量,而动态加载虽然由加载器在加载过程中动态的向***申请内存按需加载,降低了对***内存的需求,但同时也提升了对加载器的要求。
目前的嵌入式***加载方式,无论是对大容量内存的需求还是对高标准加载器的需求,均在一定程度上提高了整个嵌入式***的成本。
发明内容
基于此,有必要针对上述技术问题,提供一种能够降低嵌入式***成本的嵌入式***程序加载方法、装置、计算机设备和存储介质。
一种嵌入式***程序加载方法,所述方法包括:
获取携带有待加载任务的应用功能的加载指令;
根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
获取确定的所述加载段的内存绝对地址;
按照所述内存绝对地址将所述加载段加载至***的内存。
在其中一个实施例中,所述按照所述内存绝对地址将所述加载段加载至***的内存,包括:
获取所述加载段中当前待加载的待加载段;
对所述待加载段进行识别,得到所述待加载段的内容;
当根据所述待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将所述待加载段的内容加载至***的内存。
在其中一个实施例中,所述方法还包括:
检测所述应用功能对应的加载段是否加载完成;
当检测到所述加载段未加载完成时,返回所述获取所述加载段中当前待加载的待加载段的步骤。
在其中一个实施例中,所述方法还包括:
按照应用功能分别对***的代码段和数据段进行划分,并根据所述应用功能定义划分后的代码段和数据段的属性;
按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段;
根据链接成的加载段生成可执行镜像文件。
在其中一个实施例中,所述按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段,包括:
按照代码段和数据段的属性获取待链接的代码段和数据段;
将所述待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
在其中一个实施例中,所述获取所述加载段的内存绝对地址,包括:
对所述可执行镜像文件进行解析,得到段地址数据;
根据所述段地址数据确定所述加载段的内存绝对地址。
一种嵌入式***程序加载装置,所述装置包括:
指令获取模块,用于获取携带有待加载任务的应用功能的加载指令;
确定模块,用于根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
地址获取模块,用于获取确定的所述加载段的内存绝对地址;
加载模块,用于按照所述内存绝对地址将所述加载段加载至***的内存。
在其中一个实施例中,所述加载模块包括:
待加载段获取模块,用于获取所述加载段中当前待加载的待加载段;
识别模块,用于对所述待加载段进行识别,得到所述待加载段的内容;
加载处理模块,用于当根据所述待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将所述待加载段的内容加载至***的内存。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取携带有待加载任务的应用功能的加载指令;
根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
获取确定的所述加载段的内存绝对地址;
按照所述内存绝对地址将所述加载段加载至***的内存。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取携带有待加载任务的应用功能的加载指令;
根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
获取确定的所述加载段的内存绝对地址;
按照所述内存绝对地址将所述加载段加载至***的内存。
上述嵌入式***程序加载方法、装置、计算机设备和存储介质,在获取携带有待加载任务的应用功能的加载指令时,根据加载指令查找功能映射表确定可执行镜像文件中与应用功能对应的加载段,并获取加载段的内存绝对地址,进而按照对应的内存绝对地址即可将对应的加载段加载至***的内存。基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,且无需再通过加载器动态分配地址加载,降低了对***的内存需求以及对加载器的处理要求。通过降低对整个嵌入式***的软硬件标准,进而能够有效降低对***的成本需求。
附图说明
图1为一个实施例中嵌入式***程序加载方法的流程示意图;
图2为一个实施例中加载过程中待加载段加载步骤的流程示意图;
图3为一个实施例中可执行镜像文件生成步骤的流程示意图;
图4为一个实施例中可执行镜像文件的结构示意图;
图5为一个实施例中可执行镜像文件中段加载命令的结构示意图;
图6为另一个实施例中嵌入式***程序加载方法的流程示意图;
图7一个实施例中嵌入式***程序加载装置的结构框图;
图8为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种嵌入式***程序加载方法,该方法包括以下步骤:
S102,获取携带有待加载任务的应用功能的加载指令。
其中,加载指令是指需要执行加载时所触发的指令,该指令携带有待加载任务的应用功能。
具体地,当用户需要运行某个应用功能时,则在运行前会触发一个加载指令,以便处理器将对应的加载段加载至内存后,再启动执行内存中的加载段中的指令。
S104,根据加载指令查找功能映射表,确定可执行镜像文件中与应用功能对应的加载段。
其中,功能映射表是指预先设置的包含应用功能与各加载段对应关系的数据表。对应关系可以为应用功能标识与加载段标识之间的对应关系,也可以是应用功能标识与对应加载段的内存绝对地址之间的对应关系,内存绝对地址为加载段加载时的内存绝对地址。在本实施例中,所确定的加载段可以包括代码段、数据段等一个或多个加载段。当需要运行某一应用之前,基于该功能映射表即可快速确定需要加载的加载段,并进行加载,实现了按需加载的效果。
在本实施例中,对获取的加载指令进行解析得到应用功能,基于功能映射表查找与该应用功能对应的加载段,根据查找结果确定可执行镜像文件中与应用功能对应的加载段。
具体地,当功能映射表包含的对应关系为应用功能标识与加载段标识之间的对应关系时,对获取的加载指令进行解析得到应用功能,在功能映射表查找该应用功能的标识,根据该应用功能标识与加载段标识之间的对应关系,确定可执行镜像文件中与应用功能对应的加载段。
当功能映射表包含的对应关系为应用功能标识与对应加载段的内存绝对地址之间的对应关系时,对获取的加载指令进行解析得到应用功能,在功能映射表查找该应用功能的标识,根据该应用功能标识与加载段的内存绝对地址之间的对应关系,得到对应加载段的内存绝对地址,进一步根据加载段与内存绝对地址之间的对应关系即可确定执行当前应用功能所需加载的加载段。
S106,获取确定的加载段的内存绝对地址。
其中,内存绝对地址是指将加载段加载至内存的实际地址。可执行镜像文件中的每一个加载段都拥有固定唯一的内存绝对地址,且该内存绝对地址在通过编译和链接之后便已经生成,并记录在可执行镜像文件中。
在本实施例,在确定需要加载的加载段之后,查询所确定的加载段的内存绝对地址,以便根据内存绝对地址进行加载。
S108,按照内存绝对地址将加载段加载至***的内存。
根据应用功能确定的所有加载段,获取所确定的所有加载段数据,并基于各加载段的内存绝对地址,分别将加载段拷贝至对应的内存空间,以便启动运行应用时,处理器执行该内存空间的存储的指令。在本实施例中,仅需按需加载相应的加载段至内存即可,无需把可执行镜像文件中的所有加载段都加载至内存后再开始执行指令,既降低了对内存空间的消耗,同时又提高了***的启动速度。
上述嵌入式***程序加载方法,在获取携带有待加载任务的应用功能的加载指令时,根据加载指令查找功能映射表确定可执行镜像文件中与应用功能对应的加载段,并获取加载段的内存绝对地址,进而按照对应的内存绝对地址即可将对应的加载段加载至***的内存。基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,且无需再通过加载器动态分配地址加载,降低了对***的内存需求以及对加载器的处理要求。通过降低对整个嵌入式***的软硬件标准,进而能够有效减少***的成本需求。
在一实施例中,如图2所示,按照内存绝对地址将加载段加载至***的内存,包括:
S202,获取加载段中当前待加载的待加载段。
其中,待加载段是指所确定的所有加载段中,下一个需要加载的加载段。例如,下一个需要加载的段为数据段。
S204,对待加载段进行识别,得到待加载段的内容。
S206,当根据待加载段的内容检测到该待加载段未被加载时,按照对应内存绝对地址将待加载段的内容加载至***的内存。
在本实施例中,对待加载段进行识别,得到待加载段的内容,并根据待加载段的内容判断该待加载段是否已经加载,若未加载,则按照该待加载段的内存绝对地址将待加载段的内容加载至***的内存。通过对待加载段的内容进行识别,避免对已经加载的加载段进行重复加载而造成的内存空间浪费,进一步节省了内存空间。
进一步地,嵌入式***程序加载方法还包括:检测应用功能对应的加载段是否加载完成;当检测到加载段未加载完成时,返回获取加载段中当前待加载的待加载段的步骤。在本实施例中,对加载进程进行检测,以获悉所需加载的加载段是否均已加载完成,若未完成则继续执行加载,直到相应的应用功能的所有加载段均加载至内存中。
在一实施例中,如图3所示,嵌入式***程序加载方法还包括以下步骤:
S302,按照应用功能分别对***的代码段和数据段进行划分,并根据应用功能定义划分后的代码段和数据段的属性。
在本实施例中,通过编译器将源代码编译成二进制目标文件,并基于定义的应用功能,利用编译器实现代码段和数据段的划分,根据应用功能定义划分后的代码段和数据段的属性。
S304,按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段。
链接器将需要的二进制目标文件中的各个段链接成一个输出段,具体地,按照各个段的属性链接成一个个连续的代码段或者数据段,该代码段或者数据段对应到可执行镜像文件中的加载段。
S306,根据链接成的加载段生成可执行镜像文件。
其中,可执行镜像文件指的是可以由操作***进行加载执行的文件。在本实施例中,当后续需要运行某一应用之前,基于功能映射表即可快速确定可执行镜像文件中需要加载的加载段,并直接将对应的加载段加载至内存并运行。
在一实施例中,按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段,包括:按照代码段和数据段的属性获取待链接的代码段和数据段;将待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
链接器将需要的代码段和数据段链接成对应的输出段,并计算输出段的长度,为各输出段分配内存绝对地址,建立位置映射关系。其中,针对相互独立的应用功能,其对应的加载段可以分配同一个内存绝对地址,且不同段之间可以相互叠加,从而在保证应用正常运行的前提下,进一步节省内存空间。
在本实施例中,各加载段的内存绝对地址在链接之后便已经生成,因此,无需再由加载器动态生成内存地址,相比于传统的动态加载方法,进一步降低了对加载器的要求,同时简化了加载流程,进而通过提高程序加载速度有效提升了***的启动效率。
在一实施例中,获取加载段的内存绝对地址,包括:对可执行镜像文件进行解析,得到段地址数据;根据段地址数据确定加载段的内存绝对地址。
在本实施例中,由于各加载段的内存绝对地址在链家完成之后便已经生成并记录于可执行镜像文件的段地址数据中,因此,当需要进行加载时,通过解析可执行镜像文件得到段地址数据即可确定加载段的内存绝对地址,以便根据记录的内存绝对地址将所需加载的段加载至对应的内存地址中。
以OMAP L1x系列ARM处理器的C/C++编译器和链接器为例,基于该编译器和链接器生成的可执行镜像文件的结构如图4所示,该可执行镜像文件由一个Magic Word(幻数)和若干个命令段组成,其中,幻数用于表示文件标识开始。如图4所示,定义了可执行镜像文件是由一个幻数“0x41504954”作为文件标识开始,其后紧接着若干个命令。最常用的命令包含了函数执行命令(0x5853590D)、段加载命令(0x58535901)和跳转命令(0x58535906)等。所有命令由操作码、参数和数据组成,其中,参数和数据为可选项。在图5中示出了段加载命令的结构示意图,该段记载命令中记载了段地址数据以及对应的加载段,当需要执行加载任务时,通过解析可执行镜像文件即可获得段地址数据以及加载段。可以理解的是,通过编译器、链接器对应的命令的改写生成包含段地址数据的可执行镜像文件,当需要运行应用时,基于所生成的功能映射表以及可执行镜像文件即可按需进行加载。
如图6所示,为一具体实施例中的嵌入式***程序加载方法,当获取到携带有待加载任务的应用功能的加载指令时,则表示满足加载条件,开始执行加载,加载过程具体包括以下步骤:
S602,根据加载指令查找功能映射表,确定需要加载的加载段及其内存绝对地址。
S604,获取当前待加载的待加载段。
S606,对待加载段的内容进行识别。
S608,根据识别结果判断该待加载段是否已经加载。若否,则执行步骤S610;若是,则执行步骤S612,
S610,将该待加载段拷贝至对应的内存绝对地址。
S612,判断所需加载的段是否加载完毕。若否,则返回步骤S604,否则则加载完成,可以启动运行加载至内存的指令。
根据上述命令语句以及加载流程可知,该方法基于传统的静态编译器、链接器和加载器即可实现,降低了对整个嵌入式***的软硬件标准,进而使得该方法应用范围广泛。并且,基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,无需把可执行镜像文件中的所有加载段都加载至内存后再开始执行指令,也不需要再通过动态加载器分配加载地址,相比于传统加载方法节省的内存空间并降低了加载复杂度,进一步提高了***的启动速度。
应该理解的是,虽然图1-3、6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-3、6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图7所示,提供了一种嵌入式***程序加载装置,包括:
指令获取模块702,用于获取携带有待加载任务的应用功能的加载指令。
具体地,当用户需要运行某个应用功能时,则在运行前会触发一个加载指令,以便处理器将对应的加载段加载至内存后,再启动执行内存中的加载段中的指令。
确定模块704,用于根据加载指令查找功能映射表,确定可执行镜像文件中与应用功能对应的加载段。
在本实施例中,对获取的加载指令进行解析得到应用功能,基于功能映射表查找与该应用功能对应的加载段,根据查找结果确定可执行镜像文件中与应用功能对应的加载段。
具体地,当功能映射表包含的对应关系为应用功能标识与加载段标识之间的对应关系时,对获取的加载指令进行解析得到应用功能,在功能映射表查找该应用功能的标识,根据该应用功能标识与加载段标识之间的对应关系,确定可执行镜像文件中与应用功能对应的加载段。
当功能映射表包含的对应关系为应用功能标识与对应加载段的内存绝对地址之间的对应关系时,对获取的加载指令进行解析得到应用功能,在功能映射表查找该应用功能的标识,根据该应用功能标识与加载段的内存绝对地址之间的对应关系,得到对应加载段的内存绝对地址,进一步根据加载段与内存绝对地址之间的对应关系即可确定执行当前应用功能所需加载的加载段。
地址获取模块706,用于获取确定的加载段的内存绝对地址。
在本实施例,在确定需要加载的加载段之后,查询所确定的加载段的内存绝对地址,以便根据内存绝对地址进行加载。
加载模块708,用于按照内存绝对地址将加载段加载至***的内存。
根据应用功能确定的所有加载段,获取所确定的所有加载段数据,并基于各加载段的内存绝对地址,分别将加载段拷贝至对应的内存空间,以便启动运行应用时,处理器执行该内存空间的存储的指令。在本实施例中,仅需按需加载相应的加载段至内存即可,无需把可执行镜像文件中的所有加载段都加载至内存后再开始执行指令,既降低了对内存空间的消耗,同时又提高了***的启动速度。
上述嵌入式***程序加载装置,在获取携带有待加载任务的应用功能的加载指令时,根据加载指令查找功能映射表确定可执行镜像文件中与应用功能对应的加载段,并获取加载段的内存绝对地址,进而按照对应的内存绝对地址即可将对应的加载段加载至***的内存。基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,且无需再通过加载器动态分配地址加载,降低了对***的内存需求以及对加载器的处理要求。通过降低对整个嵌入式***的软硬件标准,进而能够有效减少***的成本需求。
在一实施例中,加载模块708包括:待加载段获取模块、识别模块和加载处理模块,其中:
待加载段获取模块,用于获取加载段中当前待加载的待加载段。
识别模块,用于对待加载段进行识别,得到待加载段的内容。
加载处理模块,用于当根据待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将待加载段的内容加载至***的内存。
在本实施例中,对待加载段进行识别,得到待加载段的内容,并根据待加载段的内容判断该待加载段是否已经加载,若未加载,则按照该待加载段的内存绝对地址将待加载段的内容加载至***的内存。通过对待加载段的内容进行识别,避免对已经加载的加载段进行重复加载而造成的内存空间浪费,进一步节省了内存空间。
进一步地,嵌入式***程序加载装置还包括检测模块,用于检测应用功能对应的加载段是否加载完成,当检测到加载段未加载完成时,获取加载段中当前待加载的待加载段继续进行加载。在本实施例中,对加载进程进行检测,以获悉所需加载的加载段是否均已加载完成,若未完成则继续执行加载,直到相应的应用功能的所有加载段均加载至内存中。
在一实施例中,如图3所示,嵌入式***程序加载装置还包括:划分模块,链接模块和可执行镜像文件生成模块,其中:
划分模块,用于按照应用功能分别对***的代码段和数据段进行划分,并根据应用功能定义划分后的代码段和数据段的属性。
在本实施例中,通过编译器将源代码编译成二进制目标文件,并基于定义的应用功能,利用编译器实现代码段和数据段的划分,根据应用功能定义划分后的代码段和数据段的属性。
链接模块,用于按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段。
链接器将需要的二进制目标文件中的各个段链接成一个输出段,具体地,按照各个段的属性链接成一个个连续的代码段或者数据段,该代码段或者数据段对应到可执行镜像文件中的加载段。
可执行镜像文件生成模块,用于根据链接成的加载段生成可执行镜像文件。
其中,可执行镜像文件指的是可以由操作***进行加载执行的文件。在本实施例中,当后续需要运行某一应用之前,基于功能映射表即可快速确定可执行镜像文件中需要加载的加载段,并直接将对应的加载段加载至内存并运行。
在一实施例中,链接模块还用于按照代码段和数据段的属性获取待链接的代码段和数据段;将待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
链接器将需要的代码段和数据段链接成对应的输出段,并计算输出段的长度,为各输出段分配内存绝对地址,建立位置映射关系。其中,针对相互独立的应用功能,其对应的加载段可以分配同一个内存绝对地址,且不同段之间可以相互叠加,从而在保证应用正常运行的前提下,进一步节省内存空间。
在本实施例中,各加载段的内存绝对地址在链接之后便已经生成,因此,无需再由加载器动态生成内存地址,相比于传统的动态加载方法,进一步降低了对加载器的要求,同时简化了加载流程,进而通过提高程序加载速度有效提升了***的启动效率。
进一步地,地址获取模块706还用于对可执行镜像文件进行解析,得到段地址数据;根据段地址数据确定加载段的内存绝对地址。
在本实施例中,由于各加载段的内存绝对地址在链家完成之后便已经生成并记录于可执行镜像文件的段地址数据中,因此,当需要进行加载时,通过解析可执行镜像文件得到段地址数据即可确定加载段的内存绝对地址,以便根据记录的内存绝对地址将所需加载的段加载至对应的内存地址中。
上述嵌入式***程序加载装置,基于功能映射表仅需要按需加载相应的加载段至对应的内存绝对地址,无需把可执行镜像文件中的所有加载段都加载至内存后再开始执行指令,也不需要再通过动态加载器分配加载地址,相比于传统加载方法节省的内存空间并降低了加载复杂度,进一步提高了***的启动速度。
关于嵌入式***程序加载装置的具体限定可以参见上文中对于嵌入式***程序加载方法的限定,在此不再赘述。上述嵌入式***程序加载装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括通过***总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作***和计算机程序。该内存储器为非易失性存储介质中的操作***和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种嵌入式***程序加载方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取携带有待加载任务的应用功能的加载指令;
根据加载指令查找功能映射表,确定可执行镜像文件中与应用功能对应的加载段;
获取确定的加载段的内存绝对地址;
按照内存绝对地址将加载段加载至***的内存。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
获取加载段中当前待加载的待加载段;
对待加载段进行识别,得到待加载段的内容;
当根据待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将待加载段的内容加载至***的内存。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
检测应用功能对应的加载段是否加载完成;
当检测到加载段未加载完成时,返回获取加载段中当前待加载的待加载段的步骤。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
按照应用功能分别对***的代码段和数据段进行划分,并根据应用功能定义划分后的代码段和数据段的属性;
按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段;
根据链接成的加载段生成可执行镜像文件。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
按照代码段和数据段的属性获取待链接的代码段和数据段;
将待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:
对可执行镜像文件进行解析,得到段地址数据;
根据段地址数据确定加载段的内存绝对地址。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取携带有待加载任务的应用功能的加载指令;
根据加载指令查找功能映射表,确定可执行镜像文件中与应用功能对应的加载段;
获取确定的加载段的内存绝对地址;
按照内存绝对地址将加载段加载至***的内存。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
获取加载段中当前待加载的待加载段;
对待加载段进行识别,得到待加载段的内容;
当根据待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将待加载段的内容加载至***的内存。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
检测应用功能对应的加载段是否加载完成;
当检测到加载段未加载完成时,返回获取加载段中当前待加载的待加载段的步骤。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
按照应用功能分别对***的代码段和数据段进行划分,并根据应用功能定义划分后的代码段和数据段的属性;
按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段;
根据链接成的加载段生成可执行镜像文件。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
按照代码段和数据段的属性获取待链接的代码段和数据段;
将待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
对可执行镜像文件进行解析,得到段地址数据;
根据段地址数据确定加载段的内存绝对地址。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、或其它存储介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种嵌入式***程序加载方法,其特征在于,所述方法包括:
获取携带有待加载任务的应用功能的加载指令;
根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
获取确定的所述加载段的内存绝对地址,所述内存绝对地址通过编译和链接生成,并记录在可执行镜像文件中,所述可执行镜像文件中的每一个所述加载段都拥有固定唯一的所述内存绝对地址;
按照所述内存绝对地址将所述加载段加载至***的内存,所述加载为按需加载,所述按需加载是指仅需按需加载相应的加载段至内存。
2.根据权利要求1所述的方法,其特征在于,所述按照所述内存绝对地址将所述加载段加载至***的内存,包括:
获取所述加载段中当前待加载的待加载段;
对所述待加载段进行识别,得到所述待加载段的内容;
当根据所述待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将所述待加载段的内容加载至***的内存。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
检测所述应用功能对应的加载段是否加载完成;
当检测到所述加载段未加载完成时,返回所述获取所述加载段中当前待加载的待加载段的步骤。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
按照应用功能分别对***的代码段和数据段进行划分,并根据所述应用功能定义划分后的代码段和数据段的属性;
按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段;
根据链接成的加载段生成可执行镜像文件。
5.根据权利要求4所述的方法,其特征在于,所述按照代码段和数据段的属性,将代码段和数据段分别链接成对应的加载段,包括:
按照代码段和数据段的属性获取待链接的代码段和数据段;
将所述待链接的代码段和数据段链接成对应的加载段,并为链接生成的加载段分配加载时的内存绝对地址。
6.根据权利要求1所述的方法,其特征在于,所述获取所述加载段的内存绝对地址,包括:
对所述可执行镜像文件进行解析,得到段地址数据;
根据所述段地址数据确定所述加载段的内存绝对地址。
7.一种嵌入式***程序加载装置,其特征在于,所述装置包括:
指令获取模块,用于获取携带有待加载任务的应用功能的加载指令;
确定模块,用于根据所述加载指令查找功能映射表,确定可执行镜像文件中与所述应用功能对应的加载段;
地址获取模块,用于获取确定的所述加载段的内存绝对地址,所述内存绝对地址通过编译和链接生成,并记录在可执行镜像文件中,所述可执行镜像文件中的每一个所述加载段都拥有固定唯一的所述内存绝对地址;
加载模块,用于按照所述内存绝对地址将所述加载段加载至***的内存,所述加载为按需加载,所述按需加载是指仅需按需加载相应的加载段至内存。
8.根据权利要求7所述的装置,其特征在于,所述加载模块包括:
待加载段获取模块,用于获取所述加载段中当前待加载的待加载段;
识别模块,用于对所述待加载段进行识别,得到所述待加载段的内容;
加载处理模块,用于当根据所述待加载段的内容检测到该待加载段未被加载时,按照对应的内存绝对地址将所述待加载段的内容加载至***的内存。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810136826.9A CN108241516B (zh) | 2018-02-09 | 2018-02-09 | 嵌入式***程序加载方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810136826.9A CN108241516B (zh) | 2018-02-09 | 2018-02-09 | 嵌入式***程序加载方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108241516A CN108241516A (zh) | 2018-07-03 |
CN108241516B true CN108241516B (zh) | 2021-06-18 |
Family
ID=62698763
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810136826.9A Active CN108241516B (zh) | 2018-02-09 | 2018-02-09 | 嵌入式***程序加载方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108241516B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109324838B (zh) * | 2018-08-31 | 2022-05-10 | 深圳市元征科技股份有限公司 | 单片机程序的执行方法、执行装置及终端 |
CN111382429B (zh) * | 2018-12-27 | 2022-12-27 | 华为技术有限公司 | 指令的执行方法、装置及存储介质 |
CN114721735B (zh) * | 2022-03-04 | 2023-05-23 | 珠海海奇半导体有限公司 | 一种程序动态加载方法、装置及电子设备 |
CN117076010B (zh) * | 2023-09-15 | 2024-01-19 | 腾讯科技(深圳)有限公司 | 程序模块处理方法、装置、设备及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135894A (zh) * | 2010-10-13 | 2011-07-27 | 华为技术有限公司 | 一种多核在线补丁方法和装置 |
CN103377131A (zh) * | 2012-04-13 | 2013-10-30 | 索尼公司 | 数据处理装置和方法 |
CN103927187A (zh) * | 2014-05-09 | 2014-07-16 | 成都凯智科技有限公司 | 嵌入式***程序执行方法 |
CN105426223A (zh) * | 2015-12-25 | 2016-03-23 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DK157954C (da) * | 1978-01-23 | 1990-08-13 | Data General Corp | Databehandlingsanlaeg med direkte lageradgang |
JPH02214994A (ja) * | 1989-02-15 | 1990-08-27 | Hitachi Maxell Ltd | Icカード |
CN100365575C (zh) * | 2006-03-18 | 2008-01-30 | 华为技术有限公司 | 一种实现网络处理器动态加载微码的方法及网络设备 |
CN103309684A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 动态加载应用的方法及装置 |
US9792221B2 (en) * | 2013-11-22 | 2017-10-17 | Swarm64 As | System and method for improving performance of read/write operations from a persistent memory device |
CN106528196B (zh) * | 2016-09-23 | 2019-11-26 | 邵阳学院 | 智能设备的app加载方法及应用该方法的智能设备、*** |
-
2018
- 2018-02-09 CN CN201810136826.9A patent/CN108241516B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135894A (zh) * | 2010-10-13 | 2011-07-27 | 华为技术有限公司 | 一种多核在线补丁方法和装置 |
CN103377131A (zh) * | 2012-04-13 | 2013-10-30 | 索尼公司 | 数据处理装置和方法 |
CN103927187A (zh) * | 2014-05-09 | 2014-07-16 | 成都凯智科技有限公司 | 嵌入式***程序执行方法 |
CN103927187B (zh) * | 2014-05-09 | 2017-03-22 | 金祺创(北京)技术有限公司 | 嵌入式***程序执行方法 |
CN105426223A (zh) * | 2015-12-25 | 2016-03-23 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
CN105718287A (zh) * | 2016-01-20 | 2016-06-29 | 中南大学 | 一种智能终端的程序流式执行方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108241516A (zh) | 2018-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108241516B (zh) | 嵌入式***程序加载方法、装置、计算机设备和存储介质 | |
CN110647320A (zh) | 项目框架的构建方法、装置、计算机设备和存储介质 | |
CN111752571A (zh) | 程序升级方法、装置、设备及存储介质 | |
WO2018040270A1 (zh) | 在Windows***中加载Linux***ELF文件的方法及装置 | |
CN109542719B (zh) | 线程状态监控方法、装置、计算机设备和存储介质 | |
CN107122216B (zh) | 一种嵌入式实时操作***动态加载方法 | |
CN111459541B (zh) | 应用程序的打包方法、装置、计算机设备和存储介质 | |
CN108650507B (zh) | 终端设备的测试方法、装置、终端设备和存储介质 | |
CN112380130A (zh) | 基于调用依赖关系的应用测试方法和装置 | |
CN113504918A (zh) | 设备树配置优化方法、装置、计算机设备和存储介质 | |
CN111309379A (zh) | 项目生成方法、装置、计算机设备和存储介质 | |
CN115017058A (zh) | 一种内核模块的测试方法、装置、电子设备及存储介质 | |
CN109542962B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN110324410B (zh) | 发起网页请求的方法、装置、计算机设备和存储介质 | |
CN109298891B (zh) | ***启动方法和装置、***编译方法和装置 | |
CN111045707A (zh) | 小程序的更新方法、装置、计算机设备和存储介质 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
CN111949262A (zh) | 前端项目的构建方法、装置、计算机设备和存储介质 | |
CN109902257B (zh) | 资源访问方法、装置、计算机设备和存储介质 | |
CN115292201A (zh) | 函数调用栈解析和回溯方法与装置 | |
CN116560621A (zh) | 基板管理控制器芯片适配方法、***、设备和介质 | |
US20060265687A1 (en) | Method for Finding a Function Call Stack in Run Time for a Computer System | |
CN112416785A (zh) | 切词工具版本差异测试方法、装置、设备和存储介质 | |
CN112214213A (zh) | Linux内核的开发和管理方法、装置、计算机设备和存储介质 | |
CN111125809A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |