CN114443174A - 代码加载方法、代码加载装置、存储介质与电子设备 - Google Patents
代码加载方法、代码加载装置、存储介质与电子设备 Download PDFInfo
- Publication number
- CN114443174A CN114443174A CN202210148228.XA CN202210148228A CN114443174A CN 114443174 A CN114443174 A CN 114443174A CN 202210148228 A CN202210148228 A CN 202210148228A CN 114443174 A CN114443174 A CN 114443174A
- Authority
- CN
- China
- Prior art keywords
- code
- memory
- loading
- symbol
- target code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 88
- 230000015654 memory Effects 0.000 claims abstract description 157
- 238000000034 method Methods 0.000 claims abstract description 34
- 230000003068 static effect Effects 0.000 claims abstract description 20
- 230000006870 function Effects 0.000 claims description 26
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 11
- 238000013473 artificial intelligence Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000010295 mobile communication Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000001939 inductive effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供一种代码加载方法、代码加载装置、计算机可读存储介质与电子设备,涉及计算机技术领域。所述代码加载方法包括:将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息;基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,以通过所述传感器控制器运行所述第二内存中的所述目标代码,所述第二内存为所述传感器控制器对应的静态随机存取存储器。本公开提高了代码加载的效率,且进一步降低了代码加载过程的功耗。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种代码加载方法、代码加载装置、计算机可读存储介质与电子设备。
背景技术
随着AI(Artificial Intelligence,人工智能)技术的迅速发展,为了满足用户在自动驾驶、卫星导航、智能家居等多种应用场景下的需求,终端设备中通常会配置多元化的AI算法。为了降低功耗,这些算法一般会部署在低功耗的计算单元中,如SensorHub(通用智能传感集线器)或MCU(Microcontroller Unit,微控制单元)中。然而,现有技术却难以保证在有限的低功耗的计算单元中运行多样化算法的同时,进一步降低功耗,以高效执行代码。
发明内容
本公开提供了一种代码加载方法、代码加载装置、计算机可读存储介质与电子设备,进而至少在一定程度上改善现有技术无法在有限的低功耗的计算单元中运行多样化算法的同时,进一步降低功耗的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种代码加载方法,包括:将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息;基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,以通过所述传感器控制器运行所述第二内存中的所述目标代码,所述第二内存为所述传感器控制器对应的静态随机存取存储器。
根据本公开的第二方面,提供一种代码加载装置,包括:代码解析模块,用于将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息;代码运行模块,用于基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,以通过所述传感器控制器运行所述第二内存中的所述目标代码,所述第二内存为所述传感器控制器对应的静态随机存取存储器。
根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面的代码加载方法及其可能的实现方式。
根据本公开的第四方面,提供一种电子设备,包括:处理器;存储器,用于存储所述处理器的可执行指令。其中,所述处理器配置为经由执行所述可执行指令,来执行上述第一方面的代码加载方法及其可能的实现方式。
本公开的技术方案具有以下有益效果:
将目标代码加载至主处理器对应的第一内存并进行解析,得到目标代码的结构信息;基于结构信息将目标代码加载至传感器控制器对应的第二内存,以通过传感器控制器运行第二内存中的目标代码,第二内存为传感器控制器对应的静态随机存取存储器。一方面,本示例性实施例提出一种新的代码加载方法,将目标代码的结构信息从主处理器对应的第一内存,加载至传感器控制器对应的第二内存,通过传感器控制器运行目标代码,能够充分利用传感器控制器对应的静态随机存取存储器的特性,保证目标代码加载过程的高效性,且能够极大的降低代码加载过程的功耗;另一方面,基于本示例性实施例可以实现多种目标代码在传感器控制器中的动态加载过程,从而能够在传感器控制器中部署更多的算法代码,适用于多种应用场景。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本示例性实施方式中一种代码加载方法的流程图;
图2示出本示例性实施方式中一种ELF文件的结构视图;
图3示出本示例性实施方式中一种代码加载方法的子流程图;
图4示出本示例性实施方式中一种代码加载方法的另一子流程图;
图5示出本示例性实施方式中另一种代码加载方法的架构示意图;
图6示出本示例性实施方式中一种代码加载装置的结构框图;
图7示出本示例性实施方式中一种电子设备的结构图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
本公开的示例性实施例方式的应用场景可以包括:当用户具有定位、轨迹估计、摄像、情景感知等多种需求时,可以在传感器控制器中的静态随机存取存储器中依次执行不同的算法代码,以通过静态随机存取存储器高效、低功耗的实现不同算法对应的功能。
图1示出了代码加载方法的示例性流程,包括以下步骤S110至S120:
步骤S110,将目标代码加载至主处理器对应的第一内存并进行解析,得到目标代码的结构信息。
其中,目标代码是指运行目标任务所需的代码,例如在PDR(Pedestrian DeadReckoning,步行者航位推算)、情景感知等应用场景下,当执行行走轨迹、位置信息的预测或估计任务时,所需要执行的相关算法的代码即可以作为目标代码等。主处理器可以是电子设备中用于执行主要数据处理的处理器,例如其可以是运行电子设备的操作系统的处理器,主处理器可以包括一个或多个处理单元,如AP(Application Processor,应用处理器)、调制解调处理器、GPU(Graphics Processing Unit,图形处理器)等。在一种实施方式中,主处理器可以集成于SoC(System on Chip,系统级芯片)上。主处理器通常可以有对应的内存,用于存取数据,例如RAM(Random Access Memory,随机存取存储器),该内存即为第一内存。
本示例性实施例在需要运行某些算法或程序时,可以先将算法或程序对应的目标代码加载至主处理器对应的第一内存中,然后,对目标代码进行解析,生成目标代码的结构信息。其中,该结构信息为将目标代码以特定数据类型表示的结构型数据,如结构体。举例说明,AI(Artificial Intelligence,人工智能)模型在训练完成后,可以先使用特定的编译工具将AI模型的算法转换为目标代码,如Module.elf文件,存放在手机设备的应用处理器对应的存储空间中,当需要运行AI算法时,可以将AI算法对应的目标代码加载至第一内存,如手机设备应用处理器对应的RAM中,并对其进行解析,生成结构信息,如生成load_info结构体。
步骤S120,基于结构信息将目标代码加载至传感器控制器对应的第二内存,以通过传感器控制器运行第二内存中的目标代码,第二内存为传感器控制器对应的静态随机存取存储器。
传感器控制器用于对传感器进行控制及数据处理。传感器控制器可用于控制单个传感器,如可以是某个传感器的MCU(Microcontroller Unit,微控制单元),也可用于控制多个传感器,如可以是集成于SensorHub(通用智能传感集线器)的处理器。传感器控制器对应的第二内存可以是SRAM(Static Random Access Memory,静态随机存取存储器)。
在本示例性实施例中,结构信息可以通过共享内存的方式传递至传感器控制器,传感器控制器可以在获取结构信息后,可以将结构信息中所包括的信息加载至传感器控制器对应的第二内存中,例如可以将结构体中的代码段、只读数据段、数据段以及未初始化数据段等内容加载到SensorHub的处理器对应的SRAM中的合适位置,并通过传感器控制器运行第二内存中的目标代码。当目标代码运行结束时,传感器控制器还可以将目标代码从第二内存中删除,以保证其他代码在传感器控制器中的运行需求。
在本示例性实施例中,目标代码可以是多个,即可以将多个目标代码加载至主处理器对应的第一内存并进行解析,得到多个目标代码的结构信息,并依次将多个目标代码加载至传感器控制器对应的第二内存中。例如当需要运行多个AI算法时,可以将多个AI算法的ELF文件加载至AP对应的RAM中,并生成多个AI算法对应的结构体,进一步,根据预设加载顺序,在不同时间,将每个AI算法的结构体,分别加载至传感器控制器对应的SRAM中,以使不同的AI算法能够轮番加载在SRAM中的相同内存中,执行各AI算法,从而实现了在有限的SRAM空间中,部署多种AI算法,提高算法执行效率,降低功耗的效果。其中,加载顺序可以通过多种方式确定,例如可以根据不同AI算法的大小确定,将占用量较小的设置较高的优先级,或者根据不同AI算法的重要性确定,将重要性高的设置较高的优先级,再或者根据用户使用频率确定,将使用频率高的设置较高的优先级,还可以根据触发AI算法执行的时间确定等等,本公开对此不做具体限定。
另外,在一示例性实施例中,为了保证第二内存中对目标代码正常加载的同时,还能够有效执行其他任务,本示例性实施例可以利用c++的placement new特性,即在用户指定的内存位置上构建新的对象的特性,在第二内存中一次性申请一部分静态常驻内存。然后,基于该常驻内存,进行多个目标代码的加载和释放,多个目标代码的内存的申请和回收以及内存碎片的合并,可以利用C++的placement new特性由编译器和操作系统完成,无需额外的手动管理工作,能够实现对第二内存的有效管理,以及多个目标代码的高效加载与运行。
综上,本示例性实施方式中,将目标代码加载至主处理器对应的第一内存并进行解析,得到目标代码的结构信息;基于结构信息将目标代码加载至传感器控制器对应的第二内存,以通过传感器控制器运行第二内存中的目标代码,第二内存为传感器控制器对应的静态随机存取存储器。一方面,本示例性实施例提出一种新的代码加载方法,将目标代码的结构信息从主处理器对应的第一内存,加载至传感器控制器对应的第二内存,通过传感器控制器运行目标代码,能够充分利用传感器控制器对应的静态随机存取存储器的特性,保证目标代码加载过程的高效性,且能够极大的降低代码加载过程的功耗;另一方面,基于本示例性实施例可以实现多种目标代码在传感器控制器中的动态加载过程,从而能够在传感器控制器中部署更多的算法代码,适用于多种应用场景。
在一示例性实施例中,上述目标代码的结构信息可以包括目标代码的各子代码段在目标代码的可执行与可链接格式ELF文件中的偏移位置;上述步骤S110,可以包括:
将目标代码的ELF文件加载至第一内存,并解析ELF文件的头信息,得到各子代码段的地址信息。
其中,ELF(Executable and Linkable Format,可执行与可链接格式)文件是一种用于二进制文件、可执行文件、目标文件(.o)、共享库(.so)和核心转储格式的文件。图2示出了一种链接视图下的ELF文件格式,其中,分别包括ELF头部(ELF header)210、节区(Section)220以及节区头部表(Section header table)230三个部分,节区是从链接的角度来具体描述ELF文件,节区头部表用于描述文件节区在进程内存中的信息,比如起始位置、偏移或大小等信息,ELF头部作为ELF的文件头,用于描述整个ELF文件的组织,可以包括节区头部表在文件中的偏移位置和大小。
在本示例性实施例中,待运行的算法可以先使用交叉编译工具链生成传感器控制器支持的目标代码的文件,例如使用SensorHub平台的交叉编译工具链生成ELF文件,存放在手机设备的文件系统中。然后,将目标代码的ELF文件加载至主处理器对应的第一内存并进行解析,得到目标代码的load_info结构体,具体可以通过linux内核中copy_module_from_fd函数实现,load_info结构体定义如下:
具体的,本示例性实施例可以通过解析ELF文件的头部信息,确定运行算法所需的各子代码段在ELF文件中的偏移位置。其中,子代码段是指目标代码中划分的不同数据区域,其可以是数据段,也可以是代码段,例如子代码段可以是代码段(.text)、只读数据段(.rodata)、数据段(.data)以及未初始化数据段(.bss)等。例如SensorHub的处理器在获取load_info结构体后,可以从其中ELF文件的头部信息获取到节区头部字符串表的索引,根据索引,分别查找到代码段(.text)、只读数据段(.rodata)、数据段(.data)以及未初始化数据段(.bss)对应的偏移位置。
进一步的,在一示例性实施例中,上述步骤S120可以包括以下步骤:
基于各子代码段在ELF文件中的偏移位置以及在第二内存中为目标代码分配的内存空间的首地址,确定各子代码段在第二内存中的指定地址;
将各子代码段加载至其在第二内存中的指定地址。
本示例性实施例可以通过静态任务创建的方式加载目标代码,从静态区为目标代码分配首地址。然后,基于各子代码段在ELF文件中的偏移位置以及在第二内存中为目标代码分配的内存空间的首地址,可以得到每个子代码段在第二内存中的指定地址,即每个子代码段的的指定位置可以为目标代码分配的内存空间的首地址加上子代码段在ELF文件中的偏移位置,该指定位置即为每个子代码段实际运行时在第二内存中的地址。然后,可以将各子代码段加载至其在第二内存中的指定地址,也就是将各子代码段拷贝到实际运行时的内存地址中。
在一示例性实施例中,上述目标代码的结构信息还可以包括各子代码段的大小;则上述步骤S120,还可以包括:
根据各子代码段的大小以及目标代码对应的目标任务的相关信息的大小,确定目标代码在第二内存中的占用量,并按照占用量在第二内存中为目标代码分配内存空间。
其中,对应的目标任务的相关信息可以包括任务控制块(Task Control Block)和任务栈(Task Stack)。本示例性实施例还可以在结构体的ELF文件的头部信息中查找目标代码中各子代码段的大小,进一步,根据各子代码段的大小加上任务控制块和任务栈的大小,来确定加载目标代码所需要的内存空间,即目标代码在第二内存中的占用量。最后,可以按照该占用量在第二内存中为目标代码分配内存空间,然后,将各子代码段加载至指定地址中。
另外,需要说明的是,在将各子代码段加载至指定地址之后,本示例性实施例还可以将未初始化数据段(.bss)所占的内存空间清零,然后初始化任务控制块,并在任务控制块中添加相应的字段来存储各子代码段的地址。
图3示出了本示例性实施例中,将各子代码段加载至其在第二内存中的指定地址的示意图,可以包括以下步骤:
步骤S310,从结构体311中的ELF文件的头部信息312获取节区头部字符串表的索引,并根据索引查找代码段(.text)313、只读数据段(.rodata)314、数据段(.data)315以及未初始化数据段(.bss)316对应的偏移位置和大小;
步骤S320,基于各子代码段在ELF文件中的偏移位置和大小以及在第二内存中为目标代码分配的内存空间的首地址,确定各子代码段在第二内存中的指定地址;
步骤S330,将各子代码段加载至其在第二内存中的指定地址;
步骤S340,在任务控制块341中添加相应的字段存储各子代码段的地址信息342。
其中,地址信息342中,TextType*pText表示指向代码段的地址;TextType*pRodata表示指向只读数据段的地址;TextType*pData表示指向数据段的地址;TextType*pBss表示指向未初始化数据段的地址。
在一示例性实施例中,在基于结构信息将目标代码加载至传感器控制器对应的第二内存后,上述代码加载方法还可以包括:
对目标代码中的符号进行重定位,并根据重定位后的符号的地址对目标代码中关于符号的引用信息进行修改。
其中,符号是指目标代码所包含的函数、变量等信息。为了避免静态链接时的符号引用与动态加载时实际符号地址不一致的问题,确保加载的目标代码能够正常运行,本示例性实施例在基于接收信息将目标代码加载至传感器控制器对应的第二内存后,可以对目标代码中的符号进行重定位,以将程序的逻辑地址空间变换成内存中的实际物理地址空间。具体的,可以根据需要,对目标代码中的部分或全部符号进行重定位,例如当目标代码为ELF文件时,其中可以包括多种子代码段,本示例性实施例可以根据需要,仅对ELF文件中的代码段、只读数据段(.rodata)、数据段(.data)以及未初始化数据段(.bss)进行符号重定位,根据不同的符号类型,执行不同的符号重定位工作,并根据重定位后的符号的地址对目标代码中关于符号的引用信息进行修改。
在一示例性实施例中,上述目标代码中的符号包括内部符号,该内部符号是指在目标代码中进行定义的符号;则对目标代码中的符号进行重定位,可以包括:
获取各子代码段中的内部符号的偏移位置,并根据内部符号的偏移位置确定内部符号在第二内存中的地址。
其中,内部符号即非SHN_UNDEF类型的符号,在重定位内部符号时,本示例性实施例可以获取各子代码段中内部符号在ELF文件的节区中的偏移位置,然后,根据内部符号的偏移位置,确定其在第二内存中的地址,即内部符号在第二内存中的实际地址可以是:Mh+st_value,其中,Mh表示目标代码的首地址,st_value表示内部符号的偏移位置。
在一示例性实施例中,上述目标代码中的符号包括外部符号,该外部符号是在目标代码中未定义的符号;则对目标代码中的符号进行重定位,可以包括:
在预先配置的符号表中查找外部符号的绝对地址,根据绝对地址确定外部符号在第二内存中的地址。
其中,外部符号是指SHN_UNDEF类型的在目标代码中未进行定义的特殊符号。在实际应用中,每个目标代码都可以具有一个相应的符号表,用于在链接过程中对符号进行管理,符号表中记录了目标代码中所涉及的所有符号,每个符号对应一个符号值,对于变量和函数来说,符号值即为符号的地址,通常,可以使用readelf或nm等命令查看符号。本示例性实施例可以预先配置一符号表,用于存储外部符号的绝对地址,例如符号表可以是目标任务所属的内核的符号表。在对外部符号进行重定位时,需要在预先配置的内核的符号表中查找对应外部符号的绝对地址,如果查找到外部符号的绝对地址,则可以根据该绝对地址对外部符号进行重定位;如果在内核的符号表中未能查找到对应外部符号的绝对地址,则可以报错并执行中止加载过程的指令。
具体的,图4示出了一种对目标代码中的符号进行重定位的流程示意图,具体可以包括以下步骤:
步骤S410,遍历符号表中的每一个待重定位的符号;
步骤S420,判断当前待重定位的符号是否属于四个子代码段,其中,四个子代码段包括代码段、只读数据段(.rodata)、数据段(.data)以及未初始化数据段(.bss);
如果当前待重定位的符号属于四个子代码段,则执行
步骤S430,判断当前待重定位的符号是否为外部符号;
如果当前待重定位的符号为内部符号,则执行
步骤S440,将当前待重定位的符号的符号地址修改为Mh+st_value,Mh表示目标代码的首地址,st_value表示内部符号的偏移位置;
如果当前待重定位的符号为外部符号,则执行
步骤S450,判断当前待重定位的符号是否能够在预先配置的符号表中查找到;
如果能够在预先配置的符号表中查找到,则执行
步骤S460,将当前待重定位的符号的符号地址修改为预先配置的符号表中的绝对地址;
如果不能在预先配置的符号表中查找到,则执行
步骤S470,终止加载目标代码并报错。
最后将修改后的符号地址应用到各个子代码段,即完成了对目标代码中的符号进行重定位的过程。
本示例性实施例可以根据符号重定位结果,对已加载到第二内存中的各个子代码段的数据进行修改,将其中包括的符号引用修改指向正确的地址。以ARM(处理器)为例进行具体说明,遍历4个节区对应的重定向表rel,通过rel->r_info指令来得到符号在符号表中的索引,然后从符号表中找到对应符号,根据重定向节区的sh_info找到目标节区,然后根据rel->r_offset指令找到目标符号的运行地址存放处,然后根据不同的重定向类型修改该地址值。具体可以参考linux内核中apply_relocate函数的实现。
在一示例性实施例中,在基于结构信息将目标代码加载至传感器控制器对应的第二内存后,上述代码加载方法,还可以包括:
基于结构信息确定目标代码的入口函数的偏移位置,并根据入口函数的偏移位置确定入口函数在第二内存中的地址。
本示例性实施例可以从结构信息中确定目标代码的入口函数的偏移位置,例如从结构体的ELF头部信息中确定目标代码的入口函数相对于目标代码的偏移位置。进一步,根据该偏移位置确定入口函数在第二内存中的地址,即入口函数在第二内存中的绝对地址可以表示为:目标代码的加载地址+入口函数的偏移位置。在任务创建时,将任务的入口地址设置为目标代码的绝对入口地址,即可实现目标代码的运行。
在一示例性实施例中,上述代码加载方法还可以包括:
在通过传感器控制器运行第二内存中的目标代码结束后,从第二内存中释放目标代码所占用的内存空间。
在本示例性实施例中,当执行完成相关算法的目标代码之后,为了保证其他算法代码能够在第二内存中正常执行,本示例性实施例还可以从第二内存中释放目标代码所占用的内存空间。具体的,可以是当需要卸载目标代码时,可以将对应的任务从实时操作系统的待运行任务队列和事件队列中删除,并将其插入到待删除任务队列中。然后在空闲任务中,如果发现待删除任务队列中有待删除的任务存在,则释放该任务的地址空间。
图5示出了本示例性实施例中另一种代码加载方法的架构示意图,具体可以包括:在多个AI模型训练完成后,使用编译工具将多个算法,如算法1 511、算法2 512、算法3 513等,分别转换成SensorHub中的多个目标代码的ELF文件514,如Module.elf;然后,存放在手机的AP侧510的存储空间中;当需要使用某一算法,或者某几个算法时,可以将待执行算法对应的目标代码的ELF文件514的内容解析到第一内存515,即AP侧的内存,生成load_info结构体516,然后通过共享内存的方式将load_info结构体516传递至SensorHub 520;SensorHub 520在获取load_info结构体516时,将其中的代码段、只读数据段、数据段以及未初始化数据段加载到第二内存SRAM 521中的合适位置,并初始化任务的相关结构,根据加载的目标代码执行创建静态任务522,启动并运行该任务;进一步,执行符号的重定位,将各段中的符号地址修改为实际运行的地址;最后,设定任务的入口地址,以任务运行的方式加载目标代码;在需要卸载目标代码时,执行删除静态任务523。
本公开的示例性实施方式还提供一种代码加载装置。如图6所示,该代码加载装置600可以包括:代码解析模块610,用于将目标代码加载至主处理器对应的第一内存并进行解析,得到目标代码的结构信息;代码运行模块620,用于基于结构信息将目标代码加载至传感器控制器对应的第二内存,以通过传感器控制器运行第二内存中的目标代码,第二内存为传感器控制器对应的静态随机存取存储器。
在一示例性实施例中,目标代码的结构信息包括目标代码的各子代码段在目标代码的可执行与可链接格式ELF文件中的偏移位置;代码解析模块包括:偏移位置确定单元,用于将目标代码的ELF文件加载至第一内存,并解析ELF文件的头信息,得到各子代码段在ELF文件中的偏移位置。
在一示例性实施例中,代码运行模块包括:子代码段加载单元,用于基于各子代码段在ELF文件中的偏移位置以及在第二内存中为目标代码分配的内存空间的首地址,确定各子代码段在第二内存中的指定地址;以及将各子代码段加载至其在第二内存中的指定地址。
在一示例性实施例中,目标代码的结构信息还包括各子代码段的大小;代码运行模块包括:内存空间分配单元,用于根据各子代码段的大小以及目标代码对应的目标任务的相关信息的大小,确定目标代码在第二内存中的占用量,并按照占用量在第二内存中为目标代码分配内存空间。
在一示例性实施例中,代码加载装置还包括:重定位模块,用于对目标代码中的符号进行重定位,并根据重定位后的符号的地址对目标代码中关于符号的引用信息进行修改。
在一示例性实施例中,目标代码中的符号包括内部符号,内部符号是在目标代码中进行定义的符号;重定位模块包括:第一重定位单元,用于获取各子代码段中的内部符号的偏移位置,并根据内部符号的偏移位置确定内部符号在第二内存中的地址。
在一示例性实施例中,目标代码中的符号包括外部符号,外部符号是在目标代码中未定义的符号;重定位模块包括:第二重定位单元,用于在预先配置的符号表中查找外部符号的绝对地址,根据绝对地址确定外部符号在第二内存中的地址。
在一示例性实施例中,代码加载装置还包括:入口函数地址确定模块,用于在基于结构信息将目标代码加载至传感器控制器对应的第二内存后,基于结构信息确定目标代码的入口函数的偏移位置,并根据入口函数的偏移位置确定入口函数在第二内存中的地址。
在一示例性实施例中,代码加载装置还包括:内存释放模块,用于在通过传感器控制器运行第二内存中的目标代码结束后,从第二内存中释放目标代码所占用的内存空间。
上述装置中各部分的具体细节在方法部分实施方式中已经详细说明,因而不再赘述。
本公开的示例性实施方式还提供了一种计算机可读存储介质,可以实现为程序产品的形式,包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤,例如可以执行图1、图3或图4中任意一个或多个步骤。该程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本公开的示例性实施方式还提供一种电子设备。该电子设备可以是上述终端或服务器。一般的,该电子设备可以包括处理器与存储器,存储器用于存储处理器的可执行指令,处理器配置为经由执行可执行指令来执行上述代码加载方法。
下面以图7中的移动终端700为例,对该电子设备的构造进行示例性说明。本领域技术人员应当理解,除了特别用于移动目的的部件之外,图7中的构造也能够应用于固定类型的设备。
如图7所示,移动终端700具体可以包括:处理器701、存储器702、总线703、移动通信模块704、天线1、无线通信模块705、天线2、显示屏706、摄像模块707、音频模块708、电源模块709与传感器模块710。
处理器701可以包括一个或多个处理单元,例如:处理器701可以包括AP(Application Processor,应用处理器)、调制解调处理器、GPU(Graphics ProcessingUnit,图形处理器)、ISP(Image Signal Processor,图像信号处理器)、控制器、编码器、解码器、DSP(Digital Signal Processor,数字信号处理器)、基带处理器和/或NPU(Neural-Network Processing Unit,神经网络处理器)等。处理器701可以通过总线703与存储器702或其他部件形成连接。
存储器702可以用于存储计算机可执行程序代码,可执行程序代码包括指令。处理器701通过运行存储在存储器702的指令,执行移动终端700的各种功能应用以及数据处理。存储器702还可以存储应用数据,例如存储图像,视频等文件。
移动终端700的通信功能可以通过移动通信模块704、天线1、无线通信模块705、天线2、调制解调处理器以及基带处理器等实现。天线1和天线2用于发射和接收电磁波信号。移动通信模块704可以提供应用在移动终端700上3G、4G、5G等移动通信解决方案。无线通信模块705可以提供应用在移动终端700上的无线局域网、蓝牙、近场通信等无线通信解决方案。
显示屏706用于实现显示功能,如显示用户界面、图像、视频等。摄像模块707用于实现拍摄功能,如拍摄图像、视频等。音频模块708用于实现音频功能,如播放音频,采集语音等。电源模块709用于实现电源管理功能,如为电池充电、为设备供电、监测电池状态等。传感器模块710可以包括一种或多种传感器,用于实现相应的感应检测功能。例如,传感器模块710可以包括惯性传感器,其用于检测移动终端700的运动位姿,输出惯性传感数据。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方式。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施方式仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限定。
Claims (12)
1.一种代码加载方法,其特征在于,包括:
将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息;
基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,以通过所述传感器控制器运行所述第二内存中的所述目标代码,所述第二内存为所述传感器控制器对应的静态随机存取存储器。
2.根据权利要求1所述的方法,其特征在于,所述目标代码的结构信息包括所述目标代码的各子代码段在所述目标代码的可执行与可链接格式ELF文件中的偏移位置;所述将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息,包括:
将所述目标代码的ELF文件加载至所述第一内存,并解析所述ELF文件的头信息,得到所述各子代码段在所述ELF文件中的偏移位置。
3.根据权利要求2所述的方法,其特征在于,所述基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,包括:
基于所述各子代码段在所述ELF文件中的偏移位置以及在所述第二内存中为所述目标代码分配的内存空间的首地址,确定所述各子代码段在所述第二内存中的指定地址;
将所述各子代码段加载至其在所述第二内存中的指定地址。
4.根据权利要求3所述的方法,其特征在于,所述目标代码的结构信息还包括所述各子代码段的大小;所述基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,还包括:
根据所述各子代码段的大小以及所述目标代码对应的目标任务的相关信息的大小,确定所述目标代码在所述第二内存中的占用量,并按照所述占用量在所述第二内存中为所述目标代码分配所述内存空间。
5.根据权利要求2所述的方法,其特征在于,在基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存后,所述方法还包括:
对所述目标代码中的符号进行重定位,并根据重定位后的所述符号的地址对所述目标代码中关于所述符号的引用信息进行修改。
6.根据权利要求5所述的方法,其特征在于,所述目标代码中的符号包括内部符号,所述内部符号是在所述目标代码中进行定义的符号;所述对所述目标代码中的符号进行重定位,包括:
获取所述各子代码段中的所述内部符号的偏移位置,并根据所述内部符号的偏移位置确定所述内部符号在所述第二内存中的地址。
7.根据权利要求5所述的方法,其特征在于,所述目标代码中的符号包括外部符号,所述外部符号是在所述目标代码中未定义的符号;所述对所述目标代码中的符号进行重定位,包括:
在预先配置的符号表中查找所述外部符号的绝对地址,根据所述绝对地址确定所述外部符号在所述第二内存中的地址。
8.根据权利要求1所述的方法,其特征在于,在基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存后,所述方法还包括:
基于所述结构信息确定所述目标代码的入口函数的偏移位置,并根据所述入口函数的偏移位置确定所述入口函数在所述第二内存中的地址。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在通过所述传感器控制器运行所述第二内存中的所述目标代码结束后,从所述第二内存中释放所述目标代码所占用的内存空间。
10.一种代码加载装置,其特征在于,包括:
代码解析模块,用于将目标代码加载至主处理器对应的第一内存并进行解析,得到所述目标代码的结构信息;
代码运行模块,用于基于所述结构信息将所述目标代码加载至传感器控制器对应的第二内存,以通过所述传感器控制器运行所述第二内存中的所述目标代码,所述第二内存为所述传感器控制器对应的静态随机存取存储器。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9任一项所述的方法。
12.一种电子设备,其特征在于,包括:
处理器;
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1至9任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210148228.XA CN114443174A (zh) | 2022-02-17 | 2022-02-17 | 代码加载方法、代码加载装置、存储介质与电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210148228.XA CN114443174A (zh) | 2022-02-17 | 2022-02-17 | 代码加载方法、代码加载装置、存储介质与电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114443174A true CN114443174A (zh) | 2022-05-06 |
Family
ID=81374032
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210148228.XA Withdrawn CN114443174A (zh) | 2022-02-17 | 2022-02-17 | 代码加载方法、代码加载装置、存储介质与电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114443174A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408104A (zh) * | 2022-08-25 | 2022-11-29 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101329638A (zh) * | 2007-06-18 | 2008-12-24 | 国际商业机器公司 | 程序代码的并行性的分析方法和系统 |
CN104504333A (zh) * | 2014-11-25 | 2015-04-08 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN113377341A (zh) * | 2020-03-10 | 2021-09-10 | 阿里巴巴集团控股有限公司 | 代码分析方法、装置、电子设备及计算机可读介质 |
CN113641413A (zh) * | 2021-08-25 | 2021-11-12 | Oppo广东移动通信有限公司 | 目标模型加载更新方法及装置、可读介质和电子设备 |
-
2022
- 2022-02-17 CN CN202210148228.XA patent/CN114443174A/zh not_active Withdrawn
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101329638A (zh) * | 2007-06-18 | 2008-12-24 | 国际商业机器公司 | 程序代码的并行性的分析方法和系统 |
CN104504333A (zh) * | 2014-11-25 | 2015-04-08 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN113377341A (zh) * | 2020-03-10 | 2021-09-10 | 阿里巴巴集团控股有限公司 | 代码分析方法、装置、电子设备及计算机可读介质 |
CN113641413A (zh) * | 2021-08-25 | 2021-11-12 | Oppo广东移动通信有限公司 | 目标模型加载更新方法及装置、可读介质和电子设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115408104A (zh) * | 2022-08-25 | 2022-11-29 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
CN115408104B (zh) * | 2022-08-25 | 2023-08-11 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108415739B (zh) | 一种动态链接库函数的钩挂方法、装置和存储介质 | |
CN113641413B (zh) | 目标模型加载更新方法及装置、可读介质和电子设备 | |
CN111369430B (zh) | 基于移动深度学习引擎的移动端人像智能背景替换方法 | |
CN106201600A (zh) | 移动终端应用程序运行控制方法和操作系统 | |
CN110489425B (zh) | 一种数据访问方法、装置、设备及存储介质 | |
CN111026493B (zh) | 界面渲染的处理方法和装置 | |
KR100654428B1 (ko) | 자바 프로그램의 처리 속도를 향상시키는 시스템 및 그 방법 | |
CN114443174A (zh) | 代码加载方法、代码加载装置、存储介质与电子设备 | |
US9158545B2 (en) | Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler | |
CN114296646A (zh) | 基于io业务的缓存方法、装置、服务器和存储介质 | |
CN116627502B (zh) | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 | |
CN116048765B (zh) | 任务处理方法、样本数据处理方法及电子设备 | |
CN117641023B (zh) | 视频处理方法、装置及电子设备 | |
CN111209231B (zh) | 数据处理方法、装置及相关产品 | |
JP2009211187A (ja) | 情報処理装置 | |
CN115964331A (zh) | 一种数据访问方法、装置及设备 | |
CN116521253A (zh) | 预测模型的训练方法、应用程序预测方法、装置和设备 | |
US20220398442A1 (en) | Deep learning computational storage drive | |
CN111913812B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN113096012A (zh) | 单目多帧视频图像拼接系统、方法、设备及存储介质 | |
US20130187931A1 (en) | System and method for multiple native software applications user interface composition | |
CN110908958B (zh) | 一种文件处理方法、装置、终端及存储介质 | |
CN118606224A (zh) | 系统的采集与缓存方法及电子设备和存储介质 | |
CN115665128A (zh) | 多媒体播放方法、芯片、电子设备及存储介质 | |
CN117993449A (zh) | 网络模型处理方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20220506 |
|
WW01 | Invention patent application withdrawn after publication |