16

OpenHarmony IPC 服务的动态加载(拉起)流程(L2)-51CTO.COM

 2 years ago
source link: https://os.51cto.com/article/714074.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

OpenHarmony IPC 服务的动态加载(拉起)流程(L2)-51CTO.COM

OpenHarmony IPC 服务的动态加载(拉起)流程(L2)
作者:拓维信息_青松 2022-07-14 19:03:33
此文章介绍服务的另外一种拉起方式动态加载:服务不配置成开机拉起,在客户端运行的时候,去拉起对应的服务。
d5faace52c47d9b2e831780d8d22717b49afeb.png

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

IPC通信,通常包括客服端和服务端。服务端的拉起: 通常都配置成开机启动拉起,开机的时候init进程把服务拉起。此文章介绍服务的另外一种拉起方式动态加载:服务不配置成开机拉起,在客户端运行的时候,去拉起对应的服务。示例以openharmony 3.1版本为基础实现的。

动态加载数据流程解析

动态加载涉及到4个进程间的数据流转。对于init的数据处理到拉起服务端过程进行大致梳理,如果发现有问题的的可以交流,把这个流程做更正确更精准一些。流程可以参考下图+结合后面的示例分析。

#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区
  • 客户端(myappclient) 发起拉起 服务命令,最后init拉起服务端(myappservice_sa)。
  • 服务拉启之后,客户端和服务端 进行IPC通信。
    流程图工具vscode+plantUML(插件)。
    init拉起服务的日志:hilog -t kmsg。
resize,w_820,h_142

动态加载示例

子系统配置

build\subsystem_config.json:

"myapp": {
    "path":"myapptest",
    "name": "myapp"
  }
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

productdefine\common\products\Hi3516DV300.json:

"myapp:myappservice_test":{}
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

代码目录结构

#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

myapptest放在代码根目录,代码见附件。

服务ID的添加

服务ID有统一的头文件。

foundation\distributedschedule\samgr\interfaces\innerkits\samgr_proxy\include\system_ability_definition.h:

MY_APP_SERVICE_ID                                = 9000,
...
{ MY_APP_SERVICE_ID, "MyAppService"},
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

客户端动态加载服务的关键代码段,见附件:

// 加载动态库服务
    sptr<CallBack> callback(new CallBack());
    saMgr->LoadSystemAbility(MY_APP_SERVICE_ID, callback);

    // 阻塞,等待isload传入值
    bool laodResult = callback->getLoadResult();
    (void)laodResult;

要全量编译9000.xml 才能生产myappservice_sa.xml。

编译命令:./build.sh --product-name Hi3516DV300 --ccache。

修改开发板的读写权限

进入终端:hdc_std.exe shell
修改权限:mount -o remount,rw /
添加test目录:mkdir /data/test/
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

将编译文件发送到开发板对应目录:

动态服务库:libmyappservice.z.so 发送到开发板目录:/system/lib/
动态库的xml文件:myappservice_sa.xml 发送到开发板目录:/system/profile/
启动配置:myappservice_sa.cfg 发送到开发板目录:/system/etc/init/
客户端:myappclient 发送到开发板目录:/data/test/
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

修改客户端可执行权限(其他文件权限不够也需要对于修改,这里只以客户端为例)。

切到对应的目录:cd /data/test/
修改成可执行:chmod 0755 myappclient
#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

第一步:重启开发板

第二步:查询服务是否启动ps -A | grep myappservice_sa, 没有启动。

第三步:运行客户端/data/test/myappclient。

第四步:查询服务是否启动ps -A | grep myappservice_sa, 启动,并且客户端和服务端的交互结果也已经输出。

#夏日挑战赛# OpenHarmony IPC服务的动态加载(拉起)流程(L2)-开源基础软件社区

​动态加载的官网​​。

文章相关附件可以点击下面的原文链接前往下载。

https://ost.51cto.com/resource/2112。

https://ost.51cto.com/resource/2113。

​想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com​​。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK