【专利交易】【专利代理】【商标和版权申请】【高新技术企业认定】Tel:18215660330

映像文件生成方法及装置制造方法

xiaoxiao2020-07-22  0

【专利交易】【专利代理】【商标和版权申请】【高新技术企业认定】Tel:18215660330

映像文件生成方法及装置制造方法
【专利摘要】本发明公开了一种映像文件生成方法及装置,属于计算机【技术领域】。方法包括:在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件;在链接阶段,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件。本发明在对多个源文件进行编译及链接处理后,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中在加载映像文件时无需分多次加载映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
【专利说明】映像文件生成方法及装置
【技术领域】
[0001]本发明涉及计算机【技术领域】,特别涉及一种映像文件生成方法及装置。
【背景技术】
[0002]现有的多核DSP(Digital Signal Processor,数字信号处理)系统中的内存分布通常比较复杂,可能存在多级内存空间。比如最常见的划分如下:各个核私有的LI级内存或L2级内存,各个映像文件间共享的L2级内存或L3级内存,以及所有核共享的DDR(DoubIe Data Rate,双倍速率)内存。在实际应用中,多核系统会根据不同业务需要,利用多级内存生成不同的映像文件(Image)。
[0003]现有技术在生成映像文件时,一次生成多个映像文件。参见图1,详细过程如下:先将多个核划分为至少一个核组;其中,核(core)O、核1、核2为一个核组,核3为一个核组,核4、核5为一个核组。在生成映像文件时,存储在核O、核I及核2对应的多级内存中的至少一个源文件在经过编译及汇编处理后,在链接阶段根据对应的链接脚本生成映像文件ImageA ;存储在核3对应的多级内存中的至少一个源文件在经过编译及汇编处理后,在链接阶段根据对应的链接脚本生成映像文件ImageB ;存储在核4、核5对应的多级内存中的至少一个源文件在经过编译及汇编处理后,在链接阶段根据对应的链接脚本生成映像文件ImageC0
[0004]在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
[0005]由于一次生成多个映像文件,所以后续过程中加载器在加载映像文件时,不但需要分多次分别加载每个映像文件,而且由于多级内存中存在各个核共享的L3内存及DDR内存,所以在加载映像文件时,存在共享内存多次重复加载的问题,加载速度慢、加载效率低。

【发明内容】

