一种设备的组件加载方法、装置以及物联网系统与流程

文档序号:14266162阅读:172来源:国知局
一种设备的组件加载方法、装置以及物联网系统与流程

本申请涉及计算机技术领域,特别是涉及一种设备的组件加载方法、一种设备的组件加载装置、一种设备以及一种物联网系统。



背景技术:

在物联网技术中,工业控制设备、智能家具设备、可穿戴设备等物联网终端设备可以通过接入网络进行通信,物联网终端设备上可以设置各种传感器来采集各种数据,并通过网络进行数据传输。

为了降低成本,物联网终端设备通常都采用计算能力和内存资源有限的嵌入式设备对各个传感器进行控制,嵌入式设备需要加载传感器的驱动组件后才能实现对传感器的控制。

现有技术中,各个传感器的驱动组件可以预置在嵌入式设备中,或动态加载。将驱动组件预置在嵌入式设备的方式,不能灵活的更新驱动组件。在现有动态加载方式中,嵌入式设备在下载了驱动组件后,需要驱动组件进行符号重定位,重定位过程需要占用较多的计算资源,并且驱动组件中包括用于重定位的信息,这些信息占用内存空间较大。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种设备的组件加载方法、相应的一种设备的组件加载装置、一种设备以及一种物联网系统。

为了解决上述问题,本申请实施例公开了一种设备的组件加载方法,其中,所述设备与云服务器通信,所述的方法包括:

所述设备生成组件加载请求;

所述设备将所述组件加载请求发送至所述云服务器;

所述设备接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

所述设备运行所述目标组件的可执行文件,以完成所述目标组件的加载。

优选的,还包括:

所述设备将接收到的所述目标组件的可执行文件存储到闪存flash中。

优选的,所述设备运行所述目标组件的可执行文件,以完成所述目标组件的加载的步骤包括:

若所述目标组件的可执行文件为xip执行方式,则所述设备在所述闪存flash中提取所述目标组件的可执行文件的初始化函数;

所述设备运行所述初始化函数,以完成所述目标组件的加载。

优选的,所述设备运行所述目标组件的可执行文件,以完成所述目标组件的加载的步骤还包括:

若所述目标组件的可执行文件不为xip执行方式,则所述设备提取出所述目标组件的可执行文件中的元数据;所述元数据包括:初始化函数内存地址和所述可执行文件对应的组件名称;

所述设备将提出提取元数据后的所述目标组件的可执行文件复制至内存中;

所述设备运行所述初始化函数,以完成所述目标组件的加载。

优选的,还包括:

所述设备接收所述云服务器发送的组件更新消息;

所述设备生成组件加载请求的步骤包括:

所述设备依据所述组件更新消息,确定需要更新的目标组件;

所述设备生成针对所述需要更新的目标组件的组件加载请求。

优选的,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

优选的,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息生成;所述目标组件的目标文件由所述云服务器依据所述组件加载请求获得。

优选的,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息和所述目标符号的内存地址信息链接生成。

优选的,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

同时,本申请实施例还公开了一种设备的组件加载方法,其中,所述设备与云服务器通信,所述的方法包括:

所述云服务器接收所述设备发送的组件加载请求;

所述云服务器依据所述组件加载请求,生成目标组件的可执行文件;

所述云服务器向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

优选的,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述云服务器依据所述组件加载请求,生成目标组件的可执行文件的步骤包括:

所述云服务器依据所述组件加载请求,获得目标组件的目标文件;

所述云服务器采用所述目标组件的目标文件、所述可用内存地址空间信息,生成预设格式的所述目标组件的可执行文件。

优选的,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述云服务器采用所述目标组件的目标文件、所述可用内存地址空间信息,生成预设格式的所述目标组件的可执行文件的步骤包括:

所述云服务器采用所述目标组件的目标文件、所述可用内存地址空间信息和所述目标符号的内存地址信息进行链接,生成预设格式的所述目标组件的可执行文件。

优选的,所述云服务器向所述设备发送所述可执行文件的步骤包括:

所述云服务器将所述目标组件的可执行文件设置为xip执行方式;

所述云服务器向所述设备发送所述设置为xip执行方式的目标组件的可执行文件。

优选的,还包括:

当组件更新时,所述云服务器生成组件更新消息;

所述云服务器向所述设备发送所述组件更新消息,所述设备用于在接收到所述组件更新消息后,返回所述组件加载请求。

优选的,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

优选的,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

同时,本申请实施例还公开了一种设备的组件加载装置,其中,所述设备与云服务器通信,所述的装置包括:

位于所述设备的请求生成模块,用于生成组件加载请求;

位于所述设备的请求发送模块,用于将所述组件加载请求发送至所述云服务器;

位于所述设备的文件接收模块,用于接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

位于所述设备的文件运行模块,用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

