引导启动配置文件

概述

功能简介

Init配置文件基于JSON格式,用来配置系统启动时必要的命令和服务。Init在系统启动时解析配置文件,并根据配置文件执行对应的命令,启动相应的服务。

基本概念

  1. 分组配置文件(device.xxxx.group.cfg)(标准系统支持),文件由jobs、services和groups组成。用来限制能够执行的jobs和service。根据cmdline中的bootgroup属性决定当前的分区。当前支持下列分组:

    • ​device.boot.group 系统默认配置,触发执行配置文件中的所有的job和服务。
    • device.charge.group charge模式,限制只启动改文件中允许的job和服务。
  2. 启动配置文件(init.cfg),文件由jobs、services和import组成。

    • services(linux内核支持), 用于配置系统支持的native服务,服务具体配置参考 服务管理
    • jobs, 配置等待执行命令集合,jobs具体参考 jobs管理
    • import(linux内核支持),import是导入cfg文件,目的是减少cfg大小,分离不同的功能。

约束与限制

仅支持小型系统和标准系统。

开发指导

场景介绍

init进程启动时,首先完成系统初始化工作,然后开始解析配置文件。系统在解析配置文件时,会将配置文件分成三类:

  1. init.cfg默认配置文件,由init系统定义,优先解析。
  2. /system/etc/init/*.cfg各子系统定义的配置文件。
  3. /vendor/etc/init/*.cfg厂商定义的配置文件。

当需要添加配置文件时,用户可以根据需要定义自己的配置文件,并拷贝到相应的目录下。

开发步骤

  1. 定义配置文件。

    {
        "import" : [ ],
        "jobs" : [ ],
        "services" : [ ]
    }
    
  2. 根据具体的系统拷贝配置到相应的目录。

    标准系统下:

    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"]
        }
    ]
}
  1. cfg文件是严格按照JSON格式编写的,当添加服务或命令未生效时,可以优先排查添加内容的格式是否正确。

  2. 对于import解析,在解析完成一个import中的cfg文件路径时,会立即解析该cfg文件。

  3. example1.cfg 需要导入的cfg文件。

  4. serviceName:service名称, 用户自定义。

  5. /system/bin/serviceName: 当前服务的可执行文件全路径和参数, 数组形式。

  6. jobName1:job名称, 用户自定义。