一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种嵌入式软件包编译构建方法、装置、设备及介质与流程

2023-10-26 09:34:04 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及一种嵌入式软件包编译构建方法、装置、设备和介质。


背景技术:

2.随着科学技术的发展,人们对嵌入式设备需求也不断提高,需要生成用于嵌入式设备升级的软件包。在生成可用于嵌入式设备升级的软件包时,因不同的嵌入式设备之间存在较大的差异,传统的方式通常是针对每个嵌入式设备自身的嵌入要求,分别来生成各嵌入式设备升级用的软件包。
3.但是,因嵌入式软件开发过程中过于繁锁、庞杂的软件包依赖关系,导致这种生成软件包的方式,存在嵌入式软件包的配置、编译构建耗时久的问题。


技术实现要素:

4.本发明提供了一种嵌入式软件包编译构建安装方法,以实现在提高嵌入式软件编译构建效率的同时,可以快速方便地增加对新的嵌入式设备的编译构建的支持,达到提高软件开发效率、节约研发成本的技术效果。
5.根据本发明的一方面,提供了一种嵌入式软件包编译构建方法,该方法包括:
6.加载编译配置信息;其中,所述编译配置信息包括与目标嵌入式设备相关的编译器配置、所述目标嵌入式设备的设备配置信息以及软件包注册脚本;所述软件包注册脚本中包括至少一个待编译软件包和软件配置信息;
7.基于所述设备配置信息、所述软件配置信息以及当前工作路径,从所述待编译软件包中确定目标编译软件包,并为每个所述目标编译软件包分配编译序号;
8.基于所述编译序号依次对每个所述目标编译软件包进行配置编译,得到每个所述目标编译软件包的编译结果;
9.汇总每个所述编译结果和所述设备配置信息,生成所述目标嵌入式设备的固件包。
10.根据本发明的另一方面,提供了一种嵌入式软件包编译构建装置,该装置包括:
11.加载模块,用于加载编译配置信息;其中,所述编译配置信息包括与目标嵌入式设备相关的编译器配置、所述目标嵌入式设备的设备配置信息以及软件包注册脚本;所述软件包注册脚本中包括至少一个待编译软件包和软件配置信息;
12.序号分配模块,用于基于所述设备配置信息、所述软件配置信息以及当前工作路径,从所述待编译软件包中确定目标编译软件包,并为每个所述目标编译软件包分配编译序号;
13.编译构建模块,用于基于所述编译序号依次对每个所述目标编译软件包进行配置编译,得到每个所述目标编译软件包的编译结果;
14.固件包生成模块,用于汇总每个所述编译结果和所述设备配置信息,生成所述目
标嵌入式设备的固件包。
15.根据本发明的另一方面,提供了一种电子设备,所述电子设备包括:
16.至少一个处理器;以及
17.与所述至少一个处理器通信连接的存储器;其中,
18.所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的嵌入式软件包编译构建方法。
19.根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的嵌入式软件包编译构建方法。
20.本发明实施例的技术方案,通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本;基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中确定目标编译软件包,并为每个目标编译软件包分配编译序号;基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果;汇总每个编译结果和设备配置信息,生成目标嵌入式设备的固件包,解决了现有技术中因嵌入式软件开发过程中因过于繁锁、庞杂的软件包依赖关系,导致嵌入式软件包的配置、编译构建耗时久、效率低的问题,实现了通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及一个通用的软件包注册脚本,之后基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中选取满足要求的目标编译软件包,并为每个目标编译软件包自动分配编译序号,使得基于编译序号依次对每个目标编译软件包进行配置编译,最终汇总每个目标编译软件包的编译结果和设备配置信息,生成用于升级嵌入式设备的固件包,不仅提高嵌入式软件编译构建效率,还可以快速方便地增加对新的嵌入式设备的编译构建的支持,达到提高软件开发效率、节约研发成本的效果。
21.应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
22.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1是根据本发明实施例一提供的一种嵌入式软件包编译构建方法的流程图;
24.图2是根据本发明实施例一提供的嵌入式软件包编译构建方法示意图;
25.图3是根据本发明实施例一提供的嵌入式软件包编译构建方法示意图;
26.图4是根据本发明实施例二提供的一种嵌入式软件包编译构建方法的流程图;
27.图5是根据本发明实施例三提供的一种嵌入式软件包编译构建装置的结构示意图;
28.图6是实现本发明实施例的嵌入式软件包编译构建方法的电子设备的结构示意
图。
具体实施方式
29.为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
30.需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
31.实施例一
32.图1是根据本发明实施例一提供的一种嵌入式软件包编译构建方法的流程图,本实施例可适用于编译构建嵌入式软件的情况,该方法可以由嵌入式软件包编译构建装置来执行,该嵌入式软件包编译构建装置可以采用硬件和/或软件的形式实现,该嵌入式软件包编译构建装置可配置于计算设备中。如图1所示,该方法包括:
33.s110、加载编译配置信息;其中,编译配置信息包括与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本。
34.其中,软件包注册脚本可以为所有不同的嵌入式设备所共享的、用于编译构建软件包的可执行文件。待编译软件包可以为嵌入式软件包。软件配置信息中包含软件的相关信息,例如,数据量大小、软件包路径、运行环境和编译工具等信息。
35.在实际应用中,为了使得能够满足支持为多种不同的嵌入式设备编译构建软件的需求,可以基于嵌入式设备的相关信息和各个不同的嵌入式设备的差异信息预先建立与嵌入式设备平台相关的配置环境,以配置目标嵌入式设备的设备配置信息。例如,甲型号设备提供了2个用于rs485通信的硬件接口,乙型号设备提供了4个用于rs485通信的硬件接口,那么可以在设备平台相关的配置中提供一个rs485通信接口个数的变量,假设变量名称为config_rs485_num,针对设备在该变量下的配置信息为:config_rs485_num=4。可以将设备平台相关的环境配置文件存放在单独的目录中,为该目录建立一个软链接,以通过软链接指定目标的嵌入式设备,加载嵌入式设备的相关配置信息,以为选择好的目标嵌入式设备嵌入软件包。此种方式不仅简化了目标嵌入式设备的选择,还方便地保存了各个嵌入式设备的编译构建结果。
36.在实际应用中,不同的嵌入式设备通常使用不同的交叉编译工具链,且不能互用;不同的嵌入式设备也有可能使用相同的交叉编译工具链。正因如此,交叉编译工具链的配置应该独立于特定的嵌入式设备的配置,因为某些情况下(例如,两款不同型号的嵌入式设备使用了相同型号的cpu)交叉编译工具链配置可以在不同的嵌入式设备间共享。例如,芯
片a提供的工具链,可能还可以用于微芯片b的软件编译,可以理解的是:芯片型号相同,交叉编译器可以用一个;芯片型号不同,但芯片架构相同,也可以用同一个交叉编译器。为简化对不同嵌入式设备的支持,可以将交叉编译工具链的配置抽象浓缩为单独的配置环境,包含编译器配置信息。所有软件包在编译构建时,通过加载交叉编译工具的配置信息,共用同一个文件定义的配置环境,使得使用最少的配置,实现对不同交叉编译器的支持。
37.具体的,可以通过指令(如source)加载预先配置好的与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本等编译配置信息。
38.示例性的,参见图2,,在编译构建时,通过source指令加载指定的目录的三个文件:
39.source "target/toolchain.sh"
40.source "target/platform.sh"
41.source "target/sources.sh"
42.fetch_build_range || exit 3
43.其中,toolchain.sh文件用于提供交叉编译工具链的配置信息(即编译器配置)。platform.sh文件用于提供嵌入式设备硬件相关的配置信息(即设备配置信息),其提供了一些硬件信息,例如:该设备有几个modbus串口、有多少个通用的输入输出口功能、分各个输入输出口对应的gpio编号是多少、该设备有没有wifi功能、是否需要禁用某个软件包等。sources.sh文件用于加载工程通用的软件包的注册脚本(即软件包注册脚本)。对于一个目标嵌入式设备,要编译的软件包可以分组,并保存到固件的工程目录下,然后使用source指令进行加载,这样在增加新的设备时,只需要编写很少的代码,从而快速实现对新的设备进行支持。
44.s120、基于设备配置信息、软件配置信息和当前工作路径,从待编译软件包中确定目标编译软件包,并为每个目标编译软件包分配编译序号。
45.其中,编译序号可以反映出对软件包的编译顺序,例如,序号小的软件包先编译,序号大的软件包后编译。
46.在实际应用中,可以根据设备配置信息、软件配置信息和当前工作路径,选取出满足要求的待编译软件包作为目标编译软件包。例如,某个嵌入式设备的编译构建过程可能会禁用某些软件包,可以通过设备配置信息从待编译软件包中筛选需禁用的软件包,将这些禁用的软件包剔除,剩余的软件包作为目标编译软件包;或者,通过当前工作路径判断是否要对所有的待编译软件包进行编译,若是则将所有的待编译软件包均作为目标编译软件包。在确定目标编译软件包之后,可以为每个目标编译软件包分配编译序号,以通过编译序号依次序的编译构建各目标编译软件包。
47.s130、基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果。
48.在本实施例中,可以根据编译序号依次对每个目标编译软件包进行编译,例如,先对编译软件包1进行编译,编译完成后,再对下一个编译软件包2进行编译,编译完成后,再对下一个编译软件包3进行编译,依次序号顺序执行编译,直至达到最后一个序号的编译软件包结束。相应的,得到对每个目标编译软件包的编译结果。
49.为了提高编译构建效率,避免重复编译构建,在编译构建软件包的过程中,可以判
断该软件包是否已经被配置,是否已经被编译构建。可选的,基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果,包括:对于每个目标编译软件包,确定目标编译软件包的目标软件路径;若在目标软件路径下未存在配置标志文件,则确定配置检测结果为未配置,在未配置的条件下,从软件配置信息中调用与目标软件路径相关联的配置函数;基于配置函数进行目标编译软件包的配置,并在配置完成时,对目标编译软件包进行编译,得到目标编译软件包的编译结果。
50.其中,配置函数可以为预先配置的、用于在编译构建之前执行必要的配置操作,如用fconf参数进行表示。目标软件路径可以表征软件包的路径。需要说明的是,对于每个目标编译软件包在编译构建时的检验方式均相应,以其中任一目标编译软件包为例进行介绍。
51.在本实施例中,在编译构建目标编译软件包时,首先,可以检测在该目标编译软件包下的目标软件路径下是否存在配置标志文件,如果存在,则说明该软件包已被配置(即配置检测结果为已配置),例如,在软件包1的srcn路径下存在tag_config标志文件,则说明已经配置完成了,不需再重复配置。如果不存在,则说明该软件包未被配置(即配置检测结果为未配置)。在未配置的条件下,以目标软件路径为索引键值,调用与目标软件路径进行映射的配置函数。进一步的,通过配置函数执行对目标编译软件包进行配置的操作,以在配置完成时,对目标编译软件包进行编译,得到目标编译软件包的编译结果。
52.可选的,基于配置函数进行目标编译软件包的配置,并在配置完成时,对目标编译软件包进行编译,得到目标编译软件包的编译结果,包括:执行与配置函数相对应的配置任务,将目标编译软件包的配置信息配置在目标嵌入式设备中;在检测到配置完成时,确定在目标软件路径下是否存在编译标志文件,若是,则确定编译检测结果为未编译;在未编译的条件下,从软件配置信息中调用与目标软件路径相关联的编译构建函数;基于编译构建函数编译目标编译软件包,得到编译结果。
53.其中,编译构建函数用于软件包的编译、安装操作,如用autogen_build参数进行表示。
54.具体的,如果配置检测结果为未配置,则调用配置函数,执行该软件包配置函数对应的配置任务,将目标编译软件包的配置信息配置在目标嵌入式设备中。配置完成后,查找在该目标软件路径下是否存在编译标志文件,如果存在,则说明该软件包已被编译构建(即配置检测结果为已编译)。例如,在软件包1的srcn路径下存在tag_built标志文件,则说明已经编译完成了,不需再重复编译构建,可继续执行下一个序号的软件包的编译构建检测。如果不存在,则说明未被编译构建(即配置检测结果为未编译)。在未编译的条件下,从软件配置信息中调用与目标软件路径相关联的编译构建函数,执行该软件包编译构建函数的编译构建任务,完成后得到编译结果。
55.示例性的,可使用软件包工作路径srcn(即目标软件路径)对三个哈希表进行索引,即可得软件包的配置函数、编译构建函数、编译结果清除函数(可用于重复编译构建的中间生成文件的清除)。例如,哈希表包括ftconfig哈希表(包含了所有软件包的配置函数的表),使用这一软件包的工作路径srcn对ftconfig表进行映射,即可得到这一软件包的配置函数。之后调用配置函数进行配置操作;如果配置成功,可在该软件包的工作路径下创建配置标志文件tag_config,完成该软件包的配置。哈希表还包括ftbuild哈希表(包含了所
有的软件包的编译构建函数的表),其键值也为各个软件包的工作路径。使用srcn作为键值进行哈希索引,即可得到该软件包注册的编译构建函数,调用编译构建函数可完成该软件包编译构建,如果编译构建完成,可在该软件包的工作路径下创建编译标志文件tag_built。
56.在上述方案的基础上,在编译构建过程中不会执行的软件包编译结果清除函数。使用各个软件包的工作路径来从一个包含清除函数的哈希表中映射得到各软件包的清除函数。在编译结果清除之前,也会删除标志软件包已配置、编译安装的两个标志文件。在重复编译构建前,可以利用清除参数执行清除操作,清除所有软件包的编译结果。
57.为了使本领域技术人员进一步清楚本发明实施例的技术方案,给出具体的应用场景实例。示例性的,参见图3,为每个目标编译软件包分配编译序号之后,假设编译序号是从1(起始编译序号)到10(停止编译序号),从序号1的软件包开始编译构建,首先将序号1作为当前编译序号,当前编译序号未达到停止编译序号,检测当前编译序号的软件包是否已配置,若未配置,则调用该软件包路径映射的配置函数,配置完成后标志配置完成,如果配置函数执行返回失败,则不会标志配置完成。配置完成后,检测当前编译序号的软件包是否已编译安装,若未编译安装,则调用该软件包的编译构建函数,完成后标志编译安装完成。进一步的,在当前编译序号的基础上 1,将其重新作为当前编译序号,如序号2。返回判断当前编译序号是否达到停止编译序号,若否,则继续编译构建序号2的软件包。依编译序号进行各目标编译软件包的编译构建,在保证不同的软件包间的依赖关系的同时,使得各软件包在目标嵌入式设备中能够被正常使用。
58.s140、汇总每个编译结果和所述设备配置信息,生成目标嵌入式设备的固件包。
59.需要说明的是,不同型号的嵌入式设备使用的固件不同,固件包的制作也存在差异。为了处理这些差异,可增加虚拟软件包的编译构建,该虚拟软件包不编译软件代码,其配置数据为一个空函数,其路径映射的三个函数(一个用于固件包的生成,一个用于固件包的清理,一个设置为空函数)。在虚拟软件包路径下包含用于生成固件的脚本文件和二进制可执行文件,以及特定型号的嵌入式设备的专有文件等。
60.在本实施例中,可以使用虚拟软件包制作固件,根据为设备平台配置的环境变量的值(例如config_rs485_num)生成具体的设备配置信息,进而对设备配置信息以及各软件包的编译结果进行打包,生成目标嵌入设备的固件包。如,调用嵌入式目标设备的最后注册的固件包生成函数,对所有软件包的编译结果进行一个汇总,同时给汇总包中加入嵌入式设备型号及硬件相关的配置信息,生成固件包。
61.本实施例的技术方案,通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本;基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中确定目标编译软件包,并为每个目标编译软件包分配编译序号;基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果;汇总每个编译结果和设备配置信息,生成目标嵌入式设备的固件包,解决了现有技术中因嵌入式软件开发过程中因过于繁锁、庞杂的软件包依赖关系,导致嵌入式软件包的配置、编译构建耗时久、效率低的问题,实现了通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及一个通用的软件包注册脚本,之后基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中选取满足要求的目标编译软
件包,并为每个目标编译软件包自动分配编译序号,使得基于编译序号依次对每个目标编译软件包进行配置编译,最终汇总每个目标编译软件包的编译结果和设备配置信息,生成用于升级嵌入式设备的固件包,不仅提高嵌入式软件编译构建效率,还快速方便地增加对新的嵌入式设备的编译构建的支持,达到提高软件开发效率、节约研发成本的效果。
62.实施例二
63.图4是根据本发明实施例二提供的一种嵌入式软件包编译构建方法的流程图,在前述实施例的基础上,对s120作进一步的细化。其具体的实施方式可以参见本实施例技术方案。其中,与上述实施例相同或者相应的技术术语在此不再赘述。
64.如图4所示,该方法具体包括如下步骤:
65.s210、加载编译配置信息;其中,编译配置信息包括与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本。
66.s220、基于设备配置信息对待编译软件包进行筛选,确定待选择软件包。
67.在本实施例中,通过设备配置信息对待编译软件包进行筛选,筛选出支持在目标嵌入式设备上嵌入的软件包,作为待选择软件包。
68.具体来说,设备配置信息中包括配置软件信息和校验软件信息。基于设备配置信息对待编译软件包进行筛选,确定待选择软件包,包括:基于配置软件信息对待编译软件包进行核验,确定核验结果;若核验结果为未全部安装,则基于校验软件信息对待编译软件包进行筛选,确定与目标嵌入式设备相适配的待选择软件包。
69.其中,配置软件信息包括用于检核软件是否已被安装的信息、待安装的软件信息中的至少一项。校验软件信息包括用于检核软件是否被设备禁用的信息。
70.在本实施例中,通过配置软件信息核验脚本中的待编译软件包是否已经全部被安装在目标嵌入式设备中,如果是则结束此次编译构建任务。如果否,则确定核验结果为未全部安装,进而通过校验软件信息检测各待编译软件包中是否存在被目标嵌入式设备禁用的软件包,不被禁用的软件包是与目标嵌入式设备相适配的,可以将这些不被禁用的软件包作为待选择软件包。
71.示例性的,继续参见图2,可以通过配置软件信息判断待编译软件包是否全部编译完成,若否,则结束;若是,则可以将某一待编译软件包(如第一个)作为当前软件包,判断当前软件包是否被设备平台禁用。若当前软件包被设备平台禁用,则跳过该当前软件包,将当前软件包的下一软件包作为当前软件包;若否,则将当前软件包作为待选择软件包,并将当前软件包的下一软件包作为当前软件包。检测当前软件包是否为最后一个软件包,若不为最后一个软件包,则返回判断当前软件包是否被设备平台禁用步骤。若为最后一个软件包,则执行s230步骤。
72.s230、基于当前工作路径,从待选择软件包中确定目标编译软件包。
73.其中,当前工作路径可以包括两种,一种是某个软件包的注册路径,即软件包路径;另一种是整个软件工程所在的路径(即软件工程的工作路径,也即工程根目录,只有一个)。
74.在实际应用中,可以通过判断当前工作路径是哪种路径,确定是要对所有的待选择软件包进行编译,还是对某个软件包或依赖该软件包的其他软件包进行编译,将需要进行编译的软件包作为目标编译软件包。
75.可选的,基于当前工作路径,从待选择软件包中确定目标编译软件包,包括:若当前工作路径为软件工程的工作路径,则将每个待选择软件包均作为目标编译软件包。
76.具体的,如果检测到当前工作路径与软件工程的工作路径相一致,那么可以确认路径为整个软件工程所在的路径,此时需要将每个待选择软件包进行编译构建,将每个待选择软件包均作为目标编译软件包。编译构建顺序即为软件注册顺序,进而通过软件注册顺序确定每个目标编译软件包的编译序号。示例性的,当工作路径为工程的根目录,那么开始序号为1,序号1为第一个注册的软件包序号,停止序号为最后一个注册的软件包序号。
77.可选的,基于当前工作路径,从待选择软件包中确定目标编译软件包,包括:若当前工作路径为软件包路径,则从软件配置信息中确定编译参数;基于编译参数,从待选择软件包中确定目标编译软件包。
78.在实际应用中,如果检测到当前工作路径为软件包路径,那么可以确认路径为某个软件包的路径,认为需要将该软件包路径对应的软件包进行编译构建,可以将与软件包路径相对应的待选择软件包作为目标编译软件包。进一步的,可以根据编译参数确定是只对该软件包进行编译,还是对该软件包及依赖该软件包的其他软件包进行编译。
79.在本实施例中,基于编译参数,从待选择软件包中确定目标编译软件包,包括:若编译参数与预设关联参数相一致,则将与软件包路径相对应的待选择软件包作为起始编译软件包,并基于起始编译软件包以及与起始编译软件包相关联的关联编译软件包确定目标编译软件包;若编译参数与预设关联参数不一致,则将与软件包路径相对应的待选择软件包作为目标编译软件包。
80.需要说明的是,预设关联参数可以是指用于表示当一个软件包被修改后,需要编译所有依赖该软件包的其他软件包的参数,例如,可以用buildall命令行参数进行表示,该参数表示可一键编译构建注册在该软件包之后所有软件包。
81.在本实施例中,如果编译参数为预设关联参数,则将与软件包路径相对应的待选择软件包作为起始编译软件包,将注册在该起始编译软件包之后所有软件包均作为关联编译软件包。起始编译软件包和所有的关联编译软件包均为需要进行编译的目标编译软件包。如果编译参数不为预设关联参数,则表示只需编译软件包路径下的该待选择软件包,即只将此软件包为目标编译软件包,其编译序号可以为1。
82.示例性的,当工作路径为某个软件包的路径,当前软件包的序号即为开始序号1。当前编译构建的参数不为buildall时,停止序号为当前软件包的序号1,即只编译单个软件包;当编译构建的参数为buildall时,停止序号为当前软件包之后的最后一个注册的软件包的序号。
83.s240、基于软件配置信息中的软件注册顺序为每个目标编译软件包分配编译序号。
84.其中,软件配置信息中包括软件注册顺序和编译参数,软件注册顺序包含了不同的软件包间的依赖关系。编译参数用于表征编译构建软件包的形式,比如,是单独编译某个软件包,或者是编译该软件包编译以及所有依赖该软件包的其他软件包。
85.需要说明的是,软件注册顺序可以是基于待编译软件包间的依赖关系预先确定的。例如,在需要使能甲软件包时,甲软件包依赖了乙软件包,乙软件包则又依赖了丙软件包,在编译构建时的依赖推导的过程会占用一定的时间,从而存在延长嵌入式软件的整体
编译所需的构建时间的问题。为了解决这个问题,提高软件包嵌入效率,研发人员在编写软件包注册脚本时结合软件包的依赖关系确定各软件包的注册顺序,例如,软件包1依赖软件包2,需要先编译安装软件包2再编译安装软件包1,软件包1才能正常使用,相应的,可以先将软件包2注册至脚本,再将软件包1注册至该脚本。此方法实现在省略了软件包的依赖推导过程的同时,通过软件注册顺序决定各软件包的编译顺序,顺序编译构建各个软件包,保证了软件包之间的正确依赖关系,对于新增的依赖软件包,也易于添加、管理。此外,对于已编译完成的软件包,可标注为已编译完成,避免软件包不必要的重复编译。
86.需要说明的是,可以先确定出目标编译软件包,再依据软件注册顺序为每个目标编译软件包分配编译序号,也可以先依据软件注册顺序为每个待选择软件包分配编译序号,再从待选择软件包中确定目标编译软件包,进而更新目标编译软件包的编译序号,不做具体限定。
87.在本实施例中,在确定各个软件包的序号后,可以通过该序号对一个数组进行索引,再次得到软件包的工作路径。再次得到软件包的工作路径是为了切换到软件包的工作路径下进行配置、编译安装或清除等操作。如,$1为需要编译的软件包序号,通过对数组srclist进行索引,得到了srcn即为软件包的工作路径。srclist数组为register_source函数在注册软件包时创建的。之再使用软件包的工作路径srcn对三个哈希表进行索引,即可得软件包的配置函数、编译构建函数、编译结果清除函数。例如,ftconfig这一哈希表即为包含了所有软件包的配置函数的表,使用srcn这一软件包的工作路径对该表进行映射,即可得到这一软件包的配置函数,为fconf,之后就表调用fconf函数;如果配置成功,就会在该软件包的工作路径下创建标志文件tag_config。这样就完成了软件包的配置。不过,在此之前,首先判断了tag_config标志文件存不存在;如果存在,则说明已经配置完成了(输出"already configured: ${sbdir}, skipped"信息),不会再重复配置。ftconfig哈希表为register_source函数在注册各个软件包时创建的。同样的,所有的软件包的编译构建函数都存放在ftbuild哈希表中(该表由register_source函数创建),其键值也为各个软件包的工作路径。标红的最多的那一行,使用srcn(即一个软件包的工作路径)做为键值进行哈希索引,即可得到该软件包注册的编译构建函数,下一行调用该函数,即可完成这一软件包编译安装。
88.需要说明的是,在编译构建过程中不会执行的软件包编译结果清除函数(在不同的编译构建之间会应当执行),也是使用各个软件包的工作路径来从一个名为ftclean的哈希表中映射得到各软件包的清除函数。不过在此之前,也会删除标志软件包已配置、编译安装的两个标志文件。
89.s250、基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果。
90.s260、汇总每个编译结果和设备配置信息,生成目标嵌入式设备的固件包。
91.本实施例的技术方案,通过基于设备配置信息对待编译软件包进行筛选,选出与目标嵌入式设备相适配的待选择软件包,进而通过软件注册顺序、编译参数以及当前工作路径,从待选择软件包中确定目标编译软件包,确定每个目标编译软件包的编译序号,在提高安装效率的同时,保证不同软件包间的依赖关系,保证软件包被成功安装以及被正常使用。
92.实施例三
93.图5是根据本发明实施例三提供的一种嵌入式软件包编译构建装置的结构示意图。如图5所示,该装置包括:加载模块310、序号分配模块320、编译构建模块330和固件包生成模块340。
94.其中,加载模块310,用于加载编译配置信息;其中,所述编译配置信息包括与目标嵌入式设备相关的编译器配置、所述目标嵌入式设备的设备配置信息以及软件包注册脚本;所述软件包注册脚本中包括至少一个待编译软件包和软件配置信息;序号分配模块320,用于基于所述设备配置信息、所述软件配置信息以及当前工作路径,从所述待编译软件包中确定目标编译软件包,并为每个所述目标编译软件包分配编译序号;编译构建模块330,用于基于所述编译序号依次对每个所述目标编译软件包进行配置编译,得到每个所述目标编译软件包的编译结果;固件包生成模块340,用于汇总每个所述编译结果和所述设备配置信息,生成所述目标嵌入式设备的固件包。
95.本实施例的技术方案,通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及软件包注册脚本;基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中确定目标编译软件包,并为每个目标编译软件包分配编译序号;基于编译序号依次对每个目标编译软件包进行配置编译,得到每个目标编译软件包的编译结果;汇总每个编译结果和设备配置信息,生成目标嵌入式设备的固件包,解决了现有技术中因嵌入式软件开发过程中因过于繁锁、庞杂的软件包依赖关系,导致嵌入式软件包的配置、编译构建耗时久、效率低的问题,实现了通过加载与目标嵌入式设备相关的编译器配置、目标嵌入式设备的设备配置信息以及一个通用的软件包注册脚本,之后基于设备配置信息、软件配置信息以及当前工作路径,从待编译软件包中选取满足要求的目标编译软件包,并为每个目标编译软件包自动分配编译序号,使得基于编译序号依次对每个目标编译软件包进行配置编译,最终汇总每个目标编译软件包的编译结果和设备配置信息,生成用于升级嵌入式设备的固件包,不仅提高嵌入式软件编译构建效率,还可以快速方便地增加对新的嵌入式设备的编译构建的支持,达到提高软件开发效率、节约研发成本的效果。
96.在上述装置的基础上,可选的,所述序号分配模块320,包括待选择软件包确定单元、目标编译软件包确定单元和序号分配单元。
97.待选择软件包确定单元,用于基于所述设备配置信息对所述待编译软件包进行筛选,确定待选择软件包;
98.目标编译软件包确定单元,用于基于所述当前工作路径,从所述待选择软件包中确定目标编译软件包;
99.序号分配单元,用于基于所述软件配置信息中的软件注册顺序为每个所述目标编译软件包分配编译序号。
100.在上述装置的基础上,可选的,所述设备配置信息中包括配置软件信息和校验软件信息;所述待选择软件包确定单元包括:核验结果确定子单元和待选择软件包确定子单元。
101.核验结果确定子单元,用于基于所述配置软件信息对所述待编译软件包进行核验,确定核验结果;
102.待选择软件包确定子单元,用于若所述核验结果为未全部安装,则基于所述校验
软件信息对所述待编译软件包进行筛选,确定与所述目标嵌入式设备相适配的待选择软件包。
103.在上述装置的基础上,可选的,序号确定单元,用于若所述当前工作路径为软件工程的工作路径,则将每个所述待选择软件包均作为所述目标编译软件包。
104.在上述装置的基础上,可选的,序号确定单元,用于若所述当前工作路径为软件包路径,则从所述软件配置信息中确定编译参数;基于所述编译参数,从所述待选择软件包中确定目标编译软件包。
105.在上述装置的基础上,可选的,序号确定单元,用于若所述编译参数与预设关联参数相一致,则将与所述软件包路径相对应的待选择软件包作为起始编译软件包,并基于所述起始编译软件包以及与所述起始编译软件包相关联的关联编译软件包确定目标编译软件包;若所述编译参数与预设关联参数不一致,则将与所述软件包路径相对应的待选择软件包作为目标编译软件包。
106.在上述装置的基础上,可选的,编译构建模块330包括目标软件路径确定单元、配置函数调用单元和编译结果确定单元。
107.目标软件路径确定单元,用于对于每个所述目标编译软件包,确定所述目标编译软件包的目标软件路径;
108.配置函数调用单元,用于若在所述目标软件路径下未存在配置标志文件,则确定配置检测结果为未配置,在所述未配置的条件下,从所述软件配置信息中调用与所述目标软件路径相关联的配置函数;
109.编译结果确定单元,用于基于所述配置函数进行所述目标编译软件包的配置,并在配置完成时,对所述目标编译软件包进行编译,得到所述目标编译软件包的编译结果。
110.在上述装置的基础上,可选的,所述编译结果确定单元包括配置单元、检测单元、编译构建函数调用单元和编译单元。
111.配置单元,用于执行与所述配置函数相对应的配置任务,将所述目标编译软件包的配置信息配置在所述目标嵌入式设备中;
112.检测单元,用于在检测到配置完成时,确定在所述目标软件路径下是否存在编译标志文件,若是,则确定编译检测结果为未编译;
113.编译构建函数调用单元,用于在所述未编译的条件下,从所述软件配置信息中调用与所述目标软件路径相关联的编译构建函数;
114.编译单元,用于基于所述编译构建函数编译所述目标编译软件包,得到所述编译结果。
115.本发明实施例所提供的嵌入式软件包编译构建装置可执行本发明任意实施例所提供的嵌入式软件包编译构建方法,具备执行方法相应的功能模块和有益效果。
116.实施例四
117.图6是实现本发明实施例的嵌入式软件包编译构建方法的电子设备的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功
能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
118.如图6所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(rom)12、随机访问存储器(ram)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(rom)12中的计算机程序或者从存储单元18加载到随机访问存储器(ram)13中的计算机程序,来执行各种适当的动作和处理。在ram 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、rom 12以及ram 13通过总线14彼此相连。输入/输出(i/o)接口15也连接至总线14。
119.电子设备10中的多个部件连接至i/o接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
120.处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如嵌入式软件包编译构建方法。
121.在一些实施例中,嵌入式软件包编译构建方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由rom 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到ram 13并由处理器11执行时,可以执行上文描述的嵌入式软件包编译构建方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行嵌入式软件包编译构建方法。
122.本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、负载可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
123.用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
124.在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质
可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
125.为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
126.可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)、区块链网络和互联网。
127.计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与vps服务中,存在的管理难度大,业务扩展性弱的缺陷。
128.应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
129.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表