
OpenHarmony——启动恢复子系统
启动恢复子系统
简介
启动恢复负责在内核启动之后到应用启动之前的系统关键进程和服务的启动过程。涉及以下组件:
-
init组件
支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300平台。
负责处理从内核加载第一个用户态进程开始,到第一个应用程序启动之间的系统服务进程启动过程。启动恢复子系统除负责加载各系统关键进程之外,还需在启动的同时设置其对应权限,并在子进程启动后对指定进程实行保活(若进程意外退出要重新启动),对于特殊进程意外退出时,启动恢复子系统还要执行系统复位操作。
-
appspawn应用孵化器组件
支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300平台。
负责接受应用程序框架的命令孵化应用进程,设置其对应权限,并调用应用程序框架的入口。
-
bootstrap启动引导组件
支持使用LiteOS-M内核的平台,当前包括:Hi3861平台。
提供了各服务和功能的启动入口标识。在SAMGR启动时,会调用boostrap标识的入口函数,并启动系统服务。
-
syspara系统属性组件
负责提供获取与设置操作系统相关的系统属性。
LiteOS-M内核和LiteOS-A内核的平台,包括:Hi3861平台,Hi3516DV300平台,Hi3518EV300平台。支持的系统属性包括:默认系统属性、OEM厂商系统属性和自定义系统属性。OEM厂商部分仅提供默认值,具体值需OEM产品方按需进行调整,详见“使用说明”部分。
目录
表 1 启动恢复源代码目录结构
应用孵化器组件,appspawn进程,负责通过IPC机制接收Ability Manager Service消息,然后根据消息解析结果启动应用进程并赋予其对应权限。 |
||
init组件,init进程,内核完成初始化后加载的第一个用户态进程,启动后解析/etc/init.cfg配置文件,并根据解析结果拉起其他系统关键进程,同时分别赋予其对应权限。 |
||
base/startup/
├── appspawn_lite # 应用孵化器组件
│ └── services
│ ├── include # 应用孵化器组件头文件目录
│ ├── src # 应用孵化器组件源文件目录
│ └── test # 应用孵化器组件测试用例源文件目录
├── bootstrap_lite # 启动引导组件
│ └── services
│ └── source # 启动引导组件源文件目录
├── init_lite # init组件
│ └── services
│ ├── include # init组件头文件目录
│ ├── src # init组件源文件目录
│ └── test # init组件测试用例源文件目录
└── syspara_lite # 系统属性组件
├── frameworks # 系统属性组件源文件目录
├── hals # 系统属性组件硬件抽象层头文件目录
└── interfaces # 系统属性组件对外接口目录
约束
系统属性:OEM厂商相关仅提供默认值,具体值需产品方按需进行调整。
使用说明
-
init的配置文件
init配置文件包含了所有需要由init进程启动的系统关键服务的服务名、可执行文件路径、权限和其他属性信息,该文件位于代码仓库/vendor/hisilicon/hispark_aries/init_configs/目录,部署在/etc/下,文件名称为init.cfg,采用json格式,文件大小目前限制在100KB以内。
init进程启动后首先读取/etc/init.cfg,然后解析其json内容,并根据解析结果依次加载系统服务。配置文件格式和内容说明如下所示:
表 2 cmds支持列表
需要注意的是,init.cfg文件的修改需要保持json格式不被破坏,否则init进程解析失败后不会启动任何服务。对于配置的服务权限(uid/gid/capability)需要符合安全子系统要求且遵循权限最小原则。另外,对于once和importance项均为0的服务,若其在4分钟内连续退出次数超过4次,则init将终止重新启动该服务的操作。
- 系统参数
-
OEM厂商相关系统属性
Hi3516DV300,Hi3518EV300开发板需要修改vendor/hisilicon/hispark_aries/hals/utils/sys_param目录下源文件:
-
-
- Hi3861开发板需要修改vendor/hisilicon/hispark_pegasus/hals/utils/sys_param目录下源文件:
static const char HOS_PRODUCT_TYPE[] = {"****"}; static const char HOS_MANUFACTURE[] = {"****"}; static const char HOS_BRAND[] = {"****"}; static const char HOS_MARKET_NAME[] = {"****"}; static const char HOS_PRODUCT_SERIES[] = {"****"}; static const char HOS_PRODUCT_MODEL[] = {"****"}; static const char HOS_SOFTWARE_MODEL[] = {"****"}; static const char HOS_HARDWARE_MODEL[] = {"****"}; static const char HOS_HARDWARE_PROFILE[] = {"aout:true,display:true"}; static const char HOS_BOOTLOADER_VERSION[] = {"bootloader"}; static const char HOS_SECURE_PATCH_LEVEL[] = {"2020-6-5"}; static const char HOS_ABI_LIST[] = {"****"}; - 获取默认系统属性
char* value1 = GetProductType(); printf("Product type =%s\n", value1); free(value1); char* value2 = GetManufacture(); printf("Manufacture =%s\n", value2); free(value2); char* value3 = GetBrand(); printf("GetBrand =%s\n", value3); free(value3); - 设置获取自定义系统属性
- Hi3861开发板需要修改vendor/hisilicon/hispark_pegasus/hals/utils/sys_param目录下源文件:
相关仓
启动恢复子系统
startup_syspara_lite
startup_appspawn_lite
startup_bootstrap_lite
startup_init_lite
