技术领域
[0001] 本发明涉及板卡开发技术领域,尤其涉及一种linux内核移植开源鸿蒙系统的方法及装置。
相关背景技术
[0002] 当前板卡硬件厂家都会有一套自家板卡适配linux和android(安卓)系统的linux内核,但是版本通常与OpenHarmony(开源鸿蒙)社区提供的linux内核有很大的差异,无法支撑OpenHarmony系统的特性。硬件厂家板卡要运行OpenHarmony系统,通常需要在OpenHarmony社区的linux内核上重新适配板卡驱动,重新适配板卡驱动的工作属于重复工作,而且工作量较大,开发工作量增加几周甚至几个月不等,日后还需要长期多维护一套适配OpenHarmony的linux内核代码,开发人力、开发成本和开发周期都将翻倍。
[0003] 现有的OpenHarmony南向适配过程中,板卡厂家现有的linux和android驱动适配工作无法直接复用,都是在OpenHarmony社区linux内核版本上做硬件适配,属于重复开发工作费时费力,使得OpenHarmony的技术门槛和经济成本较高,在一定程度上阻碍了OpenHarmony的生态化形成。
具体实施方式
[0027] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0028] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“目标”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0029] 实施例一
[0030] 图1为本发明实施例一提供的一种linux内核移植开源鸿蒙系统的方法的流程图,本实施例可适用于推进和普及开源鸿蒙系统的情况,该方法可以由linux内核移植开源鸿蒙系统的装置来执行,该linux内核移植开源鸿蒙系统的装置可以采用硬件和/或软件的形式实现,该linux内核移植开源鸿蒙系统的装置可配置于电子设备中。如图1所示,该方法包括:
[0031] 步骤110、获取基于开源鸿蒙系统框架的内核特性构建的适配层代码。
[0032] 其中,适配层代码可以是用户基于开源鸿蒙系统的内核特性预先配置的脚本,用于生成与内核特性对应的镜像文件。内核特性可以是开源鸿蒙系统框架下内核区别于其他系统(linux和android)下内核的特性。内核特性可以具体体现为开源鸿蒙系统内核特有的功能组件。
[0033] 在本发明实施例中,用户可以基于开源鸿蒙系统框架的内核特性,在开源鸿蒙系统与内核之间抽象出一个自定义的适配层,并由开发人员预先配置出该适配层的适配层代码,以提供给板卡厂家,供板卡厂家的linux内核快速移植开源鸿蒙系统。
[0034] 步骤120、在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件。
[0035] 其中,目标板卡可以是当前需要对内核进行开源鸿蒙系统适配的板卡。内核编译关联参数可以是内核编译所需的参数。目标编译工具可以是预先设置的kernel‑devel环境下的编译工具。开源鸿蒙系统目标代码可以是开源鸿蒙优化后的系统代码,用于生成开源鸿蒙系统的镜像文件。目标镜像文件可以是对适配层代码以及开源鸿蒙系统目标代码进行编译得到的镜像文件。
[0036] 在本发明实施例中,目标板卡的linux内核完成初始化之后,进行内核代码鸿蒙化,生成内核镜像文件,即将内核代码转换为开源鸿蒙系统的文件格式,进而利用内核编译关联参数进行编译环境的参数配置,并利用目标编译工具在编译环境下,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件。
[0037] 示例性的,适配层代码编译成的镜像文件可以随开源鸿蒙系统目标代码编译成的镜像文件一起发布,OpenHarmony将不再要求内核本身支撑开源鸿蒙特性,开源鸿蒙系统对不同linux版本的支持将更具有广泛性。
[0038] 步骤130、根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。
[0039] 在本发明实施例中,可以将内核镜像文件以及目标镜像文件烧录至目标板卡,启动目标板卡的开源鸿蒙系统。
[0040] 本发明实施例的技术方案,通过获取基于开源鸿蒙系统框架的内核特性构建的适配层代码,从而在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件,进而根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。基于本方案可以直接复用板卡厂家linux和android系统下适配过驱动的linux内核,通过目标编译工具一键完成linux内核的OpenHarmony支持和内核镜像编译,无需再调试硬件驱动,降低了适配OpenHarmony的技术门槛和经济成本,提高了板卡厂家的积极性,为OpenHarmony在各行业推广铺平了道路,解决了板卡厂家适配OpenHarmony系统的开发时间长以及维护成本高的问题,能够通过一套内核代码,同时支持linux、android和OpenHarmony系统,大大降低了人力成本,并缩短了开发周期。
[0041] 实施例二
[0042] 图2为本发明实施例二提供的一种linux内核移植开源鸿蒙系统的方法的流程图,本实施例以上述实施例为基础进行具体化,给出了获取基于开源鸿蒙系统框架的内核特性构建的适配层代码的具体的可选的实施方式。如图2所示,该方法包括:
[0043] 步骤210、确定开源鸿蒙系统框架中的抽象适配层。
[0044] 其中,抽象适配层可以是开源鸿蒙系统与内核间抽象出的一个层级结构。
[0045] 在本发明实施例中,为了从内核中分离出支持OpenHarmony的功能,在OpenHarmony启动过程中动态加载,而不在内核中加载,可以针对OpenHarmony系统框架的内核特性进行功能分离,即确定出开源鸿蒙系统内核独具的功能组件,抽象为开源鸿蒙系统框架中的抽象适配层。
[0046] 步骤220、获取与抽象适配层中的内核特性关联的适配层代码。
[0047] 在本发明实施例中,可以获取由开发人员基于抽象适配层编写的与内核特性相关的适配层代码。
[0048] 步骤230、在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件。
[0049] 在本发明的一个可选实施例中,在基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件之前,还可以包括:获取与目标板卡的linux内核编译适配的内核编译关联参数;根据内核编译关联参数,构建与linux内核编译环境适配的目标编译工具。
[0050] 具体的,由于不同平台不同厂家的内核编译时用到的定制化参数会不同,因此需要制定与目标板卡的linux内核编译适配的内核编译关联参数,进而基于内核编译关联参数,确定内核编译所需的编译环境,以根据确定的编译环境,搭建出与linux内核编译环境适配的目标编译工具。
[0051] 在本发明的一个可选实施例中,内核编译关联参数,可以包括内核镜像尺寸、指令框架、linux设备树关联目录、镜像文件打包名、镜像输出目录以及内核编译选项。
[0052] 其中,内核镜像尺寸可以是内核镜像大小。示例性的,指令框架可以包括但不限于arm64。linux设备树关联目录可以是与linux设备树关联的目录。linux设备树关联目录可以包括linux设备树入口目录以及linux设备树文件目录。镜像文件打包名为内核镜像打包文件的名称。镜像输出目录可以用于表征镜像文件的导出目录。内核编译选项可以用于让内核自动的加载部分模块。
[0053] 可选的,内核编译关联参数,还可以包括镜像块尺寸、defconfig(加载默认参数)文件名、调试uart(通用异步收发传输器)口寄存器地址以及内核中是否打包ramdisk(虚拟内存盘)等。
[0054] 步骤240、根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。
[0055] 在本发明的一个可选实施例中,在根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统的同时,还可以包括:加载抽象适配层的内核动态模块,在内核动态模块加载时调用导出的内核符号表,并调用抽象适配层的反向注册目标接口进行功能注册。
[0056] 其中,内核动态模块可以是抽象适配层中的内核模块,即抽象适配层中的ko(kernel object,内核模块)组件。内核符号表可以是操作系统启动过程中加载内核动态模块所需的定义符号,可由抽象适配层导出。反向注册目标接口可以是回调内核动态模块相应功能的接口。
[0057] 具体的,在根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统的同时,可以动态加载抽象适配层的内核动态模块,并在内核动态模块加载时调用导出的内核符号表,用来解决开源鸿蒙系统启动过程中加载内核动态模块出现符号未定义的问题,还可以调用抽象适配层的反向注册目标接口进行自身功能注册,以供linux内核通过反向注册目标接口调用内核动态模块。
[0058] 在本发明的一个可选实施例中,在调用抽象适配层的反向注册目标接口进行功能注册之前,还可以包括:确定与内核特性关联的内核动态模块;基于内核动态模块,创建与内核特性匹配的反向注册目标接口。
[0059] 在本发明实施例中,可以基于开源鸿蒙系统的内核特性,确定与开源鸿蒙系统内核特性对应的功能,进而在开源鸿蒙系统内核中筛选出与前述所确定功能对应的组件即内核动态模块,进一步由抽象适配层提供内核动态模块的反向注册接口,即得到与内核特性匹配的反向注册目标接口。
[0060] 在本发明的一个可选实施例中,内核动态模块,可以包括必要动态加载组件以及非必要动态加载组件;其中,必要动态加载组件可以包括系统进程间通信组件以及权限令牌管理组件;非必要动态加载组件可以包括异常日志收集组件、日志缓冲管理组件、宕机日志捕捉组件、鸿蒙日志环形缓冲组件、事件日志缓冲管理组件、用户空间进程看门狗组件、分布式存储和处理的开源文件系统以及共享文件系统中的至少一个。
[0061] 其中,必要动态加载组件可以是需要从内核中解耦的关键组件。非必要动态加载组件可以是选择性从内核中解耦的组件。系统进程间通信组件可以是开源鸿蒙系统框架的内核中的binder模块。权限令牌管理组件可以是开源鸿蒙系统框架的内核中的accesstokenid模块,用于负责开源鸿蒙进程执行和文件访问的权限token管理。异常日志收集组件可以是开源鸿蒙系统框架的内核中的blackbox模块,用于负责异常发生时回调注册的函数,保存日志合计重启。日志缓冲管理组件可以是开源鸿蒙系统框架的内核中的hievent模块,用于负责事件日志缓存管理,依赖hisysevent。宕机日志捕捉组件可以是开源鸿蒙系统框架的内核中的zerohung模块,用于负责捕捉宕机日志。鸿蒙日志环形缓冲组件可以是开源鸿蒙系统框架的内核中的hilog模块,即鸿蒙日志环形buffer。事件日志缓冲管理组件可以是开源鸿蒙系统框架的内核中的hisysevent模块,用于负责事件日志缓冲管理。用户空间进程看门狗组件可以是开源鸿蒙系统框架的内核中的用户空间进程watchdog模块,即Hungtask模块。分布式存储和处理的开源文件系统为开源鸿蒙系统框架的内核中的hmdfs文件系统。共享文件系统可以是开源鸿蒙系统框架的内核中的sharefs文件系统。
[0062] 可选的,非必要动态加载组件还可以包括ramoops模块,和/或pstore模块。其中,ramoops模块用于将日志转存至重启不掉电的内存条中。pstore模块用于抓取内核崩溃日志。
[0063] 示例性的,与内核特性匹配的反向注册目标接口中的部分反向注册接口如下所示:
[0064] int register_blackbox_api(struct blackbox_api*bboxapi);
[0065] void unregister_blackbox_api(void)。
[0066] int register_hungtask_api(struct hungtask_api*htapi);
[0067] void unregister_hungtask_api(void)。
[0068] int register_zerohung_api(struct zerohung_api*zhapi);
[0069] void unregister_zerohung_api(void)。
[0070] int register_pstore_api(struct pstore_api*papi);
[0071] void unregister_pstore_api(void)。
[0072] OpenHarmony社区linux内核与OpenHarmony的系统架构如图3所示,linux内核支持OpenHarmony的内核动态模块包括binder模块、hisysevent模块、hungtask模块、hievent模块、accesstokenid模块、hilog模块、zerohung模块、sharefs模块、hmdfs模块、blackbox模块、ramoops模块以及pstore模块,侵入linux内核各个调度、文件系统等核心功能逻辑中,将OpenHarmony社区kernel中支持OpenHarmony的内核特性的功能分离出来,即将这些内核动态模块模块单独提取出来作为独立组件,不再静态编译进内核,而是脱离内核单独编译为能够动态加载的动态模块打包进开源鸿蒙系统镜像文件中,在系统启动过程中动态加载,达到内核中OpenHarmony相关特性从内核中分离的目的,减轻OpenHarmony与内核的耦合度,解耦后的开源鸿蒙的系统框架参见图4。
[0073] 在本方案中,从OpenHarmony社区内核中提取出支持OpenHarmony的内核特性编译并打包进适配层代码对应的镜像文件(简称为适配层镜像文件),随开源鸿蒙系统目标代码对应的镜像文件(简称为开源鸿蒙系统镜像文件)一起发布,OpenHarmony将不再要求内核本身支撑OpenHarmony特性,OpenHarmony对不同linux版本的支持将更具有广泛性。
[0074] 基于kernel‑devel的目标编译工具,用于将原来支持Android和linux的内核整体移植到OpenHarmony,这些内核已经适配过板级外设驱动的将不需要调试驱动,以此减少了OpenHarmony的南向适配人力投入。
[0075] OpenHarmony系统供应商为板卡厂家提供带有适配层镜像文件的OpenHarmony系统镜像,以及目标编译工具。板卡厂家获取目标编译工具,并对板卡的内核代码鸿蒙化,进一步基于目标编译工具一键适配开源鸿蒙特性和镜像编译,进而将编译好的镜像文件进行烧录,并启动开源鸿蒙系统。板卡厂家不用在OpenHarmony社区的内核版本上做驱动适配,而是直接编译在Linux或android上做过驱动适配的内核版本,和OpenHarmony系统镜像一起使用即可启动OpenHarmony。
[0076] 从原内核中解耦出来的内核特性编译为内核动态模块,在内核初始化完成后,切换OpenHarmony文件系统,启动init过程中加载支持OpenHarmony的内核动态模块,使得OpenHarmony与内核耦合度降低,更有利于OpenHarmony支持不同的内核版本。
[0077] 在本方案中,通过分离内核中支持OpenHarmony的逻辑功能,降低OpenHarmony与内核的耦合度,内核中分离的功能在OpenHarmony启动过程中动态加载,不再内核中加载,且通过目标编译工具达到各厂家不同版本的内核快速适配OpenHarmony的目的,即复用板卡厂家适配过linux系统和android系统的linux内核,来适配OpenHarmony系统,减少在不同linux版本上适配驱动的调试过程。板卡厂家只需要维护一套内核代码版本,同时支持linux、android和OpenHarmony系统,对板卡厂家来说降低了人力成本、缩短了开发周期(原来需要几周到几个月的适配OpenHarmony工作量缩短到几个小时到几天内),推进了OpenHarmony的普及和推广,对形成OpenHarmony生态起到关键作用。
[0078] 本发明实施例的技术方案,通过确定开源鸿蒙系统框架中的抽象适配层,从而将抽象适配层中的内核特性进行编译打包,生成支持鸿蒙系统的适配层代码,进而在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件,进一步根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。基于本方案可以直接复用板卡厂家linux和android系统下适配过驱动的linux内核,通过目标编译工具一键完成linux内核的OpenHarmony支持和内核镜像编译,无需再调试硬件驱动,降低了适配OpenHarmony的技术门槛和经济成本,提高了板卡厂家的积极性,为OpenHarmony在各行业推广铺平了道路,解决了板卡厂家适配OpenHarmony系统的开发时间长以及维护成本高的问题,能够通过一套内核代码,同时支持linux、android和OpenHarmony系统,大大降低了人力成本,并缩短了开发周期。
[0079] 实施例三
[0080] 图5为本发明实施例三提供的一种linux内核移植开源鸿蒙系统的装置的结构示意图。如图5所示,该装置包括:
[0081] 适配层代码获取模块310,用于获取基于开源鸿蒙系统框架的内核特性构建的适配层代码;
[0082] 编译模块320,用于在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件;
[0083] 系统启动模块330,用于根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。
[0084] 本发明实施例的技术方案,通过获取基于开源鸿蒙系统框架的内核特性构建的适配层代码,从而在目标板卡的linux内核进行内核代码鸿蒙化,得到内核镜像文件,并基于内核编译关联参数以及目标编译工具,对适配层代码以及开源鸿蒙系统目标代码进行编译,得到目标镜像文件,进而根据内核镜像文件以及目标镜像文件,启动目标板卡的开源鸿蒙系统。基于本方案可以直接复用板卡厂家linux和android系统下适配过驱动的linux内核,通过目标编译工具一键完成linux内核的OpenHarmony支持和内核镜像编译,无需再调试硬件驱动,降低了适配OpenHarmony的技术门槛和经济成本,提高了板卡厂家的积极性,为OpenHarmony在各行业推广铺平了道路,解决了板卡厂家适配OpenHarmony系统的开发时间长以及维护成本高的问题,能够通过一套内核代码,同时支持linux、android和OpenHarmony系统,大大降低了人力成本,并缩短了开发周期。
[0085] 可选的,适配层代码获取模块310,具体用于确定开源鸿蒙系统框架中的抽象适配层;将所述抽象适配层中的内核特性进行编译打包,生成支持鸿蒙系统的适配层代码。
[0086] 可选的,linux内核移植开源鸿蒙系统的装置,还包括启动加载与接口获取模块,用于加载抽象适配层的内核动态模块,在内核动态模块加载时调用导出的内核符号表,并调用所述抽象适配层的反向注册目标接口进行功能注册。
[0087] 可选的,linux内核移植开源鸿蒙系统的装置还包括获取与所述目标板卡的linux内核编译适配的内核编译关联参数;根据所述内核编译关联参数,构建与linux内核编译环境适配的目标编译工具。
[0088] 可选的,linux内核移植开源鸿蒙系统的装置,还包括反向注册目标接口创建模块,用于确定与所述内核特性关联的内核动态模块;基于所述内核动态模块,创建与所述内核特性匹配的反向注册目标接口。
[0089] 可选的,内核编译关联参数,包括内核镜像尺寸、指令框架、linux设备树关联目录、镜像文件打包名、镜像输出目录以及内核编译选项。
[0090] 可选的,内核动态模块,包括必要动态加载组件以及非必要动态加载组件;其中,所述必要动态加载组件包括系统进程间通信组件以及权限令牌管理组件;所述非必要动态加载组件包括异常日志收集组件、日志缓冲管理组件、宕机日志捕捉组件、鸿蒙日志环形缓冲组件、事件日志缓冲管理组件、用户空间进程看门狗组件、分布式存储和处理的开源文件系统以及共享文件系统中的至少一个。
[0091] 本发明实施例所提供的linux内核移植开源鸿蒙系统的装置可执行本发明任意实施例所提供的linux内核移植开源鸿蒙系统的方法,具备执行方法相应的功能模块和有益效果。
[0092] 实施例四
[0093] 图6示出了可以用来实施本发明的实施例的电子设备的结构示意图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字助理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
[0094] 如图6所示,电子设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储电子设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。
[0095] 电子设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许电子设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0096] 处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如linux内核移植开源鸿蒙系统的方法。
[0097] 在一些实施例中,linux内核移植开源鸿蒙系统的方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到电子设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的linux内核移植开源鸿蒙系统的方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行linux内核移植开源鸿蒙系统的方法。
[0098] 本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0099] 用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0100] 在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD‑ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0101] 为了提供与用户的交互,可以在电子设备上实施此处描述的系统和技术,该电子设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给电子设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0102] 可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
[0103] 计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端‑服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务器,存在的管理难度大,业务扩展性弱的缺陷。
[0104] 应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
[0105] 上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。