System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 鸿蒙系统的链接脚本自搬移解压的方法及装置制造方法及图纸_技高网

鸿蒙系统的链接脚本自搬移解压的方法及装置制造方法及图纸

技术编号:44498133 阅读:5 留言:0更新日期:2025-03-04 18:06
本申请公开了一种鸿蒙系统的链接脚本自搬移解压的方法。在链接脚本文件中为需要搬移的段指定加载内存地址为容量足够且运行效率最高的内存空间;根据链接脚本对每个应用程序的每个段进行内存布局的规则创建一张全局列表。鸿蒙系统中实现一个自搬移和自解压程序。鸿蒙系统在向嵌入式设备的内存空间加载每个应用程序的每个段时,先在预先加载进内存的所述全局列表中查询该段。本申请可以更加灵活地对应用程序的不同段所加载的内存空间进行合理分配,有利于提升应用程序的运行效率。

【技术实现步骤摘要】

本申请涉及一种嵌入式系统(embedded system),尤其涉及一种鸿蒙系统中通过链接脚本自搬移解压的方法。


技术介绍

1、嵌入式系统在开发时,通常是将启动加载器(bootloader)、系统内核(kernel)、文件系统、应用程序独立开发的,前三者都属于操作系统。开发完成后将以上各部分整合在一起制作成系统镜像文件,系统镜像文件被烧写到嵌入式设备的非易失性存储器——例如闪存(flash)中。嵌入式设备上电后,在启动阶段会将操作系统的代码从非易失性存储器加载到内存中运行。需要运行某个应用程序时,嵌入式系统将该应用程序从非易失性存储器加载进内存运行,或者在非易失性存储器中以xip(execute in place,就地执行)方式执行。

2、通常情况下,嵌入式设备有多个内存空间可以运行应用程序的代码,例如itcm(instruction tightly-coupled memory,指令紧耦合存储器)、sram(static random-access memory,静态随机存储器)、psram(pseudo static random access memory,伪静态随机存储器)等。代码的运行效率是itcm>sram>psram,而内存空间的容量大小则是psram>sram>itcm。尤其是itcm的空间很小,仅能容纳少量代码。

3、嵌入式系统的开发设计使用编译器(compiler)、链接器(linker)和调试器(debugger)。链接器是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库,链接为一个可执行文件。链接器可以简单地理解为将一个或多个输入文件(目标文件)合并为一个输出文件(可执行文件)。链接器通常使用一个链接脚本(linker script)。链接脚本描述如何将输入文件中的各个段(section)放到输出文件中,并控制输出文件中各个段在内存中的布局。有时将输入文件的段称作输入段,将输出文件的段称作输出段。

4、一个段可以被标记为可加载(loadable),这意味着在运行输出文件时该段内容需要先加载到内存中。一个没有内容的段是可分配的,这意味着应该在内存中预留一个区域,但是这里不需要加载任何东西(在某些情况下,该内存必须清零)。既不可装载也不可分配的部分通常包含某种调试信息。

5、每个可加载或可分配的输出段都有两个地址。第一个是vma(virtual memoryarea,虚拟内存地址),第二个是lma(load memory address,加载内存地址)。虚拟内存地址就是链接地址(link address)。在编译程序时,每个目标文件都是由源代码编译得到的,最终多个目标文件链接生成一个可执行文件。链接地址指示各个目标文件在可执行程序中的位置。例如,一个可执行程序(输出文件)a.out由三个目标文件(输入文件)a1.0、a2.o、a3.o组成,那么在输出文件中各个输入文件的先后顺序就是由链接地址决定的。加载地址指示可执行文件(应用程序)的各个段加载到内存中运行的地址。在大多数情况下,每个段的链接地址和加载地址是相同的,当然它们也可能不同。

6、鸿蒙系统的应用程序启动的常规流程是通过引导程序加载应用程序,将应用程序从非易失性存储器读入到内存运行、或者在非易失性存储器中以xip方式运行。应用程序中执行的第一条指令称为入口点(entry point)。鸿蒙系统加载应用程序后,进入应用程序的入口点。这样的运行方式限定了一个应用程序必须全部运行在同一块内存空间中。当某个应用程序的代码量比较大时,其通常运行在容量大但运行效率相对较低的内存空间——例如psram中,这样会造成该应用程序的代码运行效率低下,尤其是对于一些需要频繁调用的模块或者一些需要提高运行效率的模块会有很大的负面影响。


技术实现思路

1、本申请所要解决的技术问题是如何使鸿蒙系统的链接脚本支持自搬移解压,以提高鸿蒙系统中应用程序的运行效率。

