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

数据处理方法、设备、产品及存储介质与流程

2021-11-22 14:01:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及数据处理方法、设备、产品及存储介质。


背景技术:

2.随着linux应用需求的发展,用户需求日益多样化,进而导致用户对linux应用系统差异化需求也越来越明显。
3.热补丁(或热修复、或热修复补丁)是一种不影响设备运行的条件下,修改设备软件缺陷的技术。热补丁技术不仅提供了一种及时修改运行系统中软件错误的手段,而且此技术可以降低版本升级造成客户收益的损失。热修复是面向移动设备或服务器的线上修复服务,为应用app或操作系统线上版本提供静默更新,细粒度修复能力,帮助开发者实时修复线上问题,敏捷发布轻量级功能。
4.现有热修复技术中,有时需要对内核中某个子系统或者模块进行针对性升级。然而,内核中各个子系统或模块之间是相互交错的,若要对内核中某个模块或者子系统进行升级,是相当困难的。
5.因此需要一种能够实现针对内核中某个模块或某个子系统进行边界划分的技术方案。


技术实现要素:

6.为解决或改善现有技术中存在的问题,本技术各实施例提供了数据处理方法、设备、产品及存储介质。
7.第一方面,在本技术的一个实施例中,提供了一种数据处理方法。该方法包括:获取模块配置信息;基于所述模块配置信息,收集内核源文件中的边界元素;根据所述边界元素,确定多个目标函数;分析所述多个目标函数分别所属类别;根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。
8.第二方面,在本技术的一个实施例中,提供了一种电子设备,包括存储器及处理器;其中,所述存储器,用于存储程序;所述处理器,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于实现第一方面所述的一种数据处理方法。
9.第三方面,在本技术的一个实施例中,提供了一种计算机产品,包括计算机程序/指令,当所述计算机程序/指令被处理器执行时,致使所述处理器能够实第一方面所述的一种数据处理方法。
10.第四方面,在本技术的一个实施例中,提供了一种非暂时性机器可读存储介质,所
述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如第一方面所述的一种数据处理方法。
11.本技术实施例提供的技术方案,获取模块配置信息。基于所述模块配置信息,收集内核源文件中的边界元素。根据所述边界元素,确定多个目标函数。分析所述多个目标函数分别所属类别。根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。采用上述技术方案,根据模块配置信息收集边界元素,将边界元素作为进行边界划分的依据,进而根据边界元素确定目标函数。根据边界元素和目标函数实现了简单、快速的对目标模块进行边界划分,在边界划分过程中不会对内核源文件产生影响,能够有效提高目标模块提取效率。
附图说明
12.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
13.图1为本技术一实施例提供的数据处理方法的流程示意图;图2为本技术实施例提供的一种函数类别分析方法的流程示意图;图3为本技术实施例提供的一种外部函数类别确定的方法的流程示意图;图4为本技术实施例提供的另一种外部函数类别确定方法的流程示意图;图5为本技术实施例举例说明函数所属类别划分的过程示意图;图6为本技术实施例提供的一种内部函数类别确定方法的流程示意图;图7为本技术实施例中举例说明的目标模块提取过程的示意图;图8为本技术实施例提供的一种数据处理装置的结构示意图;图9为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
14.在对安装有linux系统的电子设备(比如,服务器等)进行维护的时候,为了减少对电子设备运行的影响,通常会采用热修复或热升级方式对linux操作系统内核(monolithic kernel,或称“宏内核”)进行维护。一般来说,进行热修复工作的时候,通常是针对内核中特定模块进行热修复,比如,针对调度器进行热修复。然而,内核中各个模块或者子系统之间相互交错,并没有明显分界线。在现有技术当中,由于待热修复的模块涉及到很多函数和参数,而且函数类型可能包含很多种,升级工作比较复杂。比如,需要修改大量待代码,还要消除因为代码修改带来的冲突问题而实施大量测试评审任务,为了完成一次模块热修复任务,需要耗费大量人力物力。因此,需要一种能够简单快速实现内核模块热修复或升级的技术方案。
15.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
16.在本技术的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。
操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。此外,下文描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
17.如图1为本技术一实施例提供的数据处理方法的流程示意图。在实际应用场景中,该方法的执行主体可以是电子设备(比如,计算机、服务器等)。该方法具体包括如下步骤:101:获取模块配置信息。
18.102:基于所述模块配置信息,收集内核源文件中的边界元素。
19.103:根据所述边界元素,确定多个目标函数。
20.104:分析所述多个目标函数分别所属类别。
21.105:根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。
22.在实际应用中,linux内核中的模块之间相互交错,比如,内核调度器为了能够满足各种子系统或者模块的调用需求,会设置有很多用于对外呈现的接口函数,通过接口函数,实现内部函数与外部函数之间的间接调用。在待划分边界的模块当中含有内部函数、外部函数、公共数据等等。可以根据需要,基于模块的边界划分需求,确定模块配置信息。这些模块边界配置信息可以包括接口函数、内部函数、外部函数、公共数据、私有数据、结构体成员等。在进行模块配置信息定义的时候,需要考虑到得到的目标模块对应的边界信息要更加容易维护、边界可收敛以及闭包。这里所说的容易维护可以理解为在目标模块的边界定义中仅限定了有限的接口函数、私有数据等等,从而使得后期对目标模块的维护更加简单。这里所说的边界可收敛可以理解为在明确指定接口函数、私有数据等,使得进行边界划分的时候具有更加清晰的标准,即便某些函数存在交错复杂的调用关系,但是仍然能够实现清晰的边界划分。这里所说的闭包可以理解为若目标模块外的外部函数想要调用目标模块内的内部函数,只能通过接口函数或者函数指针才能够实现调用,目标模块对外呈现的接口是相对固定的。
23.容易理解的是,这里所说的模块配置信息可以是由用户指定的,这些模块配置信息的表示方式则通常会是以用户能够看懂的高级语言(比如,汇编、c语言等)方式进行表示。但是在内核源文件中的代码则是采用二进制等机器语言方式表示。因此,在确定模块配置信息之后,还需要进一步根据模块配置信息中的高级语言从内核源文件中进行相关边界元素的收集,这里所说的边界元素是内核源文件中收集到的代码。
24.其中,边界元素的收集过程如下:基于所述模块配置信息,对所述内核源文件进行编译处理。从编译后所述内核源文件中收集与所述模块配置信息对应的边界元素;其中,所述边界元素包括:内部函数符号、外部函数符号、结构体成员符号、私有数据符号、公有数据符号、函数调用关系、接口函数符号和函数指针符号。需要说明的是,这里所说的各种符号可以理解为内核符号表就是为开发人员通过符号来访问程序体的对应地址,建立了一个动态可变更的映射表格。换言之,开发人员在使用某个函数或者变量的时候,只需要输入对应的符号,而不需要知道符号对应的地址。
25.例如,利用编译技术,在内核源文件进行编译期间,根据模块配置信息,对边界划分需要的信息进行收集,主要包括:符号的名字、符号定义所在文件(为了避免重名static符号导致混淆)、符号定义的代码区间、函数调用关系、符号的属性(__init修饰、inline修饰)、函数指针(包括初值、参数传递、赋值,主要用于接口函数)、接口函数。其中,符号定义的代码区间用于在进行边界元素提取的时候确定对应的代码区间及位置;函数调用关系用于下述实施例中对目标函数的所属类别进行分析。
26.需要说明的是,在进行函数调用关系的提取的时候,可以利用gcc