同时,本申请实施例还公开了一种设备的组件加载装置,其中,所述设备与云服务器通信,所述的装置包括:

位于所述云服务器的请求接收模块,用于接收所述设备发送的组件加载请求;

位于所述云服务器的可执行文件生成模块,用于依据所述组件加载请求,生成目标组件的可执行文件;

位于所述云服务器的文件发送模块,用于向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

同时,本申请实施例还公开了一种设备,其中,所述设备与云服务器通信,所述的设备包括:

处理器,用于生成组件加载请求;

输出设备,耦合至所述处理器,用于将所述组件加载请求发送至所述云服务器;

输入设备,耦合至所述处理器,用于接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

所述处理器,还用于运行所述输入设备获得的目标组件的可执行文件,以完成所述目标组件的加载。

同时,本申请实施例还公开了一种物联网系统,包括:云服务器和与所述云服务器通信的设备;

所述设备包括:

请求生成模块,用于生成组件加载请求;

请求发送模块,用于将所述组件加载请求发送至所述云服务器;

文件接收模块,用于接收所述云服务器返回的目标组件的可执行文件;

文件运行模块,用于运行所述目标组件的可执行文件,以完成所述目标组件的加载;

所述云服务器包括:

请求接收模块,用于接收所述设备发送的组件加载请求;

可执行文件生成模块,用于依据所述组件加载请求,生成目标组件的可执行文件;

文件发送模块,用于向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

本申请实施例包括以下优点:

本申请实施例中,当嵌入式设备需要加载驱动组件时,嵌入式设备向云服务器发送组件加载请求,请求中包括嵌入式设备的可用内存地址空间信息。云服务器根据请求确定嵌入式设备所需的驱动组件,并采用嵌入式设备的可用内存地址空间信息生成驱动组件的可执行文件,嵌入式设备运行驱动组件的可执行文件即可完成驱动组件的加载。与现有的动态加载方式相比,本申请实施例中,云服务器根据嵌入式设备的可用内存地址空间信息,对驱动组件的各个符号的内存地址进行了定位,并且将驱动组件需要用到的嵌入式设备本地符号的内存地址直接定位为符号在嵌入式设备的内存空间中的实际内存地址。嵌入式设备可直接运行驱动组件的可执行文件,无需进行符号重定位,减少了嵌入式设备计算资源的占用。并且驱动组件的可执行文件省去了用于符号重定位的信息,从而减少内存空间的占用。在计算能力和内存资源有限的嵌入式设备中也可以通过本申请所述的方法实现组件的动态加载。

附图说明

图1是本申请的一种设备的组件加载方法实施例1的步骤流程图;

图2是本申请的一种设备的组件加载方法实施例2的步骤流程图;

图3是本申请实施例一种驱动组件的动态加载的流程图;

图4是本申请实施例一种驱动组件的动态加载的流程图;

图5是本申请的一种设备的组件加载方法实施例3的步骤流程图;

图6是本申请的一种设备的组件加载装置实施例1的结构框图;

图7是本申请的一种设备的组件加载装置实施例2的结构框图;

图8是本申请的一种设备实施例的硬件结构图;

图9是本申请的一种物联网系统实施例的框图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

本申请实施例的核心构思之一在于,由云服务器对驱动组件的符号的内存地址进行定位,使得嵌入式设备在加载驱动组件时可以无需进行符号重定位过程。

参照图1,示出了本申请的一种设备的组件加载方法实施例1的步骤流程图,其中所述设备与云服务器通信,所述的方法具体可以包括如下步骤:

步骤101,所述设备生成组件加载请求;

本申请实施例中的设备可以是计算能力和内存资源有限的嵌入式设备,还可以是计算能力,内存资源充足的大型计算设备。

当设备需要加载组件时,设备生成组件加载请求。组件加载请求中可以包括设备需要加载的目标组件的标识。

例如,当嵌入式设备首次调用某个传感器时,嵌入式设备需要加载该传感器的驱动组件,嵌入式设备依据需要首次加载的驱动组件生成组件加载请求。

又例如,当某个传感器的驱动组件需要更新时,嵌入式设备依据需要更新的确定组件生成组件加载请求。

在嵌入式设备中,嵌入式设备的可执行映像image预置在设备中。可执行映像包含了操作系统的主体部分,亦即操作系统的内核api(applicationprogramminginterface,应用程序编程接口),如任务协作管理模块、内存管理模块。

当嵌入式设备运行时,可执行映像被加载到内存ram中。

嵌入式设备中的组件component可以调用操作系统的提供的内核api,当组件被加载到内存后,组件可以根据内核api的符号在内存中的实际内存地址,对内核api进行调用。