[0006]为了解决现有技术的问题,本发明实施例提供了一种映像文件生成方法及装置。所述技术方案如下:
[0007]第一方面,提供了一种映像文件生成方法,所述方法包括:
[0008]在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件;
[0009]在链接阶段,根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件。
[0010]在第一方面的第一种可能的实现方式中,所述在编译及汇编阶段,对多个源文件进行编译处理及汇编处理,得到多个可重定位文件,包括:
[0011]在编译阶段,分别为所述多个源文件添加预设段属性,得到多个中间源文件;对所述多个中间源文件进行编译,得到多个汇编文件;
[0012]在汇编阶段,对所述多个汇编文件进行汇编处理,得到多个可重定位文件。
[0013]结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述多个重定位文件和至少一个链接脚本,生成单一映像文件,包括:
[0014]为链接脚本添加预设字段,得到新的链接脚本;
[0015]根据所述多个可重定位文件和所述新的链接脚本,生成所述单一映像文件。
[0016]结合第一方面,在第一方面的第三种可能的实现方式中,所述在链接阶段,根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件,包括:
[0017]在一次链接阶段,根据所述多个源文件和多个链接脚本,生成多个初始映像文件;
[0018]在二次链接阶段,根据所述多个初始映像文件和一个链接脚本,生成所述单一映像文件。
[0019]结合第一方面、第一方面的第一种至第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述单一映像文件中包括映射段;其中,所述映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0020]结合第一方面的第一种可能的实现方式,在第一方面的第五种可能的实现方式中,所述预设段属性为属性attribute属性。
[0021]结合第一方面的第二种可能的实现方式,在第一方面的第六种可能的实现方式中,所述预设字段为虚拟virtual字段。
[0022]结合第一方面的第四种可能的实现方式,在第一方面的第七种可能的实现方式中,所述根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件之后,所述方法还包括:
[0023]获取所述单一加载映像文件的映射段;
[0024]对所述单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息;
[0025]根据所述核数量信息,确定多核系统的核数量;
[0026]根据所述核组配置信息,确定所述多核系统中多个核的分组情况;
[0027]根据所述加载段地址索引信息、所述私有内存段的加载核组信息及所述私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间;
[0028]对于多个加载段中的每一个加载段,将所述加载段加载到与所述加载段对应的内存空间上。
[0029]第二方面,提供了一种映像文件生成装置,所述装置包括:
[0030]编译汇编模块,用于在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件;
[0031]链接模块,用于在链接阶段,根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件。
[0032]在第二方面的第一种可能的实现方式中,所述编译汇编模块,用于在编译阶段,分别为所述多个源文件添加预设段属性,得到多个中间源文件;对所述多个中间源文件进行编译,得到多个汇编文件;在汇编阶段,对所述多个汇编文件进行汇编处理,得到多个可重定位文件。
[0033]结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述链接模块,用于为链接脚本添加预设字段,得到新的链接脚本;根据所述多个可重定位文件和所述新的链接脚本,生成所述单一映像文件。
[0034]结合第二方面,在第二方面的第三种可能的实现方式中,所述链接模块,
[0035]用于在一次链接阶段,根据所述多个源文件和多个链接脚本,生成多个初始映像文件;在二次链接阶段,根据所述多个初始映像文件和一个链接脚本,生成所述单一映像文件。
[0036]结合第二方面、第二方面的第一种至第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述单一映像文件中包括映射段;其中,所述映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0037]结合第二方面的第一种可能的实现方式,在第二方面的第五种可能的实现方式中,所述预设段属性为attribute属性。
[0038]结合第二方面的第二种可能的实现方式,在第二方面的第六种可能的实现方式中,所述预设字段为virtual字段。
[0039]结合第二方面的第四种可能的实现方式,在第二方面的第七种可能的实现方式中,所述装置还包括:
[0040]获取模块,用于获取所述单一加载映像文件的映射段;
[0041]解析模块,用于对所述单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息;
[0042]核数量确定模块,用于根据所述核数量信息,确定多核系统的核数量;
[0043]核分组确定模块,用于根据所述核组配置信息,确定所述多核系统中多个核的分组情况;
[0044]内存空间确定模块,用于根据所述加载段地址索引信息、所述私有内存段的加载核组信息及所述私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间;
[0045]加载模块,用于对于多个加载段中的每一个加载段,将所述加载段加载到与所述加载段对应的内存空间上。
[0046]本发明实施例提供的技术方案带来的有益效果是:
[0047]在对多级内存存储的源文件进行编译及链接处理后,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
【专利附图】

【附图说明】
[0048]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0049]图1是本发明实施例提供的一种多核多映像文件的示意图;
[0050]图2是本发明实施例提供的第一种映像文件的生成及加载过程示意图;
[0051]图3是本发明实施例提供的第二种映像文件的生成及加载过程示意图;
[0052]图4是本发明实施例提供的第一种映像文件生成方法的流程图;
[0053]图5是本发明实施例提供的第二种映像文件生成方法的流程图;
[0054]图6是本发明实施例提供的一种包括映射段的映像文件生成方法示意图;
[0055]图7是本发明实施例提供的一种映像段的示意图;
[0056]图8是本发明实施例提供的一种加载映像文件方法的流程图;
[0057]图9是本发明实施例提供的一种加载映像文件的示意图;
[0058]图10是本发明实施例提供的第三种映像文件生成方法的流程图;
[0059]图11是本发明实施例提供的一种映像文件生成过程的示意图;
[0060]图12是本发明实施例提供的一种映像文件生成装置的结构示意图。
【具体实施方式】
[0061]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0062]在对本发明实施例作详细介绍之前,为了便于理解本发明实施例提供的映像文件生成方式,先对映像文件的生成过程做简单介绍。参见图2,本发明涉及的最主要两个主体是映像文件和加载器。用户或程序员提供编写好的源文件(多核DSP系统一般使用C语言或C++进行程序编码)和头文件,源文件和头文件存储在如图1所示的多级内存中。多个源文件和多个头文件在经过编译器的编译处理后,生成多个汇编文件(*.s);多个汇编文件在经过汇编器的汇编处理后,生成多个可重定位文件(*.0);最后,链接器根据链接脚本对多个可重定位文件进行链接处理,生成一个可执行二进制文件,也就是图2中的映像文件。在链接过程中,需要一个链接脚本作为另一个输入以指导整个链接过程。
[0063]需要说明的是,本发明实施例提供的映像文件生成方式在每次编译、汇编及链接过程中仅生成一个如图2所示的映像文件。而现有技术在生成映像文件时,通常采取如图3所示的生成过程,一次生成多个映像文件。一般来说,如果需要加载多个映像文件,往往会存在共享内存多次加载,加载效率低下的问题。而本发明实施例中一次仅生成一个映像文件。如果需要生成多个映像文件,则需要分为多次调用编译器、汇编器及链接器。当映像文件生成后,若映像文件需要到单板或者仿真器上运行或调试,则需要先将映像文件加载到对应的内存空间上。加载器在加载映像文件时,可以选择不同的方式加载映像文件。
[0064]图4是本发明实施例提供的一种映像文件生成方法的流程图。参见图4,本发明实施例提供的方法流程包括:
[0065]401、在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件。
[0066]402、在链接阶段,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件。
[0067]本发明实施例提供的方法,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
[0068]可选地,在编译及汇编阶段,对多个源文件进行编译处理及汇编处理,得到多个可重定位文件,包括:
[0069]在编译阶段,分别为多个源文件添加预设段属性,得到多个中间源文件;对多个中间源文件进行编译,得到多个汇编文件;
[0070]在汇编阶段,对多个汇编文件进行汇编处理,得到多个可重定位文件。
[0071]可选地,根据多个重定位文件和至少一个链接脚本,生成单一映像文件,包括:
[0072]为链接脚本添加预设字段,得到新的链接脚本;
[0073]根据多个可重定位文件和新的链接脚本,生成单一映像文件。
[0074]可选地,在链接阶段,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件,包括:
[0075]在一次链接阶段,根据多个源文件和多个链接脚本,生成多个初始映像文件;
[0076]在二次链接阶段,根据多个初始映像文件和一个链接脚本,生成单一映像文件。
[0077]可选地,单一映像文件中包括映射段;其中,映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映
射信息。
[0078]可选地,预设段属性为attribute属性。
[0079]可选地,预设字段为virtual字段。
[0080]可选地,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件之后,方法还包括:
[0081]获取单一加载映像文件的映射段;
[0082]对单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息;
[0083]根据核数量信息,确定多核系统的核数量;
[0084]根据核组配置信息,确定多核系统中多个核的分组情况;
[0085]根据加载段地址索引信息、私有内存段的加载核组信息及私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间;
[0086]对于多个加载段中的每一个加载段,将加载段加载到与加载段对应的内存空间上。
[0087]上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再
--赘述。
[0088]图5是本发明实施例提供的一种映像文件生成方法的流程图。以根据一个链接脚本生成映像文件为例,对本发明实施例提供的映像文件生成方法进行详细地解释说明。参见图5,本实施例提供的方法流程包括:
[0089]501、在编译阶段,分别为多个源文件添加预设段属性,得到多个中间源文件;对多个中间源文件进行编译,得到多个汇编文件。
[0090] 其中,预设段属性为attribute属性。当然,预设属性除attribute属性之外,还可为其他属性,本实施例对此不作具体限定。在为多个源文件添加预设段属性时,在各个源文件的函数前或全局数据上添加段属性关键字_attribute_即可。在为多个源文件添加段属性关键字后,得到中间源文件;在利用如图2所示的编译器对多个中间源文件进行编译处理后,可得到多个后缀名为.s的汇编文件。
[0091]502、在汇编阶段,对多个汇编文件进行汇编处理,得到多个可重定位文件。
[0092]在本发明实施例中,当根据上述步骤501得到多个汇编文件后,汇编器将对多个汇编文件进行汇编处理,得到多个后缀名为.ο的可重定位文件,实现将汇编语言翻译为机器语言。其中,对汇编文件进行汇编处理的具体实现方式,可参考现有技术,此处不再赘述。
[0093]503、在链接阶段,为链接脚本添加预设字段,得到新的链接脚本;根据多个可重定位文件和新的链接脚本,生成单一映像文件;单一映像文件中包括映射段;其中,映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0094]其中,预设字段为virtual字段。当然,预设字段除virtual字段外,还可为其他类型字段,本实施例对此不作具体限定。在为链接脚本添加预设字段时,可在链接脚本上添加.virtual关键字,进而得到新的链接脚本。在得到新的链接脚本后,链接器将根据新的链接脚本对多个可重定位文件进行处理,得到一个可执行的二进制文件,即单一映像文件。该单一映像文件中除包括机器可识别的二进制指令和相应数据外,还包括额外的映射段。其中,映射段包含的内容如下:
[0095]1、核数量信息及核组配置信息。如图6所示,映射段中设置的核数量为6个核(O?5),—共分为三个组:groupl,包含核O、核I及核2 ;group2仅包含核3, group3包含核4和核5。
[0096]2、各个加载段在映像文件中的地址索引信息或者段名信息。每个加载段的地址索引以指针的形式保存在映射段中,也就是仅保存了加载段在映像文件中的实际偏移地址。段名信息根据需要也可以保存。如图6中Ll_groupl冒号后的.L1.text就表不所指向的加载段的段名。
[0097]3、私有内存段的加载核组信息。私有内存段一般指代LI内存。每个私有段的加载核组信息可以以Ll_xxx的格式表示(XXX表示核组名)。比如,group I核组就表示为Ll_groupI ο
[0098]4、私有内存段的虚拟加载地址映射信息。对于实际可用内存非常大的多核DSP系统,可以选择剩余未用的空间进行私有空间映射。如图6中映射段箭头所指的第一列输出段;其中,Ll_groupl、Ll_group2和Ll_group3这三个核组需要加载的私有内存范围都为0x1000-0x2000,但在映像文件中,这个地址段被Ll_groupl占据了,所以Ll_group2和Ll_group3只能选择映像文件中其它段没有使用的0x3000-0x40000和χ4000_0χ5000进行映射。对于些没有多少剩余空间可用的多核DSP系统来说,只能通过扩展虚拟关键字virtual的方式,将私有内存段映射到虚拟的空间上去。如图6中映射段箭头所指的第二列输出段所示。
[0099]需要说明的是,映射段除包括上述几种信息之外,还可包括下述信息:共享内存分布信息及其它一些可配置信息等等。其中,共享内存分布信息用于标识哪些加载段具有共享内存属性。其它一些可配置信息可为cache line的分布信息、每块内存地址剩余可用空间的范围等等。
[0100]需要说明的是,映射段内的信息格式需要尽可能的简洁以达到压缩段空间,减小整体映像文件大小的目的。映射段的格式、内容及数量可以根据实际需要作调整,可以将所有信息压缩到一个段中,也可以分多个段存储必要的信息。
[0101]下面以一个例子对上述步骤501至步骤503进行举例说明。
[0102]以图7中所示场景为例,比如核O、核1、核2核为一个核组,核3单独为一个核组。源文件c.c属于核O、核1、核2所在核组的源文件,有一个需要放在LI私有内存上的函数funcCO ,如果采用扩展虚拟映射空间的方式进行放置,则仅需在funcC前添加attribue段属性关键字_attribute_((.virtual_0_l_2.Ll_text))。其中,virtual 表示虚拟扩展的内存,0_1_2表示这个函数是属于核O、核1、核2所在核组的,Ll_text是输入段名。与此同时,在进行链接之前,增加链接脚本的解析规则,使其支持virtual关键字和0_1_2的核号表示方式。所以在链接过程中,会生成如图6最右列格式的输出段。当所有输出段生成完成后,链接器扫描一遍所有输出段,并提取需要信息生成映射段。需要说明的是,除上述生成映射段的方式外,还可采取其他生成方式,本发明实施例对映射段的生成方式不作具体限定。
[0103]需要说明的是,在根据上述步骤501至步骤503生成映像文件后,若需要将映像文件加载到单板或者仿真器上运行或调试,则还需先将映像文件加载到对应的内存空间上去。具体的加载过程详见下述步骤801至步骤805。
[0104]801、获取单一映像文件的映射段。
[0105]在本发明实施例中,加载器在获取单一加载映像文件的映射段时,具体可采取下述方式实现:
[0106]在生成单一映像文件时,为该映射段设置特殊标识。在获取单一映像文件的映射段时,直接根据该特殊标识进行获取。
[0107]需要说明的是,除上述获取映射段的方式外,还可采取其他获取方式,本实施例对此不作具体限定。
[0108]802、对单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0109]在本发明实施例中,加载器在获取到如图6所示的映射段后,会根据预设规则对该映射段进行解析,得到映射段包括的各种信息。其中,预设规则可事先进行设置,本实施例对此不作具体限定,仅需保证解析规则与映射段生成规则互为逆运算即可。对映射段进行解析的过程,也即在映射段中提取各种信息的过程。此外,映射段中除包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息外,还可包括其他信息。例如,cache line分布信息、共享内存分布信息等等,本实施例对映射段包括的内容不进行具体限定。
[0110]803、根据核数量信息,确定多核系统的核数量;根据核组配置信息,确定多核系统中多个核的分组情况。
[0111]在本发明实施例中,在根据上述步骤802对映射段进行解析后,便可根据解析到的各种信息获取多核DSP系统的核数量和多级内存的分布信息等等。其中,核数量信息和核组配置信息参见图6第一列最上方框体的内容。由该内容可知,该多核DSP系统中包括6个核,且分别以数字O?5进行标识;其中,核O、核I及核2为一个核组,该核组命名为group I ;核3单独为一个核组,该核组命名为group2 ;核4和核5为一个核组,该核组命名为 group3。
[0112]需要说明的是,本发明实施例之所以要确定多核系统的核数量和多核系统中多个核的分组情况,是为了使加载器能够对多核DSP系统的存储空间设置情况有所了解,以便在后续过程中快速加载单一映像文件。
[0113]804、根据加载段地址索引信息、私有内存段的加载核组信息及私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间。
[0114]在本发明实施例中,由于单一映像文件中仅记录了各个加载段在加载时的实际加载地址,即加载段地址索引信息,所以在将各个加载段加载到对应的内存空间时,为了合理利用各级内存的存储空间,还包括根据加载段地址索引信息、私有内存段的加载核组信息及私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间的步骤。
[0115]其中,加载段地址索引信息如图6中第二列所示的地址0x1000-0x2000、0x3000-0x4000,0x4000-0x5000,0x10000-0x20000等等,私有内存段的虚拟加载地址映射信息指代第一列与第二列之间的由箭头所指示的映射关系或第一列与第三列之间的由箭头所指示的映射关系。
[0116]在确定各个加载段对应的内存空间时,首先根据如图6中第二列的加载段地址索引信息及私有内存段的虚拟加载地址映射信息确定该加载段地址索引信息与第一列中的哪一个框体的内容相对应。在确定对应的框体后,获取该框体中的偏移地址信息;之后,根据该私有内存段的加载核组信息确定将该加载段放入哪几个核的存储空间上。比如,在确定对应的框体后,获取到的偏移地址信息为Ll_groupl:L1.text (0x1000-0x2000),则由于groupl中包括核O、核I及核2,所以将该加载段加载到核O、核I及核2各自的地址为0x1000-0x2000的存储空间上。
[0117]805、对于多个加载段中的每一个加载段,将加载段加载到与加载段对应的内存空间上。
[0118]在本发明实施例中,当确定单一映像文件中各个加载段对应的内存空间后,便可将各个加载段加载到多核DSP系统的内存空间上。之后,可对该单一映像文件进行调试处理或运行处理等等。且由于仅存在单一映像文件,所以在调试过程中仅需加载一份符号表,方便调试,简化了调试过程。而现有技术中,由于一次生成多个映像文件,所以在加载映像文件时,需根据图9所示的方式,对各个映像文件依次进行加载,加载时间长,且加载效率低。进一步地,由于存在L2、L3等共享内存,所以在加载过程中还会存在多个映像文件对应同一加载地址,进而导致共享内存相互冲突或互踩的问题,极为影响加载效率。
[0119]本发明实施例提供的方法,在链接阶段根据多个可重定位文件和一个链接脚本仅生成单一映像文件,不但减轻了编译、汇编及链接过程的工作量,且由于仅维护单一链接脚本,减轻了开发及维护人员的负担;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
[0120]图10是本发明实施例提供的一种映像文件生成方法的流程图。以根据多个链接脚本生成映像文件为例,对本发明实施例提供的映像文件生成方法进行详细地解释说明。参见图10,本实施例提供的方法流程包括:
[0121]1001、在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件。
[0122]在本发明实施例中,源文件可存储在各级内存中,本实施例对此不作具体限定。当用户或程序员编写好源文件后,编译器在对多个源文件进行编译处理后,得到多个后缀名为.s的汇编文件;之后,汇编器对多个后缀名为.s的汇编文件进行汇编处理,得到多个后缀名为.0的可重定位文件。
[0123]需要说明的是,在得到多个可重定位文件后,为了生成单一映像文件,本实施例提供的方法采取二次链接的方式。详细过程参见下述步骤1002至步骤1003。
[0124]1002、在一次链接阶段,根据多个源文件和多个链接脚本,生成多个初始映像文件。
[0125]在得到多个可重定位文件后,根据核组信息对多个源文件进行分类,多少个核组对应多少个链接脚本。根据确定的链接脚本分别对各类源文件进行链接处理,得到多个初始映像文件,完成一次链接过程。
[0126]需要说明的是,在一次链接过程中,使用标准的链接器进行链接,生成多个映像文件,这一过程同图1所示的映像文件生成方式一致,此处不再赘述。
[0127]1003、在二次链接阶段,根据多个初始映像文件和一个链接脚本,生成单一映像文件;单一映像文件中包括映射段;其中,映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0128]在本发明实施例中,为了生成单一映像文件,在得到多个初始映像文件后,还包括根据一个链接脚本对多个初始映像文件进行链接的步骤。在二次连接过程中,可使用一个功能较为简单的段及符号表合并生成链接脚本,根据该链接脚本对多个初始映像文件进行链接,生成单一映像文件。该单一映像文件中包括图6所示的映射段。映射段具体解释说明参见上述步骤503,此处不再赘述。
[0129]参见图11,以初始映像文件为ImageA、ImageB及ImageC为例,贝U在一次链接阶段根据三个不同的链接脚本和可重定位文件a.ο至Z.ο生成ImageA、ImageB及ImageC后,再次选取一个链接脚本,且根据该链接脚本对ImageA、ImageB及ImageC进行二次链接,生成最终的且包括映射段的单一映像文件。
[0130]需要说明的是,在根据上述步骤1001至步骤1003得到单一映像文件后,当需要将单一映像文件加载到单板或者仿真器上运行的时候,也可采取上述步骤801至步骤805的方式,加载该单一映像文件。
[0131]本发明实施例提供的方法,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
[0132]图12是本发明实施例提供的一种映像文件生成装置,参见图12,该装置包括:编译汇编模块1201、链接模块1202。
[0133]其中,编译汇编模块1201,用于在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件;链接模块1202与编译汇编模块1201连接,用于在链接阶段,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件。
[0134]可选地,编译汇编模块,用于在编译阶段,分别为多个源文件添加预设段属性,得到多个中间源文件;对多个中间源文件进行编译,得到多个汇编文件;在汇编阶段,对多个汇编文件进行汇编处理,得到多个可重定位文件。
[0135]可选地,链接模块,用于为链接脚本添加预设字段,得到新的链接脚本;根据多个可重定位文件和新的链接脚本,生成单一映像文件。
[0136]可选地,链接模块,用于在一次链接阶段,根据多个源文件和多个链接脚本,生成多个初始映像文件;在二次链接阶段,根据多个初始映像文件和一个链接脚本,生成单一映像文件。
[0137]可选地,单一映像文件中包括映射段;其中,映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0138]可选地,预设段属性为attribute属性。
[0139]可选地,预设字段为virtual字段。
[0140]可选地,装置还包括:
[0141]获取模块,用于获取单一加载映像文件的映射段;
[0142]解析模块,用于对单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息;
[0143]核数量确定模块,用于根据核数量信息,确定多核系统的核数量;
[0144]核分组确定模块,用于根据核组配置信息,确定多核系统中多个核的分组情况;
[0145]内存空间确定模块,用于根据加载段地址索引信息、私有内存段的加载核组信息及私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间;
[0146]加载模块,用于对于多个加载段中的每一个加载段,将加载段加载到与加载段对应的内存空间上。
[0147]综上,本发明实施例提供的装置,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
[0148]本发明实施例提供了一种映像文件生成设备,该映像文件生成设备包括:编译器、汇编器、链接器及加载器。
[0149]编译器,用于在编译阶段,对多级内存存储的多个源文件进行编译处理,得到多个汇编文件;
[0150]汇编器,用于在汇编阶段,对多级内存存储的多个源文件进行汇编处理,得到多个可重定位文件;
[0151]链接器,用于在链接阶段,根据多个可重定位文件和至少一个链接脚本,生成单一映像文件。
[0152]可选地,编译器具体用于在编译阶段,分别为多个源文件添加预设段属性,得到多个中间源文件;对多个中间源文件进行编译,得到多个汇编文件;
[0153]汇编器,具体用于在汇编阶段,对多个汇编文件进行汇编处理,得到多个可重定位文件。
[0154]可选地,链接器具体用于为链接脚本添加预设字段,得到新的链接脚本;根据多个可重定位文件和新的链接脚本,生成单一映像文件。
[0155]可选地,链接器,具体用于在一次链接阶段,根据多个源文件和多个链接脚本,生成多个初始映像文件;在二次链接阶段,根据多个初始映像文件和一个链接脚本,生成单一映像文件。
[0156]可选地,单一映像文件中包括映射段;其中,映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
[0157]可选地,预设段属性为attribute属性。
[0158]可选地,预设字段为virtual字段。
[0159]加载器,用于获取单一加载映像文件的映射段;对单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息;根据核数量信息,确定多核系统的核数量;根据核组配置信息,确定多核系统中多个核的分组情况;根据加载段地址索引信息、私有内存段的加载核组信息及私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间;对于多个加载段中的每一个加载段,将加载段加载到与加载段对应的内存空间上。
[0160]本发明实施例提供的设备,在链接阶段根据多个可重定位文件和至少一个链接脚本仅生成单一映像文件,减轻了编译、汇编及链接过程的工作量;此外,由于一次仅生一个映像文件,所以后续过程中加载器在加载映像文件时无需分多次加载每个映像文件,而且在加载映像文件时不会出现由于多级内存中存在各个核共享的L3内存及DDR内存,所以存在共享内存多次重复加载的问题,加载速度快、加载效率高。
[0161]需要说明的是:上述实施例提供的映像文件生成装置在生成映像文件时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的映像文件生成装置与映像文件生成方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0162]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0163]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0164]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种映像文件生成方法,其特征在于,所述方法包括: 在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件; 在链接阶段,根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件。
2.根据权利要求1所述的方法,其特征在于,所述在编译及汇编阶段,对多个源文件进行编译处理及汇编处理,得到多个可重定位文件,包括: 在编译阶段,分别为所述多个源文件添加预设段属性,得到多个中间源文件;对所述多个中间源文件进行编译,得到多个汇编文件; 在汇编阶段,对所述多个汇编文件进行汇编处理,得到多个可重定位文件。
3.根据权利要求2所述的方法,其特征在于,所述根据所述多个重定位文件和至少一个链接脚本,生成单一映像文件,包括: 为链接脚本添加预设字段,得到新的链接脚本; 根据所述多个可重定位文件和所述新的链接脚本,生成所述单一映像文件。
4.根据权利要求1所述的方法,其特征在于,所述在链接阶段,根据所述多个可重定位文件和至少一个链接脚本 ,生成单一映像文件,包括: 在一次链接阶段,根据所述多个源文件和多个链接脚本,生成多个初始映像文件; 在二次链接阶段,根据所述多个初始映像文件和一个链接脚本,生成所述单一映像文件。
5.根据权利要求1至4中任一权利要求所述的方法,其特征在于,所述单一映像文件中包括映射段;其中,所述映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
6.根据权利要求2所述的方法,其特征在于,所述预设段属性为属性attribute属性。
7.根据权利要求3所述的方法,其特征在于,所述预设字段为虚拟virtual字段。
8.根据权利要求5所述的方法,其特征在于,所述根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件之后,所述方法还包括: 获取所述单一加载映像文件的映射段; 对所述单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息; 根据所述核数量信息,确定多核系统的核数量; 根据所述核组配置信息,确定所述多核系统中多个核的分组情况; 根据所述加载段地址索引信息、所述私有内存段的加载核组信息及所述私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间; 对于多个加载段中的每一个加载段,将所述加载段加载到与所述加载段对应的内存空间上。
9.一种映像文件生成装置,其特征在于,所述装置包括: 编译汇编模块,用于在编译及汇编阶段,对多级内存存储的多个源文件依次进行编译处理及汇编处理,得到多个可重定位文件; 链接模块,用于在链接阶段,根据所述多个可重定位文件和至少一个链接脚本,生成单一映像文件。
10.根据权利要求9所述的装置,其特征在于,所述编译汇编模块,用于在编译阶段,分别为所述多个源文件添加预设段属性,得到多个中间源文件;对所述多个中间源文件进行编译,得到多个汇编文件;在汇编阶段,对所述多个汇编文件进行汇编处理,得到多个可重定位文件。
11.根据权利要求10所述的装置,其特征在于,所述链接模块,用于为链接脚本添加预设字段,得到新的链接脚本;根据所述多个可重定位文件和所述新的链接脚本,生成所述单一映像文件。
12.根据权利要求9所述的装置,其特征在于,所述链接模块,用于在一次链接阶段,根据所述多个源文件和多个链接脚本,生成多个初始映像文件;在二次链接阶段,根据所述多个初始映像文件和一个链接脚本,生成所述单一映像文件。
13.根据权利要求9至12中任一权利要求所述的装置,其特征在于,所述单一映像文件中包括映射段;其中,所述映射段至少包括核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息。
14.根据权利要求10所述的装置,其特征在于,所述预设段属性为属性attribute属性。
15.根据权利要求11所述的装置,其特征在于,所述预设字段为虚拟virtual字段。
16.根据权利要求13所述的装置,其特征在于,所述装置还包括: 获取模块,用于获取所述单一加载映像文件的映射段; 解析模块,用于对所述单一映像文件的映射段进行解析,得到核数量信息、核组配置信息、加载段地址索引信息、私有内存段的加载核组信息、私有内存段的虚拟加载地址映射信息; 核数量确定模块,用于根据所述核数量信息,确定多核系统的核数量; 核分组确定模块,用于根据所述核组配置信息,确定所述多核系统中多个核的分组情况; 内存空间确定模块,用于根据所述加载段地址索引信息、所述私有内存段的加载核组信息及所述私有内存段的虚拟加载地址映射信息,确定多个加载段对应的内存空间; 加载模块,用于对于多个加载段中的每一个加载段,将所述加载段加载到与所述加载段对应的内存空间上。
【文档编号】G06F9/45GK103995726SQ201410178002
【公开日】2014年8月20日 申请日期:2014年4月28日 优先权日:2014年4月28日
【发明者】魏伟, 肖春鹏, 曾建江 申请人:华为技术有限公司

【专利交易】【专利代理】【商标和版权申请】【高新技术企业认定】Tel:18215660330

最新回复(0)