init.rc语法

概述

一个完整的init.rc脚本是由四种类型组成的。即:

  • Action
  • Commands
  • Services
  • Options

Action

格式

格式如下:
on < Trigger > ## 触发条件
< Command1>
< Command2>

一旦 Trigger被触发,就会执行Command1,Command2.(且Trigger的名字是唯一的,重复则会报错)

init.rc常见的触发器(Trigger)
  • boot #这是init程序启动后触发的第一个条件
  • < Name> = < Value> # 当某个属性的值为Value时
  • device -added < path> # 当某个设备节点被添加
  • device -removed < path> # 当某个设备节点被移除
  • service -exited < name> # 当名字为name的服务存在时,触发

init.rc常见的命令

  • export < name> < value> # 设置环境变量,作用于全局
  • mkdir < path> [mode] [ owner] [group]
  • mount < type> < device> < dir> [< mountOption>] 尝试在制定路径下挂载一个设备
  • write < path> < value> 打开文件,并写入值

Services (服务)

Services 其实是可执行程序,它们在特定选项约束下会被init程序运行或者重启。

格式一般如下:

service < name> < pathName> [< arguments>]
    < options>
name: service 的名称
pathName:service所在路径
argument:启动service 
option:对service的约束条件。
常见的option
* critical 至关重要的服务
*  disabled,此服务不会自动启动,需要显式调用
*  setenv< name> < value> 设置环境变量name为value值 
*  socket < name> < type> < perm> [< user> < group>] 创建一个名为name的unix domain socket, type表示类型:dgram,stream 或者 seqpacket
*  user< username>
*  group< groupname>
*  oneshot 当服务退出后,不要去重启它 
*  class < name> 为服务指定class名,同一个class的服务需要同时启动或停止 
*  onrestart 当服务重启时,执行某些命令

总结

对于action来说,它是当trigger发生时执行某些命令;而对于service来说,它是总是发生的,然后去执行pathName下的可执行文件

分析init.rc 文件

on boot ## boot事件
    export PATH  /sbin:/system/sbin:/system/bin ##设置系统的全局环境变量
    export LD_LIBRARY_PATH /system/lib # 相应boot事件,设置库的路径
    mkdir /dev
    mkdir /proc # 分别创建dev目录、proc目录
    mkdir /system
    mount tmpfs tmpfs /dev
    mkdir /dev/pts
    mkdir /dev/socket
    mount devpts devpts /dev/pts
    mount proc proc /proc
    mount sysfs sysfs /sys
    write /proc/cpu/alignment 4 #打开文件并写入值
    ifup lo #建立lo网络连接
    ......
service adbd /sbin/adbd # 启动adbd进程
    user adbd
    group adbd
Service .....

service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666 # 启动zygote服务。
on device-added- /dev/compass
    start akmd
on device-removed-/dev/compass
    stop akmd # 当移除dev/compass节点后,停止akmd
service akmd /sbin/akmd 
    disabled #只能显示调用起来
    user akmd
    group akmd #    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
init.rcAndroid 系统中的一个初始化脚本文件,用于在系统启动时执行一系列初始化操作。init.rc 文件位于 Android 系统的 /init.rc 路径下,它是系统启动时第一个被执行的脚本。 在 init.rc 文件中,可以定义一系列的初始化动作,比如挂载文件系统、启动系统服务、加载驱动程序等。通过编辑 init.rc 文件,可以对系统的启动过程进行定制,从而满足个性化的需求。 创建 init.rc 文件的过程相对简单,只需要使用文本编辑器(比如 vi 或者 nano)新建一个文件,并按照约定规范的格式编写初始化脚本即可。在编写脚本时,需要遵循 init.rc 文件的语法规则以及命令格式,以确保脚本能够被系统正确解析和执行。 例如,可以在 init.rc 文件中添加类似如下的内容: ``` service my_service /system/bin/my_executable class main user root group root oneshot ``` 以上示例中定义了一个名为 my_service 的系统服务,服务的可执行文件路径为 /system/bin/my_executable,服务的权限为 root 用户和 root 组,并且是一次性的服务。 创建好 init.rc 文件后,需要将文件保存到系统的 /init.rc 路径下,并给予正确的权限(比如 rw-r--r--),以确保系统能够正常读取和执行该文件。 需要注意的是,在编辑和修改 init.rc 文件时,务必谨慎操作,避免出现语法错误或者不当的配置,以免导致系统启动失败或者出现其他不可预料的问题。因此,在对 init.rc 文件进行修改时,建议先备份原文件,然后逐步调试和验证修改的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值