在现有的组件动态加载方法中,外部并不知道组件需要用到的内核api在设备内存中的实际内存地址。因此,嵌入设备在下载了组件后,需要对组件调用到的内核api的符号的地址重新地位成这些内核api的符号在内存中的实际内存地址,此过程称为符号重定位。

步骤102,所述设备将所述组件加载请求发送至所述云服务器;

步骤103,所述设备接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

云服务器在接收到组件加载请求后,生成设备需要加载的目标组件的可执行文件。

云服务器在生成目标组件的可执行文件过程中,需要获取目标符号的内存地址信息以及设备中尚未被使用的可用内存地址空间信息。其中,目标符号是指目标组件需要调用到的设备中的符号,具体可以包括设备的内核api的符号和设备中已运行的组件的符号。

云服务器将目标组件的符号分配到尚未被使用的可用内存地址中,保证目标组件的符号的内存地址与设备中本地符号的内存地址不会产生冲突。

由于目标组件的目标文件中各个符号的内存地址,和目标符号的内存地址都是设备的内存空间中的实际内存地址,因此设备在接收到目标组件的可执行文件后,无需进行符号重定位过程。

步骤104,所述设备运行所述目标组件的可执行文件,以完成所述目标组件的加载。

设备在接收到目标组件的可执行文件后,通过运行目标组件的可执行文件即可完成目标组件的加载。

本申请实施例中,当嵌入式设备需要加载驱动组件时,嵌入式设备向云服务器发送组件加载请求。云服务器根据组件加载请求生成嵌入式设备所需的驱动组件的可执行文件,嵌入式设备运行驱动组件的可执行文件即可完成驱动组件的加载。

与现有的动态加载方式相比,本申请实施例中,云服务器根据嵌入式设备的可用内存地址空间信息,对驱动组件的各个符号的内存地址进行了定位,并且将驱动组件需要用到的嵌入式设备本地符号的内存地址直接定位为符号在嵌入式设备的内存空间中的实际内存地址。嵌入式设备可直接运行驱动组件的可执行文件,无需进行符号重定位,减少了嵌入式设备计算资源的占用。并且驱动组件的可执行文件省去了用于符号重定位的信息,从而减少内存空间的占用。在计算能力和内存资源有限的嵌入式设备中也可以通过本申请所述的方法实现组件的动态加载。

参照图2,示出了本申请的一种设备的组件加载方法实施例2的步骤流程图,其中所述设备与云服务器通信,所述的方法具体可以包括如下步骤:

步骤201,所述设备生成组件加载请求;

在本申请实施例中,所述的方法还可以包括:

所述设备接收所述云服务器发送的组件更新消息;

所述步骤201具体可以包括如下子步骤:

子步骤s11,所述设备依据所述组件更新消息,确定需要更新的目标组件;

子步骤s12,所述设备生成针对所述需要更新的目标组件的组件加载请求。

具体的,由于各种组件都存储在云服务器中,当某个组件更新时。云服务器可以通知设备更新组件。

例如,当云服务器检测到某个传感器的驱动组件更新时,云服务器通知设备可以更新该驱动组件。

步骤202,所述设备将所述组件加载请求发送至所述云服务器;

步骤203,所述设备接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

在本申请实施例中,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息生成;所述目标组件的目标文件由所述云服务器依据所述组件加载请求获得。

可用的地址信息具体可以包括可用的地址字段和地址范围。

在一种情况中,设备可以在组件加载请求中将可用内存地址空间信息发送到云服务器。在另一种情况中,云服务器可以预先获取到设备的可用内存地址空间信息,或,预先约定哪些地址可以为可用内存地址空间信息。

更进一步的,在本申请实施例中,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息和所述目标符号的内存地址信息链接生成。

在一种情况中,设备可以在组件加载请求中将目标符号的内存地址信息发送至云服务器,例如,设备将记录了目标符号的内存地址信息的符号表通过组件加载请求发送到云服务器。

在另一种情况中,云服务器可以预先获取到设备中的目标符号的内存地址信息。具体的,云服务器可以预先获取到设备的符号表,符号表中记录有目标符号的内存地址信息。

当目标组件加载完成后,目标组件可以与设备的内核api进行交互。组件之间的交互,是指组件中的符号与其他组件中的符号之间的调用。组件和内核api的交互,是指组件的符号与内核api的符号之间的调用。符号是指组件中的变量和函数。

在本申请实施例中,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

当目标组件加载完成后,设备端中本地的组件就可以与动态下载的目标组件进行交互。

实际上,在本申请实施例中,对于设备端本地的组件也设置有上述的标准化接口函数。各个组件之间通过标准化的接口函数进行交互,从而避免在交互过程中产生庞大的符号表,大大减少footprint占用,footprint是指ram/rom。

