• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 启动恢复子系统概述<a name="ZH-CN_TOPIC_0000001063402122"></a>
2
3-   [启动恢复子系统上下文](#section167378304212)
4-   [约束与限制](#section2029921310472)
5
6## 启动恢复子系统上下文<a name="section167378304212"></a>
7
8下图是启动子系统上下文结构图:
9
10![](figure/启动子系统上下文.png)
11
12系统上电加载内核后,按照以下流程完成系统各个服务和应用的启动:
13
141.  内核加载init进程,一般在bootloader启动内核时通过设置内核的cmdline来指定init的位置。
152.  init进程启动后,会挂载tmpfs,procfs,创建基本的dev设备节点,提供最基本的根文件系统。
163.  init也会启动ueventd监听内核热插拔设备事件,为这些设备创建dev设备节点;包括block设备各个分区设备都是通过此事件创建。
174.  init进程挂载block设备各个分区(system,vendor)后,开始扫描各个系统服务的init启动脚本,并拉起各个SA服务。
185.  samgr是各个SA的服务注册中心,每个SA启动时,都需要向samgr注册,每个SA会分配一个ID,应用可以通过该ID访问SA。
196.  foundation是一个特殊的SA服务进程,提供了用户程序管理框架及基础服务;由该进程负责应用的生命周期管理。
207.  由于应用都需要加载JS的运行环境,涉及大量准备工作,因此appspawn作为应用的孵化器,在接收到foundation里的应用启动请求时,可以直接孵化出应用进程,减少应用启动时间。
21
22启动子系统内部涉及以下组件:
23
24-   init启动引导组件
25
26    init启动引导组件对应的进程为init进程,是内核完成初始化后启动的第一个用户态进程。init进程启动之后,读取init.cfg配置文件,根据解析结果,执行相应命令(见[init启动引导组件表2](subsys-boot-init.md#table122681439144112)描述)并依次启动各关键系统服务进程,在启动系统服务进程的同时设置其对应权限。
27
28-   ueventd启动引导组件
29
30    ueventd负责监听内核设备驱动插拔的netlink事件,根据事件类型动态管理相应设备的dev节点。
31
32-   appspawn应用孵化组件
33
34    负责接收**用户程序框架**的命令孵化应用进程,设置新进程的权限,并调用应用程序框架的入口函数。
35
36-   bootstrap服务启动组件
37
38    提供了各服务和功能的启动入口标识。在SAMGR启动时,会调用boostrap标识的入口函数,并启动系统服务。
39
40-   syspara系统属性组件
41
42    系统属性组件,根据OpenHarmony产品兼容性规范提供获取设备信息的接口,如:产品名、品牌名、厂家名等,同时提供设置/读取系统属性的接口。
43
44
45## 约束与限制<a name="section2029921310472"></a>
46
47启动恢复子系统源代码目录和适配平台:
48
49**表 1**  启动恢复子系统源代码目录和适配平台
50
51<a name="table2144134816420"></a>
52<table><thead align="left"><tr id="row11143184819429"><th class="cellrowborder" valign="top" width="32.36%" id="mcps1.2.3.1.1"><p id="p014334816421"><a name="p014334816421"></a><a name="p014334816421"></a>名称</p>
53</th>
54<th class="cellrowborder" valign="top" width="67.64%" id="mcps1.2.3.1.2"><p id="p21434480422"><a name="p21434480422"></a><a name="p21434480422"></a>适配平台</p>
55</th>
56</tr>
57</thead>
58<tbody><tr id="row171431248114219"><td class="cellrowborder" valign="top" width="32.36%" headers="mcps1.2.3.1.1 "><p id="p214334884214"><a name="p214334884214"></a><a name="p214334884214"></a>base/startup/appspawn_lite</p>
59</td>
60<td class="cellrowborder" valign="top" width="67.64%" headers="mcps1.2.3.1.2 "><p id="p35161141183916"><a name="p35161141183916"></a><a name="p35161141183916"></a>小型系统设备(参考内存≥1MB),如Hi3516DV300 、Hi3518EV300</p>
61</td>
62</tr>
63<tr id="row1814320488422"><td class="cellrowborder" valign="top" width="32.36%" headers="mcps1.2.3.1.1 "><p id="p1314315485427"><a name="p1314315485427"></a><a name="p1314315485427"></a>base/startup/bootstrap_lite</p>
64</td>
65<td class="cellrowborder" valign="top" width="67.64%" headers="mcps1.2.3.1.2 "><p id="p136879536392"><a name="p136879536392"></a><a name="p136879536392"></a>轻量系统设备(参考内存≥128KB),如Hi3861V100</p>
66</td>
67</tr>
68<tr id="row1114304818420"><td class="cellrowborder" align="left" valign="top" width="32.36%" headers="mcps1.2.3.1.1 "><p id="p181431448194220"><a name="p181431448194220"></a><a name="p181431448194220"></a>base/startup/init_lite</p>
69</td>
70<td class="cellrowborder" valign="top" width="67.64%" headers="mcps1.2.3.1.2 "><p id="p865161134018"><a name="p865161134018"></a><a name="p865161134018"></a>小型系统设备(参考内存≥1MB),如Hi3516DV300、Hi3518EV300</p>
71</td>
72</tr>
73<tr id="row2014324824218"><td class="cellrowborder" valign="top" width="32.36%" headers="mcps1.2.3.1.1 "><p id="p14143348184215"><a name="p14143348184215"></a><a name="p14143348184215"></a>base/startup/syspara_lite</p>
74</td>
75<td class="cellrowborder" valign="top" width="67.64%" headers="mcps1.2.3.1.2 "><a name="ul15501216165214"></a><a name="ul15501216165214"></a><ul id="ul15501216165214"><li><strong id="b2467121917911"><a name="b2467121917911"></a><a name="b2467121917911"></a></strong>轻量系统设备(参考内存≥128KB),如Hi3861V100</li><li>小型系统设备(参考内存≥1MB),如Hi3516DV300、Hi3518EV300</li></ul>
76</td>
77</tr>
78</tbody>
79</table>
80
81-   init启动引导组件:
82    -   每个系统服务启动时都需要编写各自的启动脚本文件init.cfg,定义各自的服务名、可执行文件路径、权限和其他信息。
83    -   每个系统服务各自安装其启动脚本到/system/etc/init目录下,init进程统一扫码执行。
84
85-   新芯片平台移植时,平台相关的初始化配置需要增加平台相关的初始化配置文件/vendor/etc/init/init.\{hardware\}.cfg;该文件完成平台相关的初始化设置,如安装ko驱动,设置平台相关的/proc节点信息。
86    -   配置文件init.cfg仅支持json格式。
87
88-   bootstrap服务启动组件:需要在链接脚本中配置zInit代码段。
89
90