当前位置: 首页 > 科技观察

OpenHarmonyIPC服务(L2)动态加载(上拉)过程

时间:2023-03-12 04:22:09 科技观察

更多开源内容请访问:开源基础软件社区https://ost.51cto.comIPC通信介绍,通常包括客服和服务器。服务器的拉起:一般配置为开机自启动,开机时init进程启动服务。本文介绍另一种服务的动态加载方式:不配置服务启动时启动,在客户端运行时启动相应的服务。该示例基于openharmony3.1版本实现。动态加载的过程分析。动态加载示例。动态加载测试。本用例开发板(3516开发板:HiSpark_AI_Hi3516D_One_Light_VER.B开发板测试)。如果需要更全面的了解IPC,需要参考以下三个文档:服务启动配置参考文档OpenHarmonySA动态库服务拉起主入口IPC通信流程参考OpenharmonyIPC通信。如何实现IPC客户端和服务器参考Openharmony实现的IPC客户端和服务器。动态加载数据流程分析动态加载涉及到4个流程之间的数据流转。大致梳理一下从init数据处理到拉起服务器的过程。如果发现问题,可以进行沟通,让这个过程更加正确和精确。流程可以参考下图+结合下面实例分析。客户端(myappclient)发起拉取服务命令,最后init拉取服务端(myappservice_sa)。服务启动后,客户端与服务端进行IPC通信。流程图工具vscode+plantUML(插件)。init拉取服务的日志:hilog-tkmsg。动态加载示例子系统配置build\subsystem_config.json:"myapp":{"path":"myapptest","name":"myapp"}产品配置productdefine\common\products\Hi3516DV300.json:"myapp:myappservice_test":{}代码代码目录结构myapptest放在代码根目录下,代码见附件。ServiceIDAddServiceID有一个统一的头文件。foundation\distributedschedule\samgr\interfaces\innerkits\samgr_proxy\include\system_ability_definition.h:MY_APP_SERVICE_ID=9000,...{MY_APP_SERVICE_ID,"MyAppService"},客户端动态加载服务的关键代码段,见附件://加载动态库服务sptrcallback(newCallBack());saMgr->LoadSystemAbility(MY_APP_SERVICE_ID,回调);//阻塞,等待isload传入值boollaodResult=callback->getLoadResult();(无效)laodResult;编译为完全编译9000.xml以生成myappservice_sa.xml。编译命令:./build.sh--product-nameHi3516DV300--ccache。修改开发板的读写权限进入终端:hdc_std.exeshell修改权限:mount-oremount,rw/添加测试目录:mkdir/data/test/将编译好的文件发送到对应的目录下开发板:动态服务库:libmyappservice。z.so下发到开发板目录:/system/lib/动态库xml文件:myappservice_sa.xml下发到开发板目录:/system/profile/startup配置:myappservice_sa.cfg下发到开发板目录:/system/etc/init/Client:myappclient发送到开发板目录:/data/test/修改客户端的可执行权限(如果其他文件的权限不够需要修改,这里我们只以客户为例)。切换到对应目录:cd/data/test/修改为可执行:chmod0755myappclient测试第一步:重启开发板终端一:第二步:查看服务是否启动ps-A|grepmyappservice_sa,它没有启动。终端2:第三步:运行client/data/test/myappclient。终端一:第四步:查询服务是否启动ps-A|grepmyappservice_sa,启动,客户端和服务端的交互结果也已经输出。动态加载官网。文章相关附件可点击下方原文链接下载。https://ost.51cto.com/resource/2112。https://ost.51cto.com/resource/2113。了解更多开源知识,请访问:开源基础软件社区https://ost.51cto.com。