调用过程是以读取符号的内存地址来进行的。在本申请实施例中,从云服务器中动态下载的目标组件中的各个符号的内存地址是由云服务器链接生成的,云服务器根据设备中的可用内存地址空间信息为目标组件中的各个符号的分配地址。从而保证目标组件的内存地址与设备本地的符号的内存地址不冲突。

启动函数是启动组件的函数;关闭函数是关闭组件的函数;读取函数是组件用于读取数据的函数;写入函数是组件用于写入数据的函数;

例如,在组件a调用组件b的过程中,组件a可以通过组件b的启动函数来启动组件b。当组件a需要读取组件b的数据时,组件a可以通过读取函数读取组件b的数据。当组件a需要向组件b写入数据时,组价a可以通过写入函数向组件b写入数据。当组件a不需要调用组件b时,组件a通过组件b的关闭函数,关闭组件b。

i/o通道管理函数是组件对设备中i/o通道进行管理的函数,例如,对串口的传输波特率、传感器模式等进行控制。

步骤204,所述设备将接收到的所述目标组件的可执行文件存储到闪存flash中;

设备将接收到的目标组件的可执行文件存储到闪存flash的代码段地址空间中。

步骤205,所述设备运行所述目标组件的可执行文件,以完成所述目标组件的加载。

在本申请实施例的一种优选示例中,所述步骤205具体可以包括如下子步骤:

子步骤s21,若所述目标组件的可执行文件为xip执行方式,则所述设备在所述闪存flash中提取所述目标组件的可执行文件的初始化函数;

xip(executeinplace,芯片内执行)执行方式,是一种可直接在闪存flash中执行的方式,当目标文件的可执行文件为xip执行方式时,设备在闪存的地址段代码空间中取出初始化函数。

在本申请实施例中,初始化函数可以存在目标文件的可执行文件的头部,设备可以从目标文件的可执行文件的头部取出初始化函数。

子步骤s22,所述设备运行所述初始化函数,以完成所述目标组件的加载。

设备通过运行初始化函数以完成目标组件的加载。在本申请实施例中,目标组件的标准化的接口函数记录在一个接口数据结构中。当初始化函数运行后,该接口数据结构的指针被记录到设备的操作系统的hashmap表中,该hashmap表中维护了各个组件的名称和各个组件的接口数据结构的指针。

在调用组件时,可以根据hashmap表查找到需要调用的组件的接口数据结构的指针。根据指针查找到各个组件的接口数据结构的内存地址,通过接口数据结构的内存地址就可以找到组件的各个接口函数的内存地址。

在本申请实施例的一种优选示例中,所述步骤204具体还可以包括如下子步骤:

子步骤s23,若所述目标组件的可执行文件不为xip执行方式,则所述设备提取出所述目标组件的可执行文件中的元数据;所述元数据包括:初始化函数内存地址和所述可执行文件对应的组件名称;

子步骤s24,所述设备将提出提取元数据后的所述目标组件的可执行文件复制至内存中;

子步骤s25,所述设备运行所述初始化函数,以完成所述目标组件的加载。

若目标组件的可执行文件不为xip执行方式,设备在闪存flash的代码段地址空间中将目标组件的可执行文件的元数据(初始化函数内存地址和所述可执行文件对应的组件名称)取出,然后将取出元数据的可执行文件复制到内存ram中。设备运行初始化函数,从而完成目标组件的加载。

当初始化函数运行后,记录了组件的接口函数的接口数据结构的指针被记录到设备的操作系统的hashmap表中。

在本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

参照图3,示出了本申请实施例一种驱动组件的动态加载的流程图。在本实施例中,当设备被初次激活,将包含设备标识的驱动组件加载请求发送至物联网服务器。

设备中的设备芯片在出厂之前,可以预先在物联网服务器注册其所采用传感器的信息,例如型号信息等,然后通过该设备芯片的唯一设备标识与该传感器信息进行关联存储。物联网服务器接收到包含设备标识的驱动组件加载请求后,就能够根据设备标识确定出与其相关联的传感器型号等传感器信息。

物联网服务器可以将设备预先注册的传感器信息返回给设备。

设备依据传感器信息从物联网服务器中下载对应的驱动组件的可执行文件。具体的,一种情况可以是:物联网服务器在向设备发送传感器信息后,直接向设备推送传感器信息对应的驱动组件的可执行文件,由设备下载并加载到操作系统,从而驱动传感器正常工作。另一种情况是:物联网服务器在向设备发送传感器信息后,由设备依据传感器信息向物联网服务器发送下载请求,物联网服务器依据下载请求发送对应的驱动组件的可执行文件给设备,由设备下载并加载到操作系统,从而驱动传感器正常工作。

物联网服务器中具有传感器的驱动组件的源代码文件或驱动组件的目标文件。驱动组件的目标文件是由驱动组件的源代码文件经编译器,编译生成的文件。物联网服务器中的传感器的驱动组件的源代码文件或驱动组件的目标文件可以是由传感器的厂商上传提供的。

