程序编译和启动方法、设备及存储介质与流程

文档序号:30987233发布日期:2022-08-03 01:43阅读:96来源:国知局
程序编译和启动方法、设备及存储介质与流程

1.本技术涉及物联网技术领域,尤其涉及一种程序编译和启动方法、设备及存储介质。


背景技术:

2.随着物联网技术的不断发展,物联网(internet of things,iot)设备上的功能越来越多,使得物联网应用系统变得越来越复杂,依赖的组件越来越丰富,导致物联网软件包也越来越大,进而导致物联网软件包编译时间长。


技术实现要素:

3.本技术的多个方面提供一种程序编译和启动方法、设备及存储介质,用以提高程序编译效率。
4.本技术实施例提供一种程序编译方法,包括:
5.获取待编译程序的配置文件;
6.从所述待编译程序的配置文件中,获取所述待编译程序的编译模式信息;
7.在所述待编译程序的编译模式信息为分离模式的情况下,对所述待编译程序进行编译;
8.在所述待编译程序编译过程中,将所述待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,以得到所述待编译程序的镜像文件;其中,所述分离组件具有独立的镜像文件。
9.本技术实施例还提供一种程序启动方法,包括:
10.获取待启动程序的镜像文件至内存中;
11.对所述待启动程序的镜像文件进行解析,以得到所述待启动程序的镜像文件包含的信息段;所述信息段包括动态信息段;
12.从所述动态信息段中,确定所述待启动程序依赖的分离组件;
13.获取所述分离组件的镜像文件至所述内存中;
14.根据所述待启动程序的镜像文件和所述分离组件的镜像文件,启动所述待启动程序。
15.本技术实施例还提供一种计算设备,包括:存储器和处理器;其中,所述存储器,用于存储计算机程序;
16.所述处理器耦合至所述存储器,用于执行所述计算机程序以用于执行上述程序编译方法和/或程序启动方法中的步骤。
17.本技术实施例还提供一种存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行上述程序编译方法和/或程序启动方法中的步骤。
18.在本技术实施例中,针对分离模式的待编译程序,在待编译程序编译过程中,可将
待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,进而得到待编译程序的镜像文件。待编译程序依赖的分离组件具有独立的镜像文件。这样,可实现待编译程序和其依赖的分离组件的单独编译,得到独立的镜像文件,实现待编译程序与其依赖的分离组件的分离。尤其在对待编译程序进行编译时,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,而无需在待编译程序的编译过程中对分离组件进行编译,可降低待编译程序的编译的数据量,有助于提高待编译程序的编译效率。在后续待编译程序升级时,可对待编译程序、待编译程序依赖的组件进行单独升级,而无需升级整个文件包,可实现更细颗粒度的升级。例如,若需要升级的对象为待编译程序依赖的分离组件,可单独升级分离组件;若需要升级的对象为待编译程序的其它模块,可单独升级其它模块,而无需升级分离组件,从而实现更细颗粒度的升级。
附图说明
19.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
20.图1为本技术实施例提供的嵌入式操作系统的结构框架图;
21.图2为本技术实施例提供的程序编译方法的流程示意图;
22.图3为本技术实施例提供的应用程序与组件之间的依赖关系示意图;
23.图4为本技术实施例提供的程序启动方法的流程示意图;
24.图5为本技术实施例提供的动态引擎的功能示意图;
25.图6为本技术实施例提供的计算设备的结构示意图。
具体实施方式
26.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
27.嵌入式操作系统是面向嵌入式系统特定的硬件体系和用户要求而设计的,是嵌入式系统的重要组成部分,是实现嵌入式系统功能的关键。如图1所示,嵌入式操作系统可分为内核、组件和应用层等。其中,内核用于负责管理嵌入式系统的进程、内存、设备驱动程序、文件和网络系统等,可为应用程序(app)提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个应用程序对某部分硬件操作的时间和时长。
28.组件是指为应用程序提供的实现各种功能的基础框架。应用程序可以选择需要的组件,实现应用程序的功能。在本实施例中,嵌入式操作系统提供的组件包括但不局限于:存储组件、音频组件、网络组件、通信组件、ota升级组件等等。可选地,应用程序可通过yaml配置进行配置,选择需要的组件。
29.随着物联网技术的不断发展,iot设备上的功能越来越多,使得物联网应用系统变得越来越复杂,依赖的组件越来越丰富,导致物联网软件包也越来越大,进而导致物联网软件包编译时间长,而且程序烧录时间也会增加,影响程序开发效率。另一方面,对于iot设备进行ota升级,需要的流量较大,升级时间也会增加,影响ota升级效率。
30.针对上述技术问题,本技术实施例提供一种解决方案,基本思路是:针对分离模式的待编译程序,在待编译程序的编译过程中,可将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,进而得到待编译程序的镜像文件。待编译程序依赖的分离组件具有独立的镜像文件。这样,可实现待编译程序和其依赖的分离组件的单独编译,得到独立的镜像文件,实现待编译程序与其依赖的分离组件的分离。尤其在对待编译程序进行编译时,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,而无需在待编译程序的编译过程中对分离组件进行编译,可降低待编译程序的编译的数据量,有助于提高待编译程序的编译效率。在后续待编译程序升级时,可对待编译程序、待编译程序依赖的组件进行单独升级,而无需升级整个文件包,可实现更细颗粒度的升级。例如,若需要升级的对象为待编译程序依赖的分离组件,可单独升级分离组件;若需要升级的对象为待编译程序的其它模块,可单独升级其它模块,而无需升级分离组件,从而实现更细颗粒度的升级。
31.以下结合附图,详细说明本技术各实施例提供的技术方案。
32.应注意到:相同的标号在下面的附图以及实施例中表示同一物体,因此,一旦某一物体在一个附图或实施例中被定义,则在随后的附图和实施例中不需要对其进行进一步讨论。
33.图2为本技术实施例提供的程序编译方法的流程示意图。如图2所示,该程序编译方法主要包括:
34.201、获取待编译程序的配置文件。
35.202、从待编译程序的配置文件中,获取待编译程序的编译模式信息。
36.203、在待编译程序的编译模式信息为分离模式的情况下,对待编译程序进行编译。
37.204在待编译程序编译过程中,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,以得到待编译程序的镜像文件;其中,分离组件具有独立的镜像文件。
38.在本实施例中,待编译程序可为待编译的应用程序,也可为待编译的组件的程序。对于嵌入式操作系统来说,待编译程序可为嵌入式应用程序或嵌入式操作系统的组件。在本实施例中,对于待编译程序,可设置待编译程序的配置文件。该配置文件可为yaml文件。该配置文件用于存储待编译程序的配置信息。在本实施例中,可在配置文件中配置待编译程序的编译模式信息。
39.在本实施例中,待编译程序的编译模式信息主要用于反映待编译程序是分离模式,还是集成模式。其中,分离模式是指待编译程序可与其依赖的组件单独或分离编译,得到独立的镜像文件。集成模式是指待编译程序与其依赖的组件集成编译,得到集成的镜像文件。
40.在一些实施例中,待编译程序为待编译的应用程序。相应地,对于分离模式的应用程序,可在应用程序的配置文件中设置应用程序的编译模式信息为分离模式。例如,可在应用程序的配置文件中设置应用程序的编译模式信息为“separate app:1”,即将应用程序中增加编译模式信息项“separate app”,对于分离模式的应用程序可将该“separate app”设置为1,即将应用程序的编译模式信息设置为分离模式。
41.对于组件来说,可增加组件的编译模式信息。例如,可在组件的配置文件中增加类型(type)项,type用于表示组件的编译模式信息。例如,可将type设置为“动态(dynamic)”,
即架构组件的编译模式信息设置为分离模式。该组件即为分离组件。或者,可将type设置为“静态(static)”,即架构组件的编译模式信息设置为集成模式。该组件即为集成组件。
42.在本技术实施例中,如图3所示,对于分离模式的应用程序可依赖分离组件,也可依赖集成组件,即分离模式的应用程序可调用分离组件中的函数,也可调用集成组件中的函数。对于分离模式的组件,可依赖分离组件,也可依赖集成组件,即分离组件可调用其它分离组件和集成组件的函数。因此,在本实施例中,除了设置待编译程序的配置文件之外,还可设置待编译程序依赖的组件的配置文件。对于待编译程序依赖的组件的配置文件,可增加组件的编译模式信息,通过配置组件的编译模式信息指定组件是否为分离组件。关于组件的编译模式信息的设置方式,可参见上述相关内,在此不再赘述。
43.在对待编译程序的配置文件和待编译程序依赖的组件的配置文件之后,可基于待编译程序的配置文件和待编译程序依赖的组件的配置文件,对待编译程序进行编译。具体地,在步骤201中,可获取待编译程序的配置文件。待编译程序可为待编译的应用程序,也可为待编译的组件的程序。
44.进一步,在步骤202中,可从待编译程序的配置文件中,获取待编译程序的编译模式信息。该编译模式信息用于表明待编译程序是分离模式,还是集成模式。例如,对于上述应用程序,若应用程序的配置文件中“separate app”项为1,则确定应用程序为分离模式。又例如,对于组件,若组件的配置文件中“type”项为“dynamic”,则确定组件为分离模式等。
45.进一步,对于待编译程序的编译模式信息为分离模式的情况,在步骤203中,可对待编译程序进行单独编译。由于待编译程序依赖的组件可能为分离组件,也可能为集成组件。对于待编译程序依赖的组件存在分离组件的情况,在步骤204中,在待编译程序编译过程中,可将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,进而得到待编译程序的镜像文件。对于待编译程序依赖的分离组件具有独立的镜像文件。其中,镜像文件的动态信息段可为dt-needed段,可将待编译程序依赖的分离组件的标识(如名称等)写入该段。
46.其中,待编译程序依赖的分离组件的镜像文件可为在待编译程序编译过程中,对分离组件实时独立编译得到的,也可为对分离组件预先编译得到的镜像文件等。任一分离组件的镜像文件与待编译程序的镜像文件为独立的两个镜像文件。这样,可实现待编译程序和其依赖的分离组件的单独编译,得到独立的镜像文件,尤其在对待编译程序进行编译时,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,而无需在待编译程序的编译过程中对分离组件进行编译,可降低待编译程序的编译的数据量,有助于提高待编译程序的编译效率。在后续待编译程序升级时,可对待编译程序、待编译程序依赖的组件进行单独升级,而无需升级整个文件包,可实现更细颗粒度的升级。例如,若需要升级的对象为待编译程序依赖的分离组件,可单独升级分离组件;若需要升级的对象为待编译程序的其它模块,可单独升级其它模块,而无需升级分离组件,从而实现更细颗粒度的升级。
47.可选地,在待编译程序编译过程中,针对待编译程序依赖的目标组件,可从目标组件的配置文件中,获取目标组件的编译模式信息;若目标组件的编译模式信息为分离模式,确定目标组件为分离组件。
48.在待编译程序编译过程中,在编译到待编译程序依赖的目标组件时,可获取目标组件的配置文件;并从目标组件的配置文件中,获取目标组件的编译模式信息;若目标组件
的编译模式信息为分离模式,确定目标组件为分离组件。进一步,可对分离组件进行单独编译,以得到分离组件的镜像文件。进一步,在分离组件编译完成后,可对待编译程序继续编译直至待编译程序编译完成,得到待编译程序的镜像文件。
49.在本技术实施例中。待编译程序的镜像文件和分离组件的镜像文件为可重定位文件。相应地,步骤203可实现为:将待编译程序编译为汇编语言;进一步,可将汇编语言翻译为目标机器语言;并将目标机器语言包含的各段写入可重定位文件对应的段位置;之后,将目标机器语言包含的各段的名称、相对地址和大小写入可重定位文件的段表头,进而得到待编译程序的可重定位文件。
50.在另一些实施例中,待编译程序的镜像文件和分离组件的镜像文件为可执行文件。相应地,步骤203可实现为:将待编译程序编译为可重定位文件,其中,关于将待编译程序编译为可重定位文件的描述,可参见上述实施例的相关内容,在此不再赘述。进一步,可对可重定位文件进行链接,以得到可执行文件的信息段。进一步,可对可执行文件的信息段进行相对地址至绝对地址的重定位,得到待编译程序的可执行文件。其中,可执行文件的信息段包括但不局限于:代码段、数据段、debug段、symtab段等。其中,代码段用于存放存储可执行文件的指令;数据段存储经过初始化的全局和静态变量。symtab段存放函数和局部变量信息。debug段用于存放调试用符号表等等。数据段可包括bss段。bss段存储未初始化或初始化为0的全局变量和静态变量等。当然,可执行文件的信息段也可包括上述动态信息段等。
51.在本技术实施例中,对于可执行文件的各信息段来说,有些信息段是有效的,有些信息段是无效的信息段。其中,本技术实施例中,有效段是指对待编译程序的执行或启动有作用的信息段,相应地,无效段是指对待编译程序的执行或启动不起作用的信息段。例如,debug段存放的是调试用符号表,是在待编译程序调试阶段起作用的。因此,在本技术实施例中,在对待编译程序的各信息段进行相对地址至绝对地址的重定位时,可根据设定的无效段标识,识别可重定位文件中的无效段和有效段;之后,可根据无效段与有效段在可重定位文件中的相对地址分布情况,对有效段进行相对地址至绝对地址的重定位,以使有效段的绝对地址连续。即,可根据有效段在可重定位文件中的相对地址分布情况,为相对地址连续或相邻的有效段重定位到连续的绝对地址,并将无效段的相对地址定位到所有有效段的绝对地址之后,这样,在删除无效段时不会造成内存地址间隔。进一步,可删除可重定位文件中的无效段,得到待编译程序的可执行文件,有助于降低待编译程序的可执行文件的大小。这样,在后续对待编译程序进行烧录或启动时,可降低可执行文件的内存占用。
52.具体地,可在链接脚本中设置无效段的标识,如无效段的段名等。这样,链接脚本在对可重定位文件进行链接时,可根据设定的无效段标识,识别可重定位文件中的无效段和有效段。关于对可重定位文件中的无效段和有效段进行重定位的实施方式,可参见上述相关内容,在此不再赘述。
53.在实际开发过程中,为了提高开发效率,降低开发成本,在对待编译程序开发时可能会调用一些现成的依赖。由于依赖并非为待编译程序专门开发的,可能存在一些待编译程序并不需要的功能和模块,这就导致待编译程序中可能会存在一些实际并不会用到的函数或者对外有多个接口,并不是所有的接口都需要用到所有的模块和函数。
54.在将待编译程序编译为可重定位文件的过程,是以节(section)为编译单元进行
编译的。在本技术实施例中,为了降低待编译程序的可执行文件的大小,在将待编译程序编译时,可以函数和数据分别创建成独立的节(section)。具体地,可使用ffunction-sections和fdata-sections以函数和数据分别为编译单元,对待编译程序进行编译,以得到可重定位文件;进一步,在对可重定位文件进行链接时,可使用gc-section以函数和数据为链接单元对可重定位文件进行链接,以删除可重定位文件中的无用函数和无用数据,得到可执行文件的信息段。进一步,可将可执行文件的信息段进行相对地址至绝对地址的重定位,得到待编译程序的可执行文件。由于在对可重定位文件进行链接时,删除了可重定位文件中的无用函数和无用数据,因此,可降低可执行文件的大小,进而在后续烧录或待编译程序的可执行文件时,可降低可执行文件的内存占用。
55.上述待编译程序的编译过程,可为已安装或烧录至物联网(iot)设备的程序进行升级或更新的程序,也可为尚未安装或烧录过的程序。无论是待升级的程序,还是未安装或烧录过的程序,在得到待编译程序的镜像文件及待编译程序依赖的分离组件的镜像文件之后,可将待编译程序烧录至iot设备中,并在iot设备中进行启动或运行。相应地,本技术实施例还提供一种程序启动方法。
56.图4为本技术实施例提供的程序启动方法的流程示意图。如图4所示,该程序启动方法可包括:
57.401、获取待启动程序的镜像文件至内存中。
58.402、对待启动程序的镜像文件进行解析,以得到待启动程序的镜像文件包含的信息段。
59.403、从待启动程序的镜像文件包含的动态信息段中,确定待启动程序依赖的分离组件。
60.404、获取分离组件的镜像文件至内存中。
61.405、根据待启动程序的镜像文件和分离组件的镜像文件,启动待启动程序。
62.本技术实施例提供的程序启动方法可适应于物理网设备或其它计算设备。在本实施例中,待启动程序的镜像文件可为采用上述程序编译方法编译得到的镜像文件。待启动程序可为应用程序,也可为待启动程序依赖的组件的程序。在启动待启动程序时,在步骤401中,可获取待启动程序的镜像文件至内存中。该内存是指执行程序启动方法的设备的内存,如iot设备的内存。进一步,在步骤402中,可对待启动程序的镜像文件进行解析,以得到待启动程序的镜像文件包含的信息段。其中,关于镜像文件包含的信息段的描述,可参见上述可执行文件的信息段的相关内容,在此不再赘述。镜像文件包含的信息段包括动态信息段,动态信息段用于存放待启动程序依赖的分离组件的标识,如分离组件的名称等。进一步,根据待启动程序的镜像文件包含的信息段的段名,识别出待启动程序的镜像文件包含的动态信息段。如dt-needed段等。
63.可选地,在得到待启动程序的镜像文件包含的信息段之后,还可释放待启动程序的镜像文件占用的内存,进而减低程序启动过程中的内存占用。
64.进一步,在步骤403中,可从待启动程序的镜像文件包含的动态信息段中,确定待启动程序依赖的分离组件。具体地,可从待启动程序的镜像文件包含的动态信息段中,获取待启动程序依赖的分离组件的标识;并根据分离组件的标识,确定待启动程序依赖的分离组件。
65.进一步,在步骤404中,可获取分离组件的镜像文件至内存中;之后,在步骤405中,可根据待启动程序的镜像文件和分离组件的镜像文件,启动待启动程序。
66.在本实施例中,待启动程序的镜像文件和分离组件的镜像文件为独立的镜像文件,这样,在对待启动程序或分离组件进行升级时,可单独升级待启动程序或分离组件,而无需升级整个待启动程序的二进制包。因此,可降低ota升级过程中数据量的传输,有助于提高ota升级效率。
67.在一些实施例中,分离组件的镜像文件为可重定位文件。相应地,在根据待启动程序的镜像文件和分离组件的镜像文件,启动所述待启动程序时,可对分离组件的可重定位文件进行解析,以得到分离组件的可重定位文件包含的信息段;之后,可对分离组件的可重定位文件包含的信息段进行链接,以得到分离组件的可执行文件的信息段;对分离组件的可执行文件的信息段进行重定向,以得到分离组件的可执行文件;进一步,可根据待启动程序的镜像文件和分离组件的可执行文件,启动待启动程序。
68.当然,待启动程序的镜像文件也可为可重定位文件。相应地,在根据待启动程序的镜像文件和所述分离组件的可执行文件,启动待启动程序时,可对待启动程序的可重定位文件包含的信息段进行链接,以得到待启动程序的可执行文件的信息段;之后,对待启动程序的可执行文件的信息段进行重定向,以得到待启动程序的可执行文件;之后,可根据待启动程序的可执行文件和分离组件的可执行文件,启动待启动程序。具体地,可执行待启动程序的可执行文件和分离组件的可执行文件,从而启动待启动程序。
69.关于可执行文件和可重定位文件的信息段的描述,可参见上述实施例的相关内容,在此不再赘述。在本技术实施例中,对于可执行文件的各信息段来说,有些信息段是有效的,有些信息段是无效的信息段。关于有效信息段和无效信息段的描述,可参见上述实施例的相关内容,在此不再赘述。在本技术实施例中,在对待启动程序的各信息段进行相对地址至绝对地址的重定位时,可根据设定的无效段标识,识别可重定位文件中的无效段和有效段;之后,可根据无效段与有效段在所述可重定位文件中的相对地址分布情况,对有效段进行相对地址至绝对地址的重定位,以使有效段的绝对地址连续;进一步,可删除可重定位文件中的无效段,得到待启动程序的可执行文件,有助于降低待启动程序的可执行文件的大小。这样,可降低可执行文件的内存占用。
70.在实际开发过程中,为了提高开发效率,降低开发成本,在对待启动程序开发时可能会调用一些现成的依赖。由于依赖并非为待启动程序专门开发的,可能存在一些待编译程序并不需要的功能和模块,这就导致待启动程序中可能会存在一些实际并不会用到的函数或者对外有多个接口,并不是所有的接口都需要用到所有的模块和函数。相应地,在将待编译程序编译为可重定位文件的过程,可使用ffunction-sections和fdata-sections以函数和数据分别为编译单元,对待启动程序进行编译,以得到待启动程序的可重定位文件。相应地,在本实施例中,在对待启动程序的可重定位文件进行链接时,可使用gc-section以函数和数据为链接单元对可重定位文件进行链接,以删除可重定位文件中的无用函数和无用数据,得到可执行文件的信息段。进一步,可将可执行文件的信息段进行相对地址至绝对地址的重定位,得到待编译程序的可执行文件。由于在对可重定位文件进行链接时,删除了可重定位文件中的无用函数和无用数据,因此,可降低可执行文件的大小,进而可降低可执行文件的内存占用。
71.当然,在一些实施例中,待启动程序的镜像文件和其依赖的分离组件的镜像文件也可为可执行文件。在这种情况下,步骤405可实现为:执行待启动程序和待启动程序依赖的分离组件的可执行文件,从而启动待启动程序。
72.值得说明的是,上述待启动程序的启动过程中可由嵌入式操作系统的命令行编译系统完成。对于命令行编译系统可包括动态引擎(dm-engine)。如图5所示,可由该动态引擎完成待启动程序(如分离模式的应用程序)的加载、解析、重定向和执行;以及,分离组件的加载、解析、重定向以及函数符号查找等。
73.需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤401和402的执行主体可以为设备a;又比如,步骤401的执行主体可以为设备a,步骤402的执行主体可以为设备b;等等。
74.另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如401、402等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。
75.相应地,本技术实施例还提供一种存储有计算机指令的计算机可读存储介质,当计算机指令被一个或多个处理器执行时,致使一个或多个处理器执行上述程序编译和/或程序启动方法中的步骤。
76.图6为本技术实施例提供的计算设备的结构示意图。如图6所示,该计算设备可包括:存储器60a和处理器60b。其中,存储器60a,用于存储计算机程序。
77.处理器60b耦合至存储器60a,用于执行计算机程序以用于:获取待编译程序的配置文件;从待编译程序的配置文件中,获取待编译程序的编译模式信息;在待编译程序的编译模式信息为分离模式的情况下,对待编译程序进行编译;在待编译程序编译过程中,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,以得到待编译程序的镜像文件;其中,分离组件具有独立的镜像文件。
78.可选地,待编译程序为嵌入式应用程序或嵌入式操作系统的组件。
79.可选地,处理器60b还用于:在待编译程序编译过程中,针对待编译程序依赖的目标组件,从目标组件的配置文件中,获取目标组件的编译模式信息;若目标组件的编译模式信息为分离模式,确定目标组件为分离组件。
80.可选地,处理器60b还用于:在编译到分离组件时,对分离组件进行编译,以得到分离组件的镜像文件。
81.在本技术实施例中,待编译程序的镜像文件为可重定位文件或可执行文件。可选地,处理器60b在对待编译程序进行编译时,具体用于:将待编译程序编译为可重定位文件;或者,将待编译程序编译为可重定位文件;对可重定位文件进行链接,以得到可执行文件的信息段;对可执行文件的信息段进行相对地址至绝对地址的重定位,以得到待编译程序的可执行文件。
82.进一步,处理器60b在对待编译程序的各信息段进行相对地址至绝对地址的重定位时,具体用于:根据设定的无效段标识,识别可重定位文件中的无效段和有效段;根据无效段与有效段在可重定位文件中的相对地址分布情况,对有效段进行相对地址至绝对地址
的重定位,以使有效段的绝对地址连续;删除可重定位文件中的无效段。
83.可选地,处理器60b在将待编译程序编译为可重定位文件时,具体用于:使用ffunction-sections和fdata-sections以函数和数据分别为编译单元,对待编译程序进行编译,以得到可重定位文件。相应地,处理器60b在对可重定位文件进行链接时,具体用于:使用gc-section以函数和数据为链接单元对可重定位文件进行链接,以删除可重定位文件中的无用函数和无用数据,得到可执行文件的信息段。
84.上述对待编译程序进行编译的计算设备,可实现为任何具有计算功能的设备。如计算设备可单一的服务器,也可以云化的服务器阵列,或者为云化的服务器阵列中运行的虚拟机(virtual machine,vm)。另外,计算设备也可以指具备相应服务能力的其他计算设备,例如电脑等终端设备(运行服务程序)等。
85.本实施例提供的计算设备,可在待编译程序编译过程中,可将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,进而得到待编译程序的镜像文件。这样,可实现待编译程序和其依赖的分离组件的单独编译,得到独立的镜像文件,尤其在对待编译程序进行编译时,将待编译程序依赖的分离组件的标识写入镜像文件的动态信息段,而无需在待编译程序的编译过程中对分离组件进行编译,可降低待编译程序的编译的数据量,有助于提高待编译程序的编译效率。在后续待编译程序升级时,可对待编译程序、待编译程序依赖的组件进行单独升级,而无需升级整个文件包,可实现更细颗粒度的升级。例如,若需要升级的对象为待编译程序依赖的分离组件,可单独升级分离组件;若需要升级的对象为待编译程序的其它模块,可单独升级其它模块,而无需升级分离组件,从而实现更细颗粒度的升级。
86.在本技术一些实施例中,处理器60b还用于:获取待启动程序的镜像文件至计算设备的内存60a1中;对待启动程序的镜像文件进行解析,以得到待启动程序的镜像文件包含的信息段;信息段包括动态信息段;从动态信息段中,确定待启动程序依赖的分离组件;获取分离组件的镜像文件至内存60a1中;之后,可根据待启动程序的镜像文件和分离组件的镜像文件,启动待启动程序。
87.在一些实施例中,分离组件的镜像文件为可重定位文件,处理器60b在启动待启动程序时,具体用于:对分离组件的可重定位文件进行解析,以得到分离组件的可重定位文件包含的信息段;对分离组件的可重定位文件包含的信息段进行链接,以得到分离组件的可执行文件的信息段;对分离组件的可执行文件的信息段进行重定向,以得到分离组件的可执行文件;以及,根据待启动程序的镜像文件和分离组件的可执行文件,启动待启动程序。
88.可选地,待启动程序的镜像文件为可重定位文件。相应地,处理器60b在启动待启动程序,还用于:对待启动程序的可重定位文件包含的信息段进行链接,以得到待启动程序的可执行文件的信息段;对待启动程序的可执行文件的信息段进行重定向,以得到待启动程序的可执行文件;根据待启动程序的可执行文件和分离组件的可执行文件,启动待启动程序。
89.在一些实施例中,待启动程序的可重定位文件是使用ffunction-section和fdata-sections对待启动程序进行编译得到的。相应地,处理器60b在对待启动程序的可重定位文件包含的信息段进行链接时,具体用于:使用gc-section以函数和数据为链接单元对可重定位文件进行链接,以删除可重定位文件中的无用函数和无用数据,以得到可执行
文件的信息段。
90.在一些实施例中,处理器60b在对待启动程序的可执行文件的信息段进行重定向时,具体用于:根据设定的无效段标识,识别可重定位文件中的无效段和有效段;根据无效段与有效段在可重定位文件中的相对地址分布情况,对有效段进行相对地址至绝对地址的重定位,以使有效段的绝对地址连续;删除可重定位文件中的无效段。
91.上述对待启动程序进行启动的设备可为任何计算设备,如安装有嵌入式操作系统的设备。例如,对待启动程序进行启动的计算设备,可为物联网设备、电脑、手机等终端设备等。
92.在一些可选实施方式中,如图6所示,该计算设备还可以包括:通信组件60c、电源组件60d、显示组件60e及音频组件60f等可选组件。图6中仅示意性给出部分组件,并不意味着计算设备必须包含图6所示全部组件,也不意味着计算设备只能包括图6所示组件。
93.在本技术实施例中,存储器用于存储计算机程序,并可被配置为存储其它各种数据以支持在其所在设备上的操作。其中,处理器可执行存储器中存储的计算机程序,以实现相应控制逻辑。存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
94.在本技术实施例中,处理器可以为任意可执行上述方法逻辑的硬件处理设备。可选地,处理器可以为中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或微控制单元(microcontroller unit,mcu);也可以为现场可编程门阵列(field-programmable gate array,fpga)、可编程阵列逻辑器件(programmable array logic,pal)、通用阵列逻辑器件(general array logic,gal)、复杂可编程逻辑器件(complex programmable logic device,cpld)等可编程器件;或者为先进精简指令集(risc)处理器(advanced risc machines,arm)或系统芯片(system on chip,soc)等等,但不限于此。
95.在本技术实施例中,通信组件被配置为便于其所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如wifi,2g或3g,4g,5g或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还可基于近场通信(nfc)技术、射频识别(rfid)技术、红外数据协会(irda)技术、超宽带(uwb)技术、蓝牙(bt)技术或其他技术来实现。
96.在本技术实施例中,显示组件可以包括液晶显示器(lcd)和触摸面板(tp)。如果显示组件包括触摸面板,显示组件可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
97.在本技术实施例中,电源组件被配置为其所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
98.在本技术实施例中,音频组件可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(mic),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。例如,对于具有语言交互功能的设备,可通过音频组件实现与用户的语音交互等。
99.需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
100.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
101.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
102.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
103.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
104.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
105.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
106.计算机的存储介质为可读存储介质,也可称为可读介质。可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体
(transitory media),如调制的数据信号和载波。
107.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
108.以上所述仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1