OpenHarmony IPC 服務(wù)的動(dòng)態(tài)加載(拉起)流程(L2)
??想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:??
簡介
IPC通信,通常包括客服端和服務(wù)端。服務(wù)端的拉起: 通常都配置成開機(jī)啟動(dòng)拉起,開機(jī)的時(shí)候init進(jìn)程把服務(wù)拉起。此文章介紹服務(wù)的另外一種拉起方式動(dòng)態(tài)加載:服務(wù)不配置成開機(jī)拉起,在客戶端運(yùn)行的時(shí)候,去拉起對(duì)應(yīng)的服務(wù)。示例以openharmony 3.1版本為基礎(chǔ)實(shí)現(xiàn)的。
- 動(dòng)態(tài)加載的流程解析。
- 動(dòng)態(tài)加載的示例。
- 動(dòng)態(tài)加載的測試。
- 本用例開發(fā)板(3516開發(fā)板:HiSpark_AI_Hi3516D_One_Light_VER.B開發(fā)板上測試)。
如果需要對(duì)下IPC有更全面的了解,需要參考下面三篇文檔:
服務(wù)的開機(jī)啟動(dòng)配置參考文檔???OpenHarmony SA 動(dòng)態(tài)庫服務(wù) 拉起的main入口???IPC的通信流程參考??Openharmony IPC通信???。
如何實(shí)現(xiàn)一個(gè)IPC客戶端和服務(wù)端參考???Openharmony 實(shí)現(xiàn)的一個(gè)IPC的客戶端和服務(wù)端??。
動(dòng)態(tài)加載數(shù)據(jù)流程解析
動(dòng)態(tài)加載涉及到4個(gè)進(jìn)程間的數(shù)據(jù)流轉(zhuǎn)。對(duì)于init的數(shù)據(jù)處理到拉起服務(wù)端過程進(jìn)行大致梳理,如果發(fā)現(xiàn)有問題的的可以交流,把這個(gè)流程做更正確更精準(zhǔn)一些。流程可以參考下圖+結(jié)合后面的示例分析。
- 客戶端(myappclient) 發(fā)起拉起 服務(wù)命令,最后init拉起服務(wù)端(myappservice_sa)。
- 服務(wù)拉啟之后,客戶端和服務(wù)端 進(jìn)行IPC通信。
流程圖工具vscode+plantUML(插件)。
init拉起服務(wù)的日志:hilog -t kmsg。
動(dòng)態(tài)加載示例
子系統(tǒng)配置
build\subsystem_config.json:
"myapp": {
"path":"myapptest",
"name": "myapp"
}
產(chǎn)品配置
productdefine\common\products\Hi3516DV300.json:
"myapp:myappservice_test":{}
代碼
代碼目錄結(jié)構(gòu)
myapptest放在代碼根目錄,代碼見附件。
服務(wù)ID的添加
服務(wù)ID有統(tǒng)一的頭文件。
foundation\distributedschedule\samgr\interfaces\innerkits\samgr_proxy\include\system_ability_definition.h:
MY_APP_SERVICE_ID = 9000,
...
{ MY_APP_SERVICE_ID, "MyAppService"},
客戶端動(dòng)態(tài)加載服務(wù)的關(guān)鍵代碼段,見附件:
// 加載動(dòng)態(tài)庫服務(wù)
sptr<CallBack> callback(new CallBack());
saMgr->LoadSystemAbility(MY_APP_SERVICE_ID, callback);
// 阻塞,等待isload傳入值
bool laodResult = callback->getLoadResult();
(void)laodResult;
編譯
要全量編譯9000.xml 才能生產(chǎn)myappservice_sa.xml。
編譯命令:./build.sh --product-name Hi3516DV300 --ccache。
修改開發(fā)板的讀寫權(quán)限
進(jìn)入終端:hdc_std.exe shell
修改權(quán)限:mount -o remount,rw /
添加test目錄:mkdir /data/test/
將編譯文件發(fā)送到開發(fā)板對(duì)應(yīng)目錄:
動(dòng)態(tài)服務(wù)庫:libmyappservice.z.so 發(fā)送到開發(fā)板目錄:/system/lib/
動(dòng)態(tài)庫的xml文件:myappservice_sa.xml 發(fā)送到開發(fā)板目錄:/system/profile/
啟動(dòng)配置:myappservice_sa.cfg 發(fā)送到開發(fā)板目錄:/system/etc/init/
客戶端:myappclient 發(fā)送到開發(fā)板目錄:/data/test/
修改客戶端可執(zhí)行權(quán)限(其他文件權(quán)限不夠也需要對(duì)于修改,這里只以客戶端為例)。
切到對(duì)應(yīng)的目錄:cd /data/test/
修改成可執(zhí)行:chmod 0755 myappclient
測試
第一步:重啟開發(fā)板
終端1:
第二步:查詢服務(wù)是否啟動(dòng)ps -A | grep myappservice_sa, 沒有啟動(dòng)。
終端2:
第三步:運(yùn)行客戶端/data/test/myappclient。
終端1:
第四步:查詢服務(wù)是否啟動(dòng)ps -A | grep myappservice_sa, 啟動(dòng),并且客戶端和服務(wù)端的交互結(jié)果也已經(jīng)輸出。
文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載。
https://ost.51cto.com/resource/2112。
https://ost.51cto.com/resource/2113。