参照图4示出了本申请实施例一种驱动组件的动态加载的流程图。

在本实施例中,当设备检测到新连接的传感器时,将包含设备标识的驱动组件加载请求发送至物联网服务器。

物联网服务器接收到组件加载请求后,检测设备新连接的传感器信息。

目前已经存在较成熟的传感器信息检测技术,本申请直接使用即可,并不对具体的检测方式进行限制。通过这种检测技术,物联网服务器服务能够获取到设备连接的传感器型号等传感器信息。

物联网服务器将检测到的传感器信息返回给设备。

设备依据传感器信息从物联网服务器中下载对应的驱动组件的可执行文件。具体的,一种情况可以是:物联网服务器在向设备发送传感器信息后,直接向设备推送传感器信息对应的驱动组件的可执行文件,由设备下载并加载到操作系统,从而驱动传感器正常工作。另一种情况是:物联网服务器在向设备发送传感器信息后,由设备依据传感器信息向物联网服务器发送下载请求,物联网服务器依据下载请求发送对应的驱动组件的可执行文件给设备,由设备下载并加载到操作系统,从而驱动传感器正常工作。

参照图5,示出了本申请的一种设备的组件加载方法实施例3的步骤流程图,其中所述设备与云服务器通信,所述的方法具体可以包括如下步骤:

步骤301,所述云服务器接收所述设备发送的组件加载请求;

在本申请实施例中,云服务器可以与多个设备通信连接。组件加载请求中可以包括设备标识,云服务器可以根据设备标识确定是哪个设备发送了组件加载请求。

步骤302,所述云服务器依据所述组件加载请求,生成目标组件的可执行文件;

在本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

在本申请实施例中,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述步骤302具体可以包括如下子步骤:

子步骤s31,所述云服务器依据所述组件加载请求,获得目标组件的目标文件;

目标文件是源代码文件由编译器编译后得到文件。

具体的,源代码文件包括:.c文件、.cpp文件、.e文件。

目标文件包括:.obj文件、.lib文件、.o文件、.a文件。

在本申请实施例中,云服务器中预置有目标组件的目标文件或目标组件的源代码文件。

当云服务器接收到组件加载请求后,马上对目标组件的源代码文件进行编译生成目标组件的目标文件。

子步骤s32,所述云服务器采用所述目标组件的目标文件、所述可用内存地址空间信息,生成预设格式的所述目标组件的可执行文件;

进一步的,在本申请实施例中,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述子步骤s32可以进一步包括:

所述云服务器采用所述目标组件的目标文件、所述可用内存地址空间信息和所述目标符号的内存地址信息进行链接,生成预设格式的所述目标组件的可执行文件。

可执行文件是目标文件经链接器链接生成的文件。链接器采用目标组件的目标文件、可用内存地址空间信息和目标符号的内存地址信息进行链接生成可执行文件。

可执行文件包括:exe文件、dll文件、elf文件、so文件。

由于目标组件的目标文件中各个符号的内存地址,和目标符号的内存地址都是设备的内存空间中的实际内存地址,因此设备在接收到目标组件的可执行文件后,无需进行符号重定位过程。

为了与现有的可执行文件进行区别,本申请实施例中将可执行文件定位为y-elf格式。y-elf格式的可执行文件只暴露了标准化初始化函数接口,初始化函数将标准化函数的接口数据结构挂接在设备的操作系统的hashmap表中,该hashmap表中维护了各个组件的名称和各个组件的接口数据结构的指针。

接口数据结构中记录标准化的接口函数;标准化接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

在调用组件时,可以根据hashmap表查找到需要调用的组件的接口数据结构的指针。根据指针查找到各个组件的接口数据结构的内存地址,通过接口数据结构的内存地址就可以找到组件的各个接口函数的内存地址。

实际上,在本申请实施例中,对于设备端本地的组件也设置有上述的标准化接口函数。各个组件之间通过标准化的接口函数进行交互,从而避免在交互过程中产生庞大的符号表,大大减少footprint占用。另外,组件也可以与设备的内核api进行交互。

步骤303,所述云服务器向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

在本申请实施例中,所述步骤303具体可以包括如下子步骤:

所述云服务器将所述目标组件的可执行文件设置为xip执行方式;

所述云服务器向所述设备发送所述设置为xip执行方式的目标组件的可执行文件。

具体的,云服务器确定设备是否可以支持xip执行方式,若设备支持xip执行方式,则云服务器将目标文件的可执行文件设置为xip执行方式。

在本申请实施例中,所述的方法还可以包括:

当组件更新时,所述云服务器生成组件更新消息;

