OpenHarmony SA 動(dòng)態(tài)庫(kù)服務(wù)拉起的main入口
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
簡(jiǎn)介
OpenHarmony 很多服務(wù)都是編譯成動(dòng)態(tài)庫(kù), 動(dòng)態(tài)庫(kù)服務(wù),沒(méi)有main函數(shù)入口。服務(wù)的拉起的入口在哪?
以在線(xiàn)升級(jí)服務(wù)為例說(shuō)明服務(wù)入口,說(shuō)明如下:
一. 服務(wù)的動(dòng)態(tài)庫(kù):libupdateservice.z.so
這個(gè)編譯代碼里面有,學(xué)習(xí)者可以在源代碼中去看:
配置路徑:base\update\updateservice\engine\BUILD.gn
二. main入口:sa_main
sa_main是含有main入口的獨(dú)立可執(zhí)行文件。學(xué)習(xí)者可以自己在代碼中去看:
配置路徑:foundation\distributedschedule\safwk\services\safwk\BUILD.gn
三. sa_main如何加載 libupdateservice.z.so
updater_sa.xml配置了動(dòng)態(tài)庫(kù)libupdateservice.z.so的各項(xiàng)信息。
sa_main通過(guò)讀取解析updater_sa.xml, 把動(dòng)態(tài)庫(kù)libupdateservice.z.so加載到自身進(jìn)程中來(lái)。
即運(yùn)行命令:/system/bin/sa_main /system/profile/updater_sa.xml
1. 動(dòng)態(tài)庫(kù)服務(wù)的編譯配置
1.1 動(dòng)態(tài)庫(kù)的編譯配置
動(dòng)態(tài)庫(kù)編譯配置:
- base\update\updateservice\engine\BUILD.gn
動(dòng)態(tài)庫(kù)編譯后的名稱(chēng):
- libupdateservice.z.so
1.2 xml的編譯配置
1.2.1 xml的原始文件
原始xml的文件路徑:base\update\updateservice\engine\sa_profile\3006.xml
內(nèi)容:
- <info>
- <process>updater_sa</process>
- <systemability>
- <name>3006</name>
- <libpath>libupdateservice.z.so</libpath>
- <run-on-create>true</run-on-create>
- <distributed>false</distributed>
- <dump-level>1</dump-level>
- </systemability>
- </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:
是服務(wù)對(duì)應(yīng)的動(dòng)態(tài)庫(kù)
1.2.2 xml的編譯配置BUILD.gn
編譯文件配置路徑:base\update\updateservice\engine\sa_profile\BUILD.gn
內(nèi)容:
- 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
文件路徑:base\update\updater\ohos.build
內(nèi)容如下:

1.2.4 編譯成功生產(chǎn)的文件
1.2.4.1 編譯后Ubuntu路徑:
out/ohos-arm-release/packages/phone/system/profile/updater_sa.xml
1.2.4.2 內(nèi)容:
- <?xml version="1.0" encoding="utf-8"?>
- <info>
- <process>updater_sa</process>
- <loadlibs>
- <libpath>libupdateservice.z.so</libpath>
- </loadlibs>
- <systemability>
- <name>3006</name>
- <libpath>libupdateservice.z.so</libpath>
- <run-on-create>true</run-on-create>
- <distributed>false</distributed>
- <dump-level>1</dump-level>
- </systemability>
- </info>
1.2.4.3 燒入開(kāi)發(fā)板后的路徑:
system/profile/updater_sa.xml

2. 服務(wù)的啟動(dòng)配置
2.1 服務(wù)啟動(dòng)配置
配置文件路徑:base\update\updateservice\engine\etc\updater_sa.cfg
文件內(nèi)容如下:
- {
- "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 啟動(dòng)編譯配置
配置文件路徑:base\update\updateservice\engine\BUILD.gn
內(nèi)容如下:

2.3 編譯成功生成的文件
編譯后Ubuntu路徑:out\ohos-arm-release\packages\phone\system\etc\init\updater_sa.cfg
燒入開(kāi)發(fā)板后的路徑:system\etc\init\updater_sa.cfg
3 運(yùn)行過(guò)程
每次開(kāi)機(jī),init階段會(huì)讀取配置updater_sa.cfg,啟動(dòng)updater_sa。即拉起服務(wù)動(dòng)態(tài)庫(kù)libupdateservice.z.so
進(jìn)程啟動(dòng)查詢(xún):ps -A | grep updater
串口終端顯示:

重新拉取服務(wù)
運(yùn)行hdc_std.exe shell 終端運(yùn)行 sa_main /system/profile/updater_sa.xml:

串口終端查詢(xún),多運(yùn)行了一個(gè)update_sa進(jìn)程:

服務(wù)拉起注冊(cè)到SAMGR進(jìn)程的日志:

服務(wù)拉起之后:
客戶(hù)端就可以與服務(wù)端通信了,客戶(hù)端獲取與服務(wù)端通信的對(duì)象 代碼塊如下所示:
想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)