plugin 提供的callgraph视图中导出,该视图提供了所有函数间关系。函数指针可以通过分析抽象语法树获得,任一变量初值是函数,便认为是函数指针;接口函数是通过模块配置信息获得;其它的信息都可以从原始符号信息中直接获取。
27.由于在模块配置信息中是用户根据边界划分以及模块提取需求确定的很多信息,这些信息有些是将要被划分到目标模块内的,有些则是用于辅助实现边界划分的。因此,在确定边界元素之后,还需要进一步的根据边界元素进行目标函数识别。这里所说的目标函数按照所述的类别进行划分,包括有内部函数和外部函数。通过对内部函数和外部函数的调用关系、结构体应用范围等等的进一步分析,实现从内核源文件中准确提取到所需的目标模块。
28.在本技术一个或在多个实施例中,所述目标函数所属类别包括内部函数和外部函数。根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块,包括:根据所述边界元素,从内核源文件中提取代码集。将所属类别为外部的目标函数,从所述代码集中移出。其中,所述目标模块包括:所述代码集。
29.这里所说的内部函数可以理解为定义在目标模块内,只能被内部函数或接口函数调用。这里所说的外部函数可以理解为定义在目标模块外,能够被外部函数和/或内部函数调用。若一个函数参与多条调用路径中,只要有其中任意一条调用路径中该函数被外部函数直接调用了,那么,该函数则别标记为外部函数。
30.如前文所述可知,这里所说的边界元素和多个目标函数,都是根据模块配置信息从内核源文件中提取到的。由于在配置模块配置信息的时候,有一些目标函数所属类别的划分不是很准确,因此可以理解的是,这里所说的内部函数和外部函数的划分结果仅作为初步内部函数集合和外部函数集合。为了能够实现更加准确的进行边界划分,在需要基于内部函数集合、外部函数集合对目标函数调用关系进行进一步分析,具体将在下述调用关系分析的实施例中进行解释说明。
31.为了使得最终得到的目标模块能够具有更好的独立性,减少或者避免目标模块进行热修复或者热升级操作时对其他模块的不利影响,需要根据函数所属类型将外部函数从目标函数中清除掉。具体来说,在基于边界元素从内核源文件中提取到代码集之后,将代码集中数据外部函数的对应的代码进行移出,从而使得目标模块中的代码集更加符合边界划分的需求。
32.在实际应用中,将所属类别为外部的目标函数,从所述代码集中移出,具体包括如下步骤:若所述目标函数的所属类别为外部函数,确定外部函数对应的代码区间。将外部函数及所述代码区间从所述代码集中移出。
33.在本技术一个或者多个实施例中,所述模块配置信息中指定了如下中的至少一
项:公共数据、私有数据、接口函数、函数指针。
34.根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块,还包括:若所述模块配置信息中指定公共数据,则将所述公共数据,从所述代码集中移出。若所述模块配置信息中指定了函数指针,则对所述函数指针进行重命名。导出所述代码集中的接口函数到代码集的头文件中。其中,所述目标模块包括:所述代码集及所述头文件。
35.如前文所述可知,在模块配置信息中预先指定了很多与边界划分相关的信息。在模块配置信息中包括有公共数据、私有数据、接口函数和函数指针。其中一些被划分到目标模块内部,另一些则认为不属于目标模块。具体来说,在基于边界元素从内核源文件中提取到代码集。该代码集中包含的内容比较繁杂,其中一些边界元素仅是用于帮助实现边界划分的,这部分信息对应的代码则需要从代码集中移出。这里所说的公共数据可以理解为对应的符号被定义在目标模块外,公共数据的数据副本并不被目标模块持有,当有热升级需求时可以直接使用内核中原有符号。
36.例如,在模块配置信息中指定了公共数据和私有数据,进一步将定义在模块内的公共数据移到模块外,利用gcc plugin修改公共数据的变量属性,增加外部(external)声明,直接地替换该行源代码。
37.再例如,在模块配置信息中指定了函数指针。对模块内的函数指针进行重命名处理。进行函数指针重命名的作用是,保证总是先执行原来重命名之前的函数头,然后再跳转到当前模块重命名之后的函数。原因是作为函数指针的函数是无法得知它们何时会被调用,如果不采用重命名并保留原来的函数头,则会破坏热升级的原子性。在实际重命名过程中,可以利用gcc