所述云服务器向所述设备发送所述组件更新消息,所述设备用于在接收到所述组件更新消息后,返回所述组件加载请求。

具体的,云服务器中可以记录各个设备已有的组件的组件名,当某个组件更新时,云服务器检测具有该更新的组件的组件名的设备,然后向这些设备发送组件更新消息。设备在接收到组件更新消息后,向云服务器返回相组件加载请求。

在本申请实施例中,云服务器根据嵌入式设备的组件加载请求确定嵌入式设备所需的驱动组件,并采用嵌入式设备的可用内存地址空间信息生成驱动组件的可执行文件,嵌入式设备运行驱动组件的可执行文件即可完成驱动组件的加载。

与现有的动态加载方式相比,本申请实施例中,云服务器根据嵌入式设备的可用内存地址空间信息,对驱动组件的各个符号的地址进行了定位,并且将驱动组件需要用到的嵌入式设备本地符号的地址直接定位为符号在嵌入式设备的内存空间中的实际内存地址。嵌入式设备可直接运行驱动组件的可执行文件,无需进行符号重定位,减少了嵌入式设备计算资源的占用。并且驱动组件的可执行文件省去了用于符号重定位的信息,从而减少内存空间的占用。在计算能力和内存资源有限的嵌入式设备中也可以通过本申请所述的方法实现组件的动态加载。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。

参照图6,示出了本申请的一种设备的组件加载装置实施例1的结构框图,其中所述设备与云服务器通信,所述的装置具体可以包括如下模块:

位于所述设备的请求生成模块401,用于生成组件加载请求;

位于所述设备的请求发送模块402,用于将所述组件加载请求发送至所述云服务器;

位于所述设备的文件接收模块403,用于接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

位于所述设备的文件运行模块404,用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

在本申请实施例中,所述的装置还可以包括:

位于所述设备的存储模块,用于将接收到的所述目标组件的可执行文件存储到闪存flash中。

在本申请实施例中,所述文件运行模块404可以包括:

函数提取子模块,用于若所述目标组件的可执行文件为xip执行方式,则在所述闪存flash中提取所述目标组件的可执行文件的初始化函数;

第一函数运行子模块,用于运行所述初始化函数,以完成所述目标组件的加载。

在本申请实施例中,所述文件运行模块404还可以包括:

元数据提取子模块,用于若所述目标组件的可执行文件不为xip执行方式,则提取出所述目标组件的可执行文件中的元数据;所述元数据包括:初始化函数内存地址和所述可执行文件对应的组件名称;

复制子模块,用于将提出提取元数据后的所述目标组件的可执行文件复制至内存中;

第二函数运行子模块,用于运行所述初始化函数,以完成所述目标组件的加载。

在本申请实施例中,所述的装置还可以包括:位于所述设备的消息接收模块,用于接收所述云服务器发送的组件更新消息;

所述请求生成模块401可以包括:

目标组件确定子模块,用于依据所述组件更新消息,确定需要更新的目标组件;

目标请求生成子模块,用于生成针对所述需要更新的目标组件的组件加载请求。

在本申请实施例中,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

在本申请实施例中,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息生成;所述目标组件的目标文件由所述云服务器依据所述组件加载请求获得。

在本申请实施例中,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息和所述目标符号的内存地址信息链接生成。

在本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

本申请实施例中,当嵌入式设备需要加载驱动组件时,嵌入式设备向云服务器发送组件加载请求,请求中包括嵌入式设备的可用内存地址空间信息。云服务器根据请求确定嵌入式设备所需的驱动组件,并采用嵌入式设备的可用内存地址空间信息生成驱动组件的可执行文件,嵌入式设备运行驱动组件的可执行文件即可完成驱动组件的加载。

与现有的动态加载方式相比,本申请实施例中,云服务器根据嵌入式设备的可用内存地址空间信息,对驱动组件的各个符号的地址进行了定位,并且将驱动组件需要用到的嵌入式设备本地符号的地址直接定位为符号在嵌入式设备的内存空间中的实际内存地址。嵌入式设备可直接运行驱动组件的可执行文件,无需进行符号重定位,减少了嵌入式设备计算资源的占用。并且驱动组件的可执行文件省去了用于符号重定位的信息,从而减少内存空间的占用。在计算能力和内存资源有限的嵌入式设备中也可以通过本申请所述的方法实现组件的动态加载。

参照图7,示出了本申请的一种设备的组件加载装置实施例2的结构框图,其中所述设备与云服务器通信,所述的装置具体可以包括如下模块:

位于所述云服务器的请求接收模块501,用于接收所述设备发送的组件加载请求;

位于所述云服务器的可执行文件生成模块502,用于依据所述组件加载请求,生成目标组件的可执行文件;

位于所述云服务器的文件发送模块503,用于向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

在本申请实施例中,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述可执行文件生成模块502可以包括:

目标文件获得子模块,用于依据所述组件加载请求,获得目标组件的目标文件;

可执行文件生成子模块,用于采用所述目标组件的目标文件、所述可用内存地址空间信息,生成预设格式的所述目标组件的可执行文件。

在本申请实施例中,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述可执行文件生成子模块进一步包括:

链接单元,用于采用所述目标组件的目标文件、所述可用内存地址空间信息和所述目标符号的内存地址信息进行链接,生成预设格式的所述目标组件的可执行文件。

在本申请实施例中,所述文件发送模块503可以包括:

执行方式设置子模块,用于将所述目标组件的可执行文件设置为xip执行方式;

文件发送子模块,用于向所述设备发送所述设置为xip执行方式的目标组件的可执行文件。

在本申请实施例中,所述的装置还可以包括:

位于所述云服务器的更新消息生成模块,用于当组件更新时,生成组件更新消息;

位于所述云服务器的更新消息发送模块,用于向所述设备发送所述组件更新消息,所述设备用于在接收到所述组件更新消息后,返回所述组件加载请求。

在本申请实施例中,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

在本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

在本申请实施例中,云服务器根据嵌入式设备的组件加载请求确定嵌入式设备所需的驱动组件,并采用嵌入式设备的可用内存地址空间信息生成驱动组件的可执行文件,嵌入式设备运行驱动组件的可执行文件即可完成驱动组件的加载。

与现有的动态加载方式相比,本申请实施例中,云服务器根据嵌入式设备的可用内存地址空间信息,对驱动组件的各个符号的地址进行了定位,并且将驱动组件需要用到的嵌入式设备本地符号的地址直接定位为符号在嵌入式设备的内存空间中的实际内存地址。嵌入式设备可直接运行驱动组件的可执行文件,无需进行符号重定位,减少了嵌入式设备计算资源的占用。并且驱动组件的可执行文件省去了用于符号重定位的信息,从而减少内存空间的占用。在计算能力和内存资源有限的嵌入式设备中也可以通过本申请所述的方法实现组件的动态加载。

参照图8,示出了本申请的一种设备实施例的硬件结构图,该设备可以与云服务器通信。如图8所示,该设备可以包括处理器60、输出设备61、输入设备62、存储器63和和至少一个通信总线64。通信总线64用于实现元件之间的通信连接。存储器23可能包含高速ram存储器,也可能还包括非易失性存储nvm,例如至少一个磁盘存储器,还可能包括闪存flash。存储器中可以存储各种程序,用于完成各种处理功能以及实现本实施例的方法步骤。

本申请实施例中,上述处理器60例如可以为中央处理器(centralprocessingunit,简称cpu)、应用专用集成电路(asic)、数字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,该处理器60通过车内线路或无线连接耦合到上述输入设备62和输出设备61。

本申请实施例中,上述输入设备62可以包括多种输入设备,例如可以包括面向用户的用户接口、面向设备的设备接口、收发信机中的至少一个。本申请实施例中,该面向设备的设备接口可以是用于设备与设备之间进行数据传输的有线接口、还可以是用于设备与设备之间进行数据或者指令传输的硬件插入接口(例如usb接口、串口、车体硬件设施之间的接口等);本申请实施例中,该面向用户的用户接口例如可以是面向用户的控制按键、用于接收语音输入的语音输入设备以及用户接收用户触摸输入的触摸感知设备(例如具有触摸感应功能的触摸屏、触控板等);本申请实施例中,上述收发信机可以是具有通信功能的射频收发芯片、基带处理芯片以及收发天线等。本申请实施例中,上述输出设备61可以为相应的具有通信功能的输出接口或者语音播放设备或者收发信机。

在本申请实施例中,处理器60,用于生成组件加载请求;

输出设备61,耦合至所述处理器60,用于将所述组件加载请求发送至所述云服务器;

输入设备62,耦合至所述处理器60,用于接收所述云服务器返回的目标组件的可执行文件;所述目标组件的可执行文件由所述云服务器依据所述组件加载请求生成;

所述处理器60,还用于运行所述输入设备62获得的目标组件的可执行文件,以完成所述目标组件的加载。

本申请实施例提供的设备,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

本申请实施例中,所述处理器60,还用于将所述输入设备62接收到的所述目标组件的可执行文件存储到闪存flash中。

本申请实施例中,所述处理器60,具体用于若所述目标组件的可执行文件为xip执行方式,则在所述闪存flash中提取所述目标组件的可执行文件的初始化函数;运行所述初始化函数,以完成所述目标组件的加载。

本申请实施例中,所述处理器60,具体用于若所述目标组件的可执行文件不为xip执行方式,则提取出所述目标组件的可执行文件中的元数据;所述元数据包括:初始化函数内存地址和所述可执行文件对应的组件名称;将提出提取元数据后的所述目标组件的可执行文件复制至内存中;运行所述初始化函数,以完成所述目标组件的加载。

