OpenHarmony开源社区
直播中

王浩

7年用户 1339经验值
私信 关注
[经验]

OpenHarmony动态库Sa服务拉起的main入口说明

简介
OpenHarmony 很多服务都是编译成动态库, 动态库服务,没有main函数入口。服务的拉起的入口在哪?
以在线升级服务为例说明服务入口,说明如下:
一. 服务的动态库:libupdateservice.z.so
这个编译代码里面有,学习者可以在源代码中去看:
配置路径:baseupdateupdateserviceengineBUILD.gn
二. main入口:sa_main
sa_main是含有main入口的独立可执行文件。学习者可以自己在代码中去看:
配置路径:foundationdistributedschedulesafwkservicessafwkBUILD.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 动态库的编译配置
动态库编译配置:
baseupdateupdateserviceengineBUILD.gn
动态库编译后的名称:
libupdateservice.z.so
1.2 xml的编译配置
1.2.1 xml的原始文件
原始xml的文件路径:baseupdateupdateserviceenginesa_profile3006.xml 内容:

    updater_sa
   
        3006
        libupdateservice.z.so
        true
        false
        1
   


1.2.1.1 3006:
是UPDATE_DISTRIBUTED_SERVICE_ID的值,该值定义在 utilssystemsafwk
ativeincludesystem_ability_definition.h中。
1.2.1.2 libupdateservice.z.so:
是服务对应的动态库
1.2.2 xml的编译配置BUILD.gn
编译文件配置路径:baseupdateupdateserviceenginesa_profileBUILD.gn 内容:
import("//build/ohos/sa_profile/sa_profile.gni")
ohos_sa_profile("updater_sa_profile") {
  sources = [ "3006.xml" ]
  part_name = "updater"
}
1.2.3 编译配置ohos.build
文件路径:baseupdateupdaterohos.build 内容如下:

1.2.4 编译成功生产的文件
1.2.4.1 编译后Ubuntu路径:
out/ohos-arm-release/packages/phone/system/profile/updater_sa.xml
1.2.4.2 内容:


    updater_sa
   
        libupdateservice.z.so
   

   
        3006
        libupdateservice.z.so
        true
        false
        1
   


1.2.4.3 烧入开发板后的路径:
system/profile/updater_sa.xml

2. 服务的启动配置
2.1 服务启动配置
配置文件路径:baseupdateupdateserviceengineetcupdater_sa.cfg 文件内容如下:
{
    "jobs" : [{
            "name" : "boot",
            "cmds" : [
                "start updater_sa"
            ]
        }
    ],
    "services" : [{
            "name" : "updater_sa",
            "path" : ["/system/bin/sa_main", "/system/profile/updater_sa.xml"],
            "uid" : "system",
            "gid" : ["system", "shell"]
        }
    ]
}
2.2 启动编译配置
配置文件路径:baseupdateupdateserviceengineBUILD.gn 内容如下:

2.3 编译成功生成的文件
编译后Ubuntu路径:outohos-arm-releasepackagesphonesystemetcinitupdater_sa.cfg 烧入开发板后的路径:systemetcinitupdater_sa.cfg
3 运行过程
每次开机,init阶段会读取配置updater_sa.cfg,启动updater_sa。即拉起服务动态库libupdateservice.z.so 进程启动查询:ps -A | grep updater 串口终端显示:

重新拉取服务
运行hdc_std.exe shell 终端运行 sa_main /system/profile/updater_sa.xml:

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

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

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


更多回帖

发帖
×
20
完善资料,
赚取积分