简介
系统服务管理子系统实现系统服务框架,提供系统服务的启动、注册、查询功能,提供查询跨设备的分布式系统服务。
系统架构
目录
/foundation/distributedschedule
├── safwk # 系统服务框架模块
├── samgr # 系统服务管理模块
├── safwk_lite # 轻量foundation进程
├── samgr_lite # 轻量系统服务管理模块
这里我们介绍的是 lite 轻量级的系统服务管理。
safwk_lite
简介
safwk_lite 模块负责提供基础服务运行的空进程。
目录
├── BUILD.gn
├── readme.md
├── LICENSE
├── src
└── main.c
使用
在 foundation 进程中添加服务,按照服务的模板写完服务后在 BUILD.gn 中添加依赖即可:
deps = [
"${aafwk_lite_path}/services/abilitymgr_lite:abilityms",
"${appexecfwk_lite_path}/services/bundlemgr_lite:bundlems",
"//base/hiviewdfx/hilog_lite/frameworks/featured:hilog_shared",
"//base/security/permission_lite/services/ipc_auth:ipc_auth_target",
"//base/security/permission_lite/services/pms:pms_target",
"//foundation/ability/dmsfwk_lite:dtbschedmgr",
"//foundation/distributedschedule/samgr_lite/samgr_server:server",
]
samgr_lite
简介
由于平台资源有限,且硬件平台多样,因此需要屏蔽不同硬件架构和平台资源的不同、以及运行形态的不同,提供统一化的系统服务开发框架。根据 RISC-V、Cortex-M、Cortex-A 不同硬件平台,分为两种硬件平台,以下简称 M 核、A 核。
●M 核:处理器架构为 Cortex-M 或同等处理能力的硬件平台,系统内存一般低于 512KB,无文件系统或者仅提供一个可有限使用的轻量级文件系统,遵循 CMSIS 接口规范。
●A 核:处理器架构为 Cortex-A 或同等处理能力的硬件平台,内存资源大于 512KB,文件系统完善,可存储大量数据,遵循 POSIX 接口规范。
系统服务框架基于面向服务的架构,提供了服务开发、服务的子功能开发、对外接口的开发、以及多服务共进程、进程间服务调用等开发能力。其中:
●M 核:包含服务开发、服务的子功能开发、对外接口的开发以及多服务共进程的开发框架。
●A 核:在 M 核能力基础之上,包含了进程间服务调用、进程间服务调用权限控制、进程间服务接口的开发等能力。
面向服务的架构:
●Provider:服务的提供者,为系统提供能力(对外接口)。
●Consumer:服务的消费者,调用服务提供的功能(对外接口)。
●Samgr:作为中介者,管理 Provider 提供的能力,同时帮助 Consumer 发现 Provider 的能力。
系统服务开发框架主体对象:
●SamgrLite:主要提供服务的注册与发现能力。
●Service:开发服务时,需要实现的服务的生命周期接口。
●Feature:开发功能时,需要实现的功能的生命周期接口。
●IUnknown:基于 IUnknown 开发服务或功能的对外接口。
●IClientProxy:IPC 调用时,消费者的消息发送代理。
●IServerProxy:IPC 调用时,开发者需要实现提供者的消息处理接口。
接口简介:
约束
●系统服务开发框架统一使用 C 开发。
●同进程内服务间调用统一使用 IUnknown 接口对外,消息接口统一由 IUnknown 接口传递给本服务。
●服务名和功能名必需使用常量字符串且长度小于 16 个字节。
●M 核:系统依赖上 bootstrap 服务,在系统启动函数中调用 OHOS_SystemInit()函数,此函数在 foundation\distributedschedule\safwk_lite\src\main.c 中,将跳转至 ●foundation\distributedschedule\samgr_lite\samgr\source\samgr_lite.c 中的 SAMGR_Bootstrap()函数。
●A 核:系统依赖 samgr 库,在 main 函数中调用 SAMGR_Bootstrap()函数。
重要概念的介绍
系统服务管理的业务逻辑的实现围绕着三大概念展开,分别是服务(Service)、功能(Feature)和功能接口 API(Iunknown)。下面将对这些概念进行讲解。
服务(Service),功能(Feature),对外接口(IUnknown)及实例接口(impl)
服务(Service)是业务逻辑的核心,是一组功能或操作的集合。下面的结构体定义了服务的相关函数指针,可以在 foundation\distributedschedule\samgr_lite\interfaces\kits\samgr\service.h 中看到。
struct Service {
const char *(*GetName)(Service *service); //获取服务名称
BOOL (*Initialize)(Service *service, Identity identity); //初始化服务
BOOL (*MessageHandle)(Service *service, Request *request); //处理服务的消息
TaskConfig (*GetTaskConfig)(Service *service); //获取服务的任务配置
};
一个服务可以拥有多个功能(Feature),功能是业务的执行单元。由各式各样的功能组合成一个完整的服务。下面的结构体定义了功能接口的相关函数指针。可以在 found