当前位置:首页 > 通信资讯 > 正文

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

简介

OpenHarmony 很多服务都是编译成动态库, 动态库服务,没有main函数入口。服务的拉起的入口在哪?

以在线升级服务为例说明服务入口,说明如下:

一. 服务的动态库:libupdateservice.z.so

这个编译代码里面有,学习者可以在源代码中去看:

配置路径:base\update\updateservice\engine\BUILD.gn

二. main入口:sa_main

sa_main是含有main入口的独立可执行文件。学习者可以自己在代码中去看:

配置路径:foundation\distributedschedule\safwk\services\safwk\BUILD.gn

三. sa_main如何加载 libupdateservice.z.so

updater_sa.xml配置了动态库libupdateservice.z.so的各项信息。

sa_main通过读取解析updater_sa.xml, 把动态库libupdateservice.z.so加载到自身进程中来。

即运行命令:/system/bin/sa_main /system/profile/updater_sa.xml

1. 动态库服务的编译配置

1.1 动态库的编译配置

动态库编译配置:

  1. base\update\updateservice\engine\BUILD.gn

动态库编译后的名称:

  1. libupdateservice.z.so

1.2 xml的编译配置

1.2.1 xml的原始文件

原始xml的文件路径:base\update\updateservice\engine\sa_profile\3006.xml

内容:

  1. <info>
  2. <process>updater_sa</process>
  3. <systemability>
  4. <name>3006</name>
  5. <libpath>libupdateservice.z.so</libpath>
  6. <run-on-create>true</run-on-create>
  7. <distributed>false</distributed>
  8. <dump-level>1</dump-level>
  9. </systemability>
  10. </info>

1.2.1.1 3006:

是UPDATE_DISTRIBUTED_SERVICE_ID的值,该值定义在

utils\system\safwk\native\include\system_ability_definition.h中。

1.2.1.2 libupdateservice.z.so:

是服务对应的动态库

1.2.2 xml的编译配置BUILD.gn

编译文件配置路径:base\update\updateservice\engine\sa_profile\BUILD.gn

内容:

  1. import("//build/ohos/sa_profile/sa_profile.gni")
  2. ohos_sa_profile("updater_sa_profile"){
  3. sources=["3006.xml"]
  4. part_name="updater"
  5. }

1.2.3 编译配置ohos.build

文件路径:base\update\updater\ohos.build

内容如下:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

1.2.4 编译成功生产的文件

1.2.4.1 编译后Ubuntu路径:

out/ohos-arm-release/packages/phone/system/profile/updater_sa.xml

1.2.4.2 内容:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <info>
  3. <process>updater_sa</process>
  4. <loadlibs>
  5. <libpath>libupdateservice.z.so</libpath>
  6. </loadlibs>
  7. <systemability>
  8. <name>3006</name>
  9. <libpath>libupdateservice.z.so</libpath>
  10. <run-on-create>true</run-on-create>
  11. <distributed>false</distributed>
  12. <dump-level>1</dump-level>
  13. </systemability>
  14. </info>

1.2.4.3 烧入开发板后的路径:

system/profile/updater_sa.xml

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

2. 服务的启动配置

2.1 服务启动配置

配置文件路径:base\update\updateservice\engine\etc\updater_sa.cfg

文件内容如下:

  1. {
  2. "jobs":[{
  3. "name":"boot",
  4. "cmds":[
  5. "startupdater_sa"
  6. ]
  7. }
  8. ],
  9. "services":[{
  10. "name":"updater_sa",
  11. "path":["/system/bin/sa_main","/system/profile/updater_sa.xml"],
  12. "uid":"system",
  13. "gid":["system","shell"]
  14. }
  15. ]
  16. }

2.2 启动编译配置

配置文件路径:base\update\updateservice\engine\BUILD.gn

内容如下:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

2.3 编译成功生成的文件

编译后Ubuntu路径:out\ohos-arm-release\packages\phone\system\etc\init\updater_sa.cfg

烧入开发板后的路径:system\etc\init\updater_sa.cfg

3 运行过程

每次开机,init阶段会读取配置updater_sa.cfg,启动updater_sa。即拉起服务动态库libupdateservice.z.so

进程启动查询:ps -A | grep updater

串口终端显示:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

重新拉取服务

运行hdc_std.exe shell 终端运行 sa_main /system/profile/updater_sa.xml:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

串口终端查询,多运行了一个update_sa进程:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

服务拉起注册到SAMGR进程的日志:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

服务拉起之后:

客户端就可以与服务端通信了,客户端获取与服务端通信的对象 代码块如下所示:

openharmony sa 动态库服务拉起的ma(openharmony sa 动态库服务拉起的ma)

原文链接:https://harmonyos.51cto.com

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。