引导启动配置文件
概述
功能简介
Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。
基本概念
-
分组配置文件(device.xxxx.group.cfg)(标准系统支持),文件由jobs、services和groups组成。用来限制能够执行的jobs和service。根据cmdline中的bootgroup属性决定当前的分区。当前支持下列分组:
- device.boot.group 系统默认配置,触发执行配置文件中的所有的job和服务。
- device.charge.group charge模式,限制只启动改文件中允许的job和服务。
-
启动配置文件(init.cfg),文件由jobs、services和import组成。
约束与限制
仅支持小型系统和标准系统。
开发指导
场景介绍
init进程启动时,首先完成系统初始化工作,然后开始解析配置文件。系统在解析配置文件时,会将配置文件分成三类:
- init.cfg默认配置文件,由init系统定义,优先解析。
- /system/etc/init/*.cfg各子系统定义的配置文件。
- /vendor/etc/init/*.cfg厂商定义的配置文件。
当需要添加配置文件时,用户可以根据需要定义自己的配置文件,并拷贝到相应的目录下。
开发步骤
-
定义配置文件。
{ "import" : [ ], "jobs" : [ ], "services" : [ ] }
-
根据具体的系统拷贝配置到相应的目录。
标准系统下:
ohos_prebuilt_etc("misc.cfg") { source = "//base/startup/init/services/etc/misc.cfg" relative_install_dir = "init" part_name = "init" }
小型系统下:
copy("init_configs") { sources = [ "init_liteos_a_3516dv300.cfg" ] outputs = [ "$root_out_dir/config/init.cfg" ] }
开发实例
下述为cfg文件编写模板。
{
"import" : [
"/etc/example1.cfg",
"/etc/example2.cfg"
],
"jobs" : [{
"name" : "jobName1",
"cmds" : [
"start serviceName",
"mkdir dir1"
]
}, {
"name" : "jobName2",
"cmds" : [
"chmod 0755 dir1",
"chown root root dir1"
]
}
],
"services" : [{
"name" : "serviceName",
"path" : ["/system/bin/serviceName"]
}
]
}
-
cfg文件是严格按照JSON格式编写的,当添加服务或命令未生效时,可以优先排查添加内容的格式是否正确。
-
对于import解析,在解析完成一个import中的cfg文件路径时,会立即解析该cfg文件。
-
example1.cfg 需要导入的cfg文件。
-
serviceName:service名称, 用户自定义。
-
/system/bin/serviceName: 当前服务的可执行文件全路径和参数, 数组形式。
-
jobName1:job名称, 用户自定义。