subsys-boot-bootstrap.md 1.9 KB
Newer Older
D
duangavin123 已提交
1
# bootstrap服务启动组件
N
NEEN 已提交
2 3


4
bootstrap服务启动组件实现了服务的自动初始化,即服务的初始化函数无需显式调用,而是将其使用宏定义的方式申明,就会在系统启动时自动被执行。实现原理是将服务启动的函数通过宏定义的方式申明之后,放在预定义好的zInit代码段中,系统启动的时候调用OHOS_SystemInit接口遍历该代码段并调用其中的函数。因此,需要在链接脚本中添加zInit段,并且在main函数里调用OHOS_SystemInit接口。
D
duangavin123 已提交
5

N
NEEN 已提交
6 7 8

zInit段的添加可参考已有的Hi3861平台的链接脚本,文件路径为vendor/hisi/hi3861/hi3861/build/link/link.ld.S。

D
duangavin123 已提交
9

N
NEEN 已提交
10
用于实现服务的自动初始化的宏定义接口请参见启动恢复子系统的[API接口文档](https://device.harmonyos.com/cn/docs/develop/apiref/init-0000001054598113)
N
NEEN 已提交
11

D
duangavin123 已提交
12 13

## 接口说明
N
NEEN 已提交
14

15
bootstrap服务自动初始化宏如表1所述。
N
NEEN 已提交
16

D
duangavin123 已提交
17 18 19 20 21 22 23 24
  **表1** 主要的服务自动初始化宏

| 接口名 | 描述 | 
| -------- | -------- |
| SYS_SERVICE_INIT(func) | 标识核心系统服务的初始化启动入口。 | 
| SYS_FEATURE_INIT(func) | 标识核心系统功能的初始化启动入口。 | 
| APP_SERVICE_INIT(func) | 标识应用层服务的初始化启动入口。 | 
| APP_FEATURE_INIT(func) | 标识应用层功能的初始化启动入口。 | 
N
NEEN 已提交
25

D
duangavin123 已提交
26 27 28 29 30

## 开发实例

  服务自动初始化宏使用实例:
  
N
NEEN 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
```
void SystemServiceInit(void) {
    printf("Init System Service\n");
}
SYS_SERVICE_INIT(SystemServiceInit);

void SystemFeatureInit(void) {
    printf("Init System Feature\n");
}
SYS_FEATURE_INIT(SystemFeatureInit);

void AppServiceInit(void) {
    printf("Init App Service\n");
}
APP_SERVICE_INIT(AppServiceInit);

void AppFeatureInit(void) {
    printf("Init App Feature\n");
}
APP_FEATURE_INIT(AppFeatureInit);

52
// 日志打印顺序为:
N
NEEN 已提交
53 54 55 56 57
// Init System Service
// Init System Feature
// Init App Service
// Init App Feature
```