【转载】init.rc语法详解

    科技2023-11-04  111

    init.rc脚本的4种类型

    Action(动作)Commands(命令)Services(服务)Options(选项)

    Action

    格式: on < trigger > ##触发条件 < command1 > ## 执行命令 < command2 > ##可以执行多个命令 < command3 > … 比如系统源码中的:on property:sys.boot_from_charger_mode=1 class_stop charger trigger late-init 当相应的事件发生时,系统会对init.rc中的各进行匹配,只要发现符合条件的Action,就会把它加入”命令执行队列”的尾部,(除非这个Action在队列中已经存在)。然后系统在对这些命令按顺序执行。

    Commands

    trigger

    TriggerDescriptionbott这是init程序启动后出发的第一个事件< name > = < value >当属性< name >满足特定< value >时触发device-added-< path>当设备节点添加/删除时触发此事件service-exited-< name >当指定的服务< name >存在时触发

    Commands

    CommandDescriptionexec < path > [< argument >]*Fork并执行一个程序,其路径为< path >,这条命令将阻塞直到该程序启动完成,因此他有可能造成init程序在某个点不停的等待。export < name >< value >设置某个环境变量< name >的值为< value >,这是对全局有效的,即其后的所有进程都将继承这个变量。ifup < interface >使网络接口< interface >成功连接。import < filename >解析另外一个配置文件,名为< filename >,以扩展当前配置。hostname < name >设置主机名为< name >chdir < directory >更改工作目录为< directory >chmod < octal-modc >更改文件访问权限chown < owner >< group >< path >更改文件所有者和组群chroot < directory >更改根目录位置class_start < serviceclass >启动由< servicesclass >类名指定的所有相关服务,如果他们不存在运行状态的话class_stop < serviceclass >停止所有由< serviceclass >指定的服务,如果他们当前正在运行的话domainname < name >设置域名insmod < path >在< path >路径上安装一个模块mkdir < path >[mode][owner][group]在< path >上新建一个目录mount < type >< device >< dir >[mountoption]尝试在指定路径上挂载一个设备setkey目前没有定义setprop< name >< value >设置系统属性< name >的值< value >start < service >这个命令将启动一个服务,如果他没有处于运行状态的话stop < service >这个命令将启动一个服务,如果他没有处于运行状态的话symlink < target >< path >创建一个< path >路径的连接,目标为< target >sysclktz设置基准时间,如果当前时间是GMT,这个值为0trigger < event >触发一个事件write < path >< string >[ < string >]*打开一个文件,并写入一个或多个字符串

    Services

    在特定选项的约束下呗init程序运行或者重启. 格式: service < name >< pathname > [ < argument >]* < option > < option > … 参数解释: - name 表示此service的名称 - pathname 此service所在路径。 - argument 启动service所带的参数 - option 对此service的约束选项。

    options

    Services中的可用选项:

    optionDescriptioncritical表明这个对设备至关重要的服务,如果他在四分钟内退出超过4次,则设备将重启进入恢复模式disable此服务不会自动启动,而是需要通过显示调用服务名来启动setenv < name >< value >设置环境变量< name >为某个值< value >socket < name >< type >< perm >[< user >[ < group >]]创建一个名为/dev/socket/< name >的Unix domain socket,然后将他的fd值传给启动它的进程,有效的< type >值包括dgram,steam和seqpacket.而user和group的默认值是0user < username >在启动服务前将用户切换至< username >,默认情况下用户都是rootgroup < groupname >[< groupname >]在启动服务将用户组切换至< groupname >oneshot当此服务退出时,不要主动去重启他class < name >为该服务指定一个class名,同一个class的所有服务必须同时自动或者停止,默认情况下服务的class名是”default”onrestart当此服务重启时,执行某些命令

    英文描述参见:/system/core/init/readme.txt

    init脚本中的关键字参见:system/core/init/keywords.h 

    Processed: 0.027, SQL: 8