• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# bootstrap Module<a name="EN-US_TOPIC_0000001063402356"></a>
2
3-   [Available APIs](#section1633115419401)
4-   [How to Use](#section2055311316228)
5
6This module implements automatic service initialization. That is, the initialization function does not need to be explicitly called. Instead, it is declared using the macro definition and is automatically executed when the system is started. Specifically, after the function for starting a service is declared using a macro, it is placed in the predefined  **zInit**  code segment. During system startup, the  **OHOS\_SystemInit**  API is called to traverse the code segment and call the functions in the code segment. Therefore, you need to include the  **zInit**  code segment in the linker script and call the  **OHOS\_SystemInit**  API in the  **main**  function.
7
8For details about how to include the  **zInit**  code segment, see the Hi3861 linker script in  **vendor/hisi/hi3861/hi3861/build/link/link.ld.S**.
9
10For details about the macros used by the bootstrap module to implement automatic service initialization, see  [API document](https://device.harmonyos.com/en/docs/develop/apiref/init-0000001054598113)  the startup subsystem.
11
12## Available APIs<a name="section1633115419401"></a>
13
14The following table describes the major macros used by the bootstrap module to implement automatic service initialization.
15
16**Table  1**  Major macros for the bootstrap module
17
18<a name="table12281332101910"></a>
19<table><thead align="left"><tr id="row102914328199"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p229113221917"><a name="p229113221917"></a><a name="p229113221917"></a>Macro Name</p>
20</th>
21<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p429132161912"><a name="p429132161912"></a><a name="p429132161912"></a>Description</p>
22</th>
23</tr>
24</thead>
25<tbody><tr id="row13291532141919"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p14292032181919"><a name="p14292032181919"></a><a name="p14292032181919"></a>SYS_SERVICE_INIT(func)</p>
26</td>
27<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p10291732181911"><a name="p10291732181911"></a><a name="p10291732181911"></a>Entry for initializing and starting a core system service</p>
28</td>
29</tr>
30<tr id="row1329133214197"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p15291332161915"><a name="p15291332161915"></a><a name="p15291332161915"></a>SYS_FEATURE_INIT(func)</p>
31</td>
32<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p12292324198"><a name="p12292324198"></a><a name="p12292324198"></a>Entry for initializing and starting a core system feature</p>
33</td>
34</tr>
35<tr id="row1529133231911"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p9291332131915"><a name="p9291332131915"></a><a name="p9291332131915"></a>APP_SERVICE_INIT(func)</p>
36</td>
37<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1229432181920"><a name="p1229432181920"></a><a name="p1229432181920"></a>Entry for initializing and starting an application-layer service</p>
38</td>
39</tr>
40<tr id="row1229173214194"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p12923218193"><a name="p12923218193"></a><a name="p12923218193"></a>APP_FEATURE_INIT(func)</p>
41</td>
42<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p17291332121913"><a name="p17291332121913"></a><a name="p17291332121913"></a>Entry for initializing and starting an application-layer feature</p>
43</td>
44</tr>
45</tbody>
46</table>
47
48## How to Use<a name="section2055311316228"></a>
49
50The following is an example of using macros to automatically initialize services.
51
52```
53void SystemServiceInit(void) {
54    printf("Init System Service\n");
55}
56SYS_SERVICE_INIT(SystemServiceInit);
57
58void SystemFeatureInit(void) {
59    printf("Init System Feature\n");
60}
61SYS_FEATURE_INIT(SystemFeatureInit);
62
63void AppServiceInit(void) {
64    printf("Init App Service\n");
65}
66APP_SERVICE_INIT(AppServiceInit);
67
68void AppFeatureInit(void) {
69    printf("Init App Feature\n");
70}
71APP_FEATURE_INIT(AppFeatureInit);
72
73// Logs are printed in the following sequence:
74// Init System Service
75// Init System Feature
76// Init App Service
77// Init App Feature
78```
79
80