2、为解决上述技术问题,本申请提出了一种鸿蒙系统的链接脚本自搬移解压的方法,包括如下步骤。步骤s1:在生成嵌入式设备的系统镜像文件时,对至少部分应用程序的部分段进行数据压缩以减少体积。步骤s2:将“需要提升运行效率的应用程序的段”称为需要搬移的段,在链接脚本文件中为需要搬移的段指定加载内存地址为容量足够且运行效率最高的内存空间;根据链接脚本对每个应用程序的每个段进行内存布局的规则创建一张全局列表;所述全局列表保存了链接脚本里记录的需要搬移的段的源地址、目的地址、源数据大小、目的数据大小,还保存了链接脚本里记录的需要清零的段;需要清零的段的目的数据大小为0。步骤s3:鸿蒙系统中实现一个自搬移和自解压程序。步骤s4:鸿蒙系统在向嵌入式设备的内存空间加载每个应用程序的每个段时,先在预先加载进内存的所述全局列表中查询该段。如果在所述全局列表中记录的该段的目的数据大小为0,将该段数据清零。如果在所述全局列表中记录的该段的源数据大小与目的数据大小相同,将该段从所述全局列表中记录的该段的源地址复制到该段的目的地址。如果在所述全局列表中记录的该段的源数据大小与目的数据大小不同,先从所述全局列表中记录的该段的源地址读取该段数据,再调用所述自搬移和自解压程序对所读取的该段数据进行解压缩,然后将解压缩后的该段数据写到所述全局列表中记录的该段的目的地址。

3、进一步地,所述步骤s1中,所述段包括代码段、数据段、bss段、只读数据段的任意一种或多种。

4、进一步地,所述步骤s2中,嵌入式设备有多个用于运行应用程序的内存空间,按照代码的运行效率由高到低排序是指令紧耦合存储器itcm>静态随机存储器sram>伪静态随机存储器psram;按照内存空间的容量由大到小排序是psram>sram>itcm。

5、进一步地,所述步骤s2中,链接脚本中为每个段指定虚拟内存地址vma,还为某个段通过at关键字指定加载内存地址lma;如果链接脚本没有为某个段通过at关键字指定lma,链接器默认该段的lma等同于vma。

6、进一步地,所述步骤s2中,所述需要搬移的段是指链接脚本里由at关键字指定的lma与vma不一致的段。

7、进一步地,所述步骤s2中,所述需要清零的段是指加载到内存时会被清零的段或者不加载进内存的段。

8、进一步地,所述步骤s3中,所述自搬移和自解压程序放在鸿蒙系统的最开始的启动位置,不能被搬移和解压缩,用来对需要搬移的段进行自搬移和自解压处理。

9、进一步地,所述步骤s4中,如果在所述全局列表中记录的该段的目的数据大小为0,表明该段是需要清零的段。如果在所述全局列表中记录的该段的源数据大小与目的数据大小相同,表明该段是需要搬移的段、且该段数据未被压缩。如果在所述全局列表中记录的该段的源数据大小与目的数据大小不同,表明该段是需要搬移的段、且该段数据被压缩。

10、本申请还提出了一种鸿蒙系统的链接脚本自搬移解压的装置,包括压缩单元、设置与创建单元、实现单元、查本文档来自技高网...

【技术保护点】

1.一种鸿蒙系统的链接脚本自搬移解压的方法,其特征是,包括如下步骤;

2.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S1中,所述段包括代码段、数据段、BSS段、只读数据段的任意一种或多种。

3.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S2中,嵌入式设备有多个用于运行应用程序的内存空间,按照代码的运行效率由高到低排序是指令紧耦合存储器ITCM>静态随机存储器SRAM>伪静态随机存储器PSRAM;按照内存空间的容量由大到小排序是PSRAM>SRAM>ITCM。

4.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S2中,链接脚本中为每个段指定虚拟内存地址VMA,还为某个段通过AT关键字指定加载内存地址LMA;如果链接脚本没有为某个段通过AT关键字指定LMA,链接器默认该段的LMA等同于VMA。

5.根据权利要求4所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S2中,所述需要搬移的段是指链接脚本里由AT关键字指定的LMA与VMA不一致的段。

6.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S2中,所述需要清零的段是指加载到内存时会被清零的段或者不加载进内存的段。

7.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S3中,所述自搬移和自解压程序放在鸿蒙系统的最开始的启动位置,不能被搬移和解压缩,用来对需要搬移的段进行自搬移和自解压处理。

8.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤S4中,如果在所述全局列表中记录的该段的目的数据大小为0,表明该段是需要清零的段;

9.一种鸿蒙系统的链接脚本自搬移解压的装置,其特征是,包括压缩单元、设置与创建单元、实现单元、查询与处理单元;

...

【技术特征摘要】

1.一种鸿蒙系统的链接脚本自搬移解压的方法,其特征是,包括如下步骤;

2.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤s1中,所述段包括代码段、数据段、bss段、只读数据段的任意一种或多种。

3.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤s2中,嵌入式设备有多个用于运行应用程序的内存空间,按照代码的运行效率由高到低排序是指令紧耦合存储器itcm>静态随机存储器sram>伪静态随机存储器psram;按照内存空间的容量由大到小排序是psram>sram>itcm。

4.根据权利要求1所述的鸿蒙系统的链接脚本自搬移解压的方法,其特征是,所述步骤s2中,链接脚本中为每个段指定虚拟内存地址vma,还为某个段通过at关键字指定加载内存地址lma;如果链接脚本没有为某个段通过at关键字指定lma,链接器默认该段的lma等同于vma。

...

【专利技术属性】
技术研发人员:胡文黄金华龙云腾
申请(专利权)人:翱捷科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1