本申请实施例中,所述输入设备62,还用于接收所述云服务器发送的组件更新消息;

所述处理器60,具体用于依据所述组件更新消息,确定需要更新的目标组件,并生成针对所述需要更新的目标组件的组件加载请求。

本申请实施例中,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

本申请实施例中,所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息生成;所述目标组件的目标文件由所述云服务器依据所述组件加载请求获得。

本申请实施例中,所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述目标组件的可执行文件由所述云服务器采用目标组件的目标文件、所述设备的可用内存地址空间信息和所述目标符号的内存地址信息链接生成。

本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

本申请实施例提供的设备,可以执行上述方法实施例,其实现原理和技术效果类似,在此不再赘述。

参照图9,示出了本申请的一种物联网系统实施例的框图,该物联网系统包括:云服务器70和与所述云服务器通信的设备71;

所述设备71可以包括:

请求生成模块,用于生成组件加载请求;

请求发送模块,用于将所述组件加载请求发送至所述云服务器;

文件接收模块,用于接收所述云服务器返回的目标组件的可执行文件;

文件运行模块,用于运行所述目标组件的可执行文件,以完成所述目标组件的加载;

所述云服务器70可以包括:

请求接收模块,用于接收所述设备发送的组件加载请求;

可执行文件生成模块,用于依据所述组件加载请求,生成目标组件的可执行文件;

文件发送模块,用于向所述设备发送所述目标组件的可执行文件,所述设备用于运行所述目标组件的可执行文件,以完成所述目标组件的加载。

本申请实施例中,所述设备71还可以包括:

存储模块,用于将接收到的所述目标组件的可执行文件存储到闪存flash中。

在本申请实施例中,所述文件发送模块可以包括:

执行方式设置子模块,用于将所述目标组件的可执行文件设置为xip执行方式;

文件发送子模块,用于向所述设备发送所述设置为xip执行方式的目标组件的可执行文件。

本申请实施例中,所述文件运行模块可以包括:

函数提取子模块,用于若所述目标组件的可执行文件为xip执行方式,则在所述闪存flash中提取所述目标组件的可执行文件的初始化函数;

第一函数运行子模块,用于运行所述初始化函数,以完成所述目标组件的加载。

在本申请实施例中,所述文件运行模块还可以包括:

元数据提取子模块,用于若所述目标组件的可执行文件不为xip执行方式,则提取出所述目标组件的可执行文件中的元数据;所述元数据包括:初始化函数内存地址和所述可执行文件对应的组件名称;

复制子模块,用于将提出提取元数据后的所述目标组件的可执行文件复制至内存中;

第二函数运行子模块,用于运行所述初始化函数,以完成所述目标组件的加载。

在本申请实施例中,

所述云服务器70还可以包括:

更新消息生成模块,用于当组件更新时,生成组件更新消息;

更新消息发送模块,用于向所述设备发送所述组件更新消息,所述设备用于在接收到所述组件更新消息后,返回所述组件加载请求。

所述设备还可以包括:

消息接收模块,用于接收所述云服务器发送的组件更新消息;

所述请求生成模块包括:

目标组件确定子模块,用于依据所述组件更新消息,确定需要更新的目标组件;

目标请求生成子模块,用于生成针对所述需要更新的目标组件的组件加载请求。

在本申请实施例中,所述目标组件的可执行文件具有标准化的接口函数;所述接口函数至少包括以下的一个函数:启动函数、关闭函数、读取函数、写入函数和i/o通道管理函数。

在本申请实施例中,

所述组件加载请求包括所述设备的可用内存地址空间信息;或,所述云服务器中预置有所述设备的可用内存地址空间信息;

所述可执行文件生成模块包括:

目标文件获得子模块,用于依据所述组件加载请求,获得目标组件的目标文件;

可执行文件生成子模块,用于采用所述目标组件的目标文件、所述可用内存地址空间信息,生成预设格式的所述目标组件的可执行文件。

在本申请实施例中,

所述组件加载请求包括目标符号的内存地址信息,所述目标符号为所述目标组件需要调用的所述设备中的符号;或,所述云服务器中预置有目标符号的内存地址信息;

所述可执行文件生成子模块进一步包括:

链接单元,用于采用所述目标组件的目标文件、所述可用内存地址空间信息和所述目标符号的内存地址信息进行链接,生成预设格式的所述目标组件的可执行文件。

在本申请实施例中,所述云服务器为物联网服务器,所述目标组件为所述设备需要加载的传感器的驱动组件。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本申请所提供的一种设备的组件加载方法、一种设备的组件加载装置、一种设备以及一种物联网系统,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1