• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 引导启动配置文件
2## 概述
3### 功能简介
4Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。
5### 基本概念
61. 分组配置文件(device.xxxx.group.cfg)(标准系统支持),文件由jobs、services和groups组成。用来限制能够执行的jobs和service。根据cmdline中的bootgroup属性决定当前的分区。当前支持下列分组:
7    - ​device.boot.group 系统默认配置,触发执行配置文件中的所有的job和服务。
8    - device.charge.group  charge模式,限制只启动改文件中允许的job和服务。
9
102. 启动配置文件(init.cfg),文件由jobs、services和import组成。
11    - services(linux内核支持), 用于配置系统支持的native服务,服务具体配置参考 **[服务管理](subsys-boot-init-service.md)**。
12    - jobs, 配置等待执行命令集合,jobs具体参考 **[jobs管理](subsys-boot-init-jobs.md)**。
13    - import(linux内核支持),import是导入cfg文件,目的是减少cfg大小,分离不同的功能。
14
15### 约束与限制
16仅支持小型系统和标准系统。
17
18## 开发指导
19### 场景介绍
20init进程启动时,首先完成系统初始化工作,然后开始解析配置文件。系统在解析配置文件时,会将配置文件分成三类:
211. init.cfg默认配置文件,由init系统定义,优先解析。
222. /system/etc/init/*.cfg各子系统定义的配置文件。
233. /vendor/etc/init/*.cfg厂商定义的配置文件。
24
25当需要添加配置文件时,用户可以根据需要定义自己的配置文件,并拷贝到相应的目录下。
26
27### 开发步骤
281. 定义配置文件。
29    ```
30    {
31        "import" : [ ],
32        "jobs" : [ ],
33        "services" : [ ]
34    }
35    ```
36
372. 根据具体的系统拷贝配置到相应的目录。
38
39    标准系统下:
40    ```
41    ohos_prebuilt_etc("misc.cfg") {
42        source = "//base/startup/init/services/etc/misc.cfg"
43        relative_install_dir = "init"
44        part_name = "init"
45      }
46    ```
47    小型系统下:
48    ```
49    copy("init_configs") {
50      sources = [ "init_liteos_a_3516dv300.cfg" ]
51      outputs = [ "$root_out_dir/config/init.cfg" ]
52    }
53    ```
54
55### 开发实例
56下述为cfg文件编写模板。
57```
58{
59    "import" : [
60            "/etc/example1.cfg",
61            "/etc/example2.cfg"
62    ],
63    "jobs" : [{
64            "name" : "jobName1",
65            "cmds" : [
66                "start serviceName",
67                "mkdir dir1"
68            ]
69        }, {
70            "name" : "jobName2",
71            "cmds" : [
72                "chmod 0755 dir1",
73                "chown root root dir1"
74            ]
75        }
76    ],
77    "services" : [{
78            "name" : "serviceName",
79            "path" : ["/system/bin/serviceName"]
80        }
81    ]
82}
83```
841. cfg文件是严格按照JSON格式编写的,当添加服务或命令未生效时,可以优先排查添加内容的格式是否正确。
85
862. 对于import解析,在解析完成一个import中的cfg文件路径时,会立即解析该cfg文件。
87
883. example1.cfg 需要导入的cfg文件。
89
904. serviceName:service名称, 用户自定义。
91
925. /system/bin/serviceName: 当前服务的可执行文件全路径和参数, 数组形式。
93
946. jobName1:job名称, 用户自定义。
95