plugin实现很方便的对函数指针的函数名进行修改,且生成函数声明,例如void function(int x){} 函数会自动被修改为:
ꢀꢀꢀꢀꢀꢀꢀꢀ
extern void function(int x);
ꢀꢀꢀꢀꢀꢀꢀ
void __mod_function(int x){}在本技术一个或者多个实施例中,为了便于对目标模块的管理以及后续开发人员针对目标模块的开发利用,可以根据目标模块生成对一个的目录。具体来说,根据所述边界元素、所述多个目标函数分别所属的类别,生成所述目标模块对应的目录。
38.在实际应用中,为了便于后续开发人员对目标模块的开发,以及避免开发人员对目标模块中边界相关参数(比如,接口函数调用关系、私有数据属性等等)的随意修改,将从内核源文件中提取到的模块相关函数存储到目录当中。也就是,在开发人员对目标模块进行开发的工作当中,当需要调用某个函数的时候,只可以从目录中调用并进一步开发实现其所需要的功能,而不允许开发人员在目录中添加新的函数。因为考虑到目标模块开发人员可能只负责某一个子系统或者某个模块,但是不了解某个边界信息中接口函数与其他子系统之间的关联关系,开发人员可以通过目录快速找到自己所需要的函数。此外,也能够有效防止开发人员贸然增删接口函数将会威胁到目标模块的稳定性。
39.如前文所述,在目标模块中需要将不属于该煤矿内的外部函数和公共数据从内核源文件对应的代码集当中移除。在边界元素当中包含有公共数据对应的符号、私有数据对应的符号等等,从上述实施例可知公共数据并不属于目标模块。因此,在生成目录的时候,需要按照实际有效的目标模块生成对应的目录。在生成边界划分目录之后,还需要进一步
结合热升级支持代码进行编译。
40.在本技术一个或者多个实施例中,模块配置信息中包含有结构体成员时,所述方法还包括:根据所述结构体成员的调用范围,确定不能被所述目标模块外调用的内部结构体成员,以及能被所述目标模块外调用的外部结构体成员;基于所述内部结构体成员和所述外部结构体成员生成结构体边界文档;其中,所述目标模块包括:所述代码集、所述头文件及所述结构体边界文档。
41.在实际应用中,按照可被调用范围来划分,可以将结构体成员划分为内部结构体成员和外部结构体成员。将可跨越边界进行调用的结构体成员称为外部结构体成员,将只适用于模块内部的结构体成员称为内部结构体成员。
42.在确定内部结构体成员和外部结构体成员之后,可以基于内核源文件获取结构体成员边界文档,也可以是由用户配置结构体成员边界文档。该结构体成员边界文档可以展示给开发人员看,但是只允许后续的开发人员对内部结构体成员进行修改。进而,基于此前提取到的目标模块相关函数和新获取的结构体成员边界文档。在该目录中包括代码集、头文件以及结构体边界文档,可以看到目标模块中函数对应的代码集和结构体成员信息以及存储路径信息和对应的目录名称。进而,将目录存储到内核的代码仓库当中。
43.在本技术一个或者多个实施例中,如图2为本技术实施例提供的一种函数类别分析方法的流程示意图。从图2中可以看到,所述分析所述多个目标函数分别所属类别,包括如下步骤:201:在对所述内核源文件进行编译过程中,获取所述多个目标函数的函数调用关系。202:根据所述调用关系,确定所述多个目标函数中各目标函数关联的调用路径。203:根据所述调用路径的分析结果,确定所述多个目标函数分别所属类别。
44.这里所说的函数调用关系可以是在基于模块配置信息进行边界元素提取的时候获取到的。在确定模块配置信息之后,若要获取到内核源文件当中相关边界元素,需要对内核源文件执行编译过程中获取。除了能够获取到边界元素之外,还能够获取到模块配置信息相关的多个函数调用关系。需要说明的是,同一个函数可能同时参与到多条调用路径当中,换言之,基于某个外部函数的调用关系查找其对应的调用路径的时候,能够查找到多条调用路径。在一些调用路径当中,可能包含有模块配置信息指定的外部函数、内部函数、接口函数;在另一些调用路径中,可能包含有模块配置信息指定的外部函数和内部函数,而不含有接口函数,也就是可以由外部函数直接调用内部函数。
45.进而,如步骤203根据调用路径进行函数类别分析具体方法可参见图3。如图3为本技术实施例提供的一种外部函数类别确定的方法的流程示意图。从图3中可以看到包括如下步骤:301:确定所述调用路径中与所述多个目标函数具有调用关系的多个函数。
46.302:若所述多个函数中不包含所述接口函数,则确定所述调用路径中的目标函数为外部函数。
47.303:生成包含有被标记为外部函数的目标函数的更新后外部函数集合。
48.需要说明的是,在模块配置信息中指定了内部函数集合和外部函数集合。
49.根据模块配置信息中指定的内部函数集合和外部函数集合,可以初步知道目标函数当中对应的各个函数的所属类别。在上述实施例中解释过,在模块配置信息中所指定的
内部函数集合和外部函数集合都不是很准确,通常是由工作人员根据经验进行指定的,然而,实际函数调用过程中的调用关系是很复杂的,而且所涉及到的函数也比较多,工作人员很难完全分清楚所有的函数的所属类别。因此,还需要基于上述大概分类得到的内部函数集合和外部函数集合的基础上,进行进一步的函数所属类别的分析确定工作。
50.具体来说,将根据调用路径中是否存在内部函数与外部函数之间的直接调用来确定函数的所属类别。若内部函数不存在直接调用,则保留在原内部函数集合当中,若该内部函数关联有任一条调用路径存在被外部函数直接调用的情况,则将该内部函数重新划分到外部函数集合当中,从而得到更新后外部函数集合。这样进行函数所属类别的划分,能够有效避免被划分到目标模块内的任何函数影响到目标模块外其他模块或者子系统的情况发生。
51.如图4为本技术实施例提供的另一种外部函数类别确定方法的流程示意图。所述若所述多个函数中不包含所述接口函数,则确定所述调用路径中的目标函数为外部函数,包括如下步骤:401:若所述多个目标函数中包含有所述内部函数集合中的任一内部函数,且所述多个函数中不包含所述接口函数,则标记所述任一内部函数为外部函数;402:将所述任一内部函数从所述内部函数集合分配到所述更新后外部函数集合。
52.为了便于理解,下面将具体举例说明。如图5为本技术实施例举例说明函数所属类别划分的过程示意图。从图5中可以看到,在内部函数集合当中包含有内部函数1和内部函数2,外部函数集合当中包含有外部函数1和外部函数2。在进行函数调用的时候,可以看到,在调用路径1当中,外部函数1通过接口函数1间接调用内部函数1。在调用路径2当中,外部函数2在调用内部函数2的时候,则是直接进行调用的。在调用路径3当中,外部函数3通过接口函数2调用内部函数3;在调用路径4当中,外部函数4直接调用内部函数3。
53.接下来基于图4进行具体分析。由图5可知,在调用路径2中的内部函数2虽然在最初被划分为内部函数,但是通过分析发现内部函数2是存在被外部函数2直接调用的情况的,因此,需要对内部函数2的所属类别进行更改,将其更改为外部函数,并将其划分到更新后外部函数集合当中。内部函数3被划分为内部函数,在调用路径3中外部函数3是通过接口函数2实现对内部函数3调用的,但是,在调用路径4当中,外部函数4则是直接调用内部函数3;因此,需要对内部函数3的所属类别进行更改,将其更改为外部函数,并将其划分到更新后外部函数集合当中。对于内部函数1只有一条调用路径,而且外部函数1是通过接口函数1才对内部函数1的调用,因此,经过分析将内部函数1保留在原来的内部函数集合当中。通过上述实施例能够将原来被划分到内部函数集合当中的函数进行纠正处理,从而能够确保没有外部函数被错误的划分到内部函数集合当中。
54.如图6为本技术实施例提供的一种内部函数类别确定方法的流程示意图。从图6中可以看到,所述根据所述调用路径的分析结果,确定所述多个目标函数分别所属类别,包括如下步骤:601:确定所述多个目标函数对应的函数集合。
55.602:基于所述函数集合去除所述更新后外部函数集合、所述接口函数、所述函数指针。
56.603:生成更新后内部函数集合。
57.基于图3至图5所示的实施例,能够准确确定出更新后外部函数集合。基于模块配置信息以及更新后外部函数集合,能够得到包含有所有目标函数的函数集合。在函数集合当中,包含有内部函数、外部函数、接口函数以及函数指针。由于接口函数和函数指针是在模块配置信息中准确指定了的,不需要发生更改或变化。而外部函数通过图3至图5对应的各实施例也已经获取比较完善的更新后外部函数集合。因此,可以进一步地,将函数集合当中已经能够确定的更新后外部函数集合、接口函数以及函数指针进行去除后,剩下的就是更新后内部函数集合。这个内部函数集合是准确的集合,其中任何一个内部函数都不存在被外部函数直接调用的情况。因此,也就确保了目标模块的边界划分以及热升级的可操作性。
58.为了便于理解本技术技术方案,下面将结合具体实施例对目标模块的提取过程进行举例说明。如图7为本技术实施例中举例说明的目标模块提取过程的示意图。从图7中可以看到,根据实际的对目标模块进行边界划分的需求,确定模块的内核源文件、模块的接口函数和私有数据等等,进而基于这些基础信息生成模块配置信息。接下来,通过对内核源文件进行编译处理的过程中,实现边界元素等信息的收集。这些边界元素中包括有各种符号(比如,内部函数符号、外部函数符号、接口函数符号等等)。容易理解的是,在模块配置信息中虽然指定了内部函数和外部函数,但是由于模块中函数很多,无法准确区分出哪些是内部函数、哪些是外部函数,因此,还需要进一步边界分析。通过边界分析后,能够准确获得内部函数、外部函数,并结合此前确定的接口函数、函数指针、私有数据等等,生成边界配置文档。基于该边界配置文档,从内核源文件中进行边界提取。提取过程简单来说包括:外部函数移出、公共数据异常、函数指针重命名、函数导出(将接口函数、函数指针的声明导出到头文件中)、结构体成员边界划分等。完成上述边界信息提取工作之后,生成目标模块。通过对边界划分需求的分析,准确的确定出接口函数,并基于此对边界信息进行修正得到边界划分文档,能够有效提高边界划分处理效率以及边界划分准确性。在得到目标模块之后,可以实现对目标模块的快速热升级等复杂操作。
59.基于同样的思路,本技术实施例还提供一种数据处理装置。如图8为本技术实施例提供的一种数据处理装置的结构示意图。该数据处理装置包括:获取模块81,用于获取模块配置信息。
60.收集模块82,用于基于所述模块配置信息,收集内核源文件中的边界元素。
61.确定模块83,用于根据所述边界元素,确定多个目标函数。
62.分析模块84,用于分析所述多个目标函数分别所属类别。
63.提取模块85,用于根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。
64.可选地,所述目标函数所属类别包括内部函数和外部函数。提取模块85,用于根据所述边界元素,从内核源文件中提取代码集;将所属类别为外部的目标函数,从所述代码集中移出;其中,所述目标模块包括:所述代码集。
65.可选地,所述模块配置信息中指定了如下中的至少一项:公共数据、私有数据、接口函数、函数指针。提取模块85,还用于若所述模块配置信息中指定公共数据,则将所述公共数据,从所述代码集中移出;若所述模块配置信息中指定了函数指针,则对所述函数指针进行重命名;导出所述代码集中的接口函数到代码集的头文件中;其中,所述目标模块包
括:所述代码集及所述头文件。
66.可选地,还包括生成模块86,用于根据所述边界元素、所述多个目标函数分别所属的类别,生成所述目标模块对应的目录。
67.可选地,模块配置信息中包含有结构体成员时,生成模块86还用于根据所述结构体成员的调用范围,确定不能被所述目标模块外调用的内部结构体成员,以及能被所述目标模块外调用的外部结构体成员;基于所述内部结构体成员和所述外部结构体成员生成结构体边界文档;其中,所述目标模块包括:所述代码集、所述头文件及所述结构体边界文档。
68.可选地,分析模块84,用于在对所述内核源文件进行编译过程中,获取所述多个目标函数的函数调用关系;根据所述调用关系,确定所述多个目标函数中各目标函数关联的调用路径;根据所述调用路径的分析结果,确定所述多个目标函数分别所属类别。
69.可选地,所述模块配置信息中指定了内部函数集合和外部函数集合。确定模块83,用于确定所述调用路径中与所述多个目标函数具有调用关系的多个函数;若所述多个函数中不包含所述接口函数,则确定所述调用路径中的目标函数为外部函数;生成包含有被标记为外部函数的目标函数的更新后外部函数集合。
70.可选地,确定模块83,还用于若所述多个目标函数中包含有所述内部函数集合中的任一内部函数,且所述多个函数中不包含所述接口函数,则标记所述任一内部函数为外部函数;将所述任一内部函数从所述内部函数集合分配到所述更新后外部函数集合。
71.可选地,确定模块83,还用于确定所述多个目标函数对应的函数集合;基于所述函数集合去除所述更新后外部函数集合、所述接口函数、所述函数指针;生成更新后内部函数集合。
72.可选的,还包括移出模块87,用于若所述目标函数的所属类别为外部函数,确定外部函数对应的代码区间;将外部函数及所述代码区间从所述代码集中移出。
73.可选地,收集模块82用于基于所述模块配置信息,对所述内核源文件进行编译处理;从编译后所述内核源文件中收集与所述模块配置信息对应的边界元素;其中,所述边界元素包括:内部函数符号、外部函数符号、结构体成员符号、私有数据符号、公有数据符号、函数调用关系、接口函数符号和函数指针符号。
74.本技术一个实施例还提供一种电子设备。如图9为本技术实施例提供的一种电子设备的结构示意图。该电子设备包括存储器901、处理器902及通信组件903;其中,所述存储器901,用于存储程序;所述处理器902,与所述存储器耦合,用于执行所述存储器中存储的所述程序,以用于:获取模块配置信息;基于所述模块配置信息,收集内核源文件中的边界元素;根据所述边界元素,确定多个目标函数;分析所述多个目标函数分别所属类别;根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。
75.上述存储器901可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指令。存储器可以由任何
类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
76.进一步地,本实施例中的所述处理器902可以具体是:可编程交换处理芯片,该可编程交换处理芯片中配置有数据复制引擎,能对接收到的数据进行复制。
77.上述处理器902在执行存储器中的程序时,除了上面的功能之外,还可实现其它功能,具体可参见前面各实施例的描述。进一步,如图9所示,电子设备还包括:显示组件904等其它组件。
78.基于同样的思路,本技术实施例还提供一种计算机产品,包括计算机程序/指令,当所述计算机程序/指令被处理器执行时,致使所述处理器能够实现图1至图6中的步骤。
79.基于同样的思路,本技术实施例还提供一种非暂时性机器可读存储介质,所述非暂时性机器可读存储介质上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如图1至图6中的步骤。
80.基于上述实施例,获取模块配置信息。基于所述模块配置信息,收集内核源文件中的边界元素。根据所述边界元素,确定多个目标函数。分析所述多个目标函数分别所属类别。根据所述边界元素、所述多个目标函数分别所属的类别,从内核源文件中提取目标模块。采用上述技术方案,根据模块配置信息收集边界元素,将边界元素作为进行边界划分的依据,进而根据边界元素确定目标函数。根据边界元素和目标函数实现了简单、快速的对目标模块进行边界划分,在边界划分过程中不会对内核源文件产生影响,能够有效提高目标模块提取效率。
81.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
82.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
83.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献