service vold /system/bin/vold \
        --blkid_context=u:r:blkid:s0 --blkid_untrusted_context=u:r:blkid_untrusted:s0 \
        --fsck_context=u:r:fsck:s0 --fsck_untrusted_context=u:r:fsck_untrusted:s0
    class core
    socket vold stream 0660 root mount
    socket cryptd stream 0660 root mount
    ioprio be 2
    writepid /dev/cpuset/foreground/tasks

class core

service关键字声明了你要定义一个service,而vold就是这个service的名字,至于后面的目录则是这个service对应的可执行文件在系统中的位置。注意:这里是说在系统中的位置,也就是在开发板运行你的Android源码编译的系统后的目录,而不是源码的目录。

定义为核心service,当core服务启动时,这个vold启动。

下面转载http://www.cnblogs.com/hangxin1940/archive/2011/10/01/2196964.html

init.rc的语法分为行为(Actions),、命令(Commands) 、服务(Services)、选项(Options)

类别

名称

描述

SECTION on 触发条件
同上.. service 解析service
COMMAND chdir 更改当前工作目录
同上.. chroot 更改参考的根目录位置
.. class_start 启动某个设置了class名称的服务
.. class_stop 停止某个设置了class名称的服务
.. domainname 域名
.. exec 调用程序并转移进程
.. export 提交变量
.. hostname 主机名
.. ifup 激活网卡
.. insmod 挂载模块
.. import 引入配置,比如etc下的一些rc文件,和java中的import差不多
.. mkdir 建立目录
.. mount 挂载文件系统
.. setkey 从源码看,应该是设置一个命令的关键字缩写,比如可以将domainname映射为dn
.. setprop 设置一个属性
.. setrlimit

设置当前程序可以打开的最大文件数到系统规定程序可以打开的最大文件数

.. start 启动服务
.. stop 停止服务
.. trigger 不清楚,难道是自定义触发器?
.. symlink 建立符号链接
.. sysclktz

设置基准时间

.. wait 等待文件准备好?Linux中这是进程调度的函数
.. write 向文件、设备写个什么东西。肯定不是传消息的那个wirte
.. copy 不解释
.. chown 更改所有者
.. chmod 更改权限
.. loglevel Log输出级别,低于这个级别的就输出
.. restart 重启服务
OPTION capability 能力,也就是系统对进程的一种权限控制。
同上.. class 设置class name
.. console 启用控制台
.. critical 是否关键,也就是4分钟之内重启超过4次的话,重启之后就进入recovery模式
.. disabled 不随class自动启动
.. group 组归属
.. keycodes 不明白。。。。。
.. oneshot 只启动一次,意外退出后不必重启
.. onrestart 重启时
.. setenv 增加环境变量
.. socket 申请socket资源
.. user 用户归属
.. ioprio io调度优先级

(很多属性与命令用法都与linux中同名命令差球不多)

init是分段(section)解析init.rc的,在keywords.h中可以查看关键字的定义。init是以什么标志来分段解析init.rc呢?结合init.rc的内容,可以看出,分段标记是以on 和 service来标记的。下面详细说明。

on   啥时候干什么

on属于行为。

      on early-init

init之前、加载完所有rc文件后即执行,在miui的rom中,init.rc在early-init执行的是start ueventd,根据keywords.h的定义,start是个命令(COMMAND)。

这里顺便说下ueventd,android中底层(一般指驱动)通知上层的事件,用的是uevent,java层通过观察者模式实现,用到的类为 UEventObserver,使用intent来传递;native层用的是android_os_UEventObserver.cpp,使用uevent.c通过socket传递。当然,这是framework及以下的层面,一般开发不经常用到,更何况这几个类都没有被暴露出来。

on init

加载propety各项属性文件之前执行,在init变为propety service之前都属于init阶段。

on early-boot

启动属性服务后即执行。

on boot

boot的时候执行。

on property:xxxxx=x

当某个属性设置为预期值时执行。

关于init.rc,其实结合/src/system/core/init/* 源码和init.rc文件来看,会明白许多。

下面转载自https://blog.csdn.net/kc58236582/article/details/52042331

init语言

init语言包括四个部分:(Actions)动作 commands(命令) Services(服务) Options(选项)

Actions和Services属于一个新的section,而所有的Commands和options都必须属于一个section。

Actions和Servics有一个独立的名字。如果有重复的名字出现,那么会被认为是错误的。

Actions

Actions由几行Commands组成,也有一个trigger用来决定Action的发生。当有事件发生且符合Action的trigger,会把Action加入执行队列

Actions形式如下:

  1. on <trigger>
  2. <command>
  3. <command>
  4. <command>
on <trigger>
<command>
<command>
<command>

Services

Services可以通过options 当它退出时重启

  1. service <name> <pathname> [<argument>]*
  2. <option>
  3. <option>
service <name> <pathname> [<argument>]*
<option>
<option>

Options

Options用来初始化Service的

critical

当它在4分钟内退出4次以上,设备重启进入recovery模式

disabled

Service不会自动开启当它的class启动时,必须显示的started by name(用其名字)

setenv <name> <value>

设置环境变量

socket <name> <type> <perm> [ <user> [ <group> [<seclabel> ] ] ]

创建一个socket named /dev/socket/<name>

user<username>

改变username当执行这个Service之前

group <groupname> [ <groupname> ]*

改变groupname当执行Service之前

seclabel <seclabel>

改变seclabel在执行Service之前

onshot

不要重启Service当退出时

class <name>

为这个Service指定class。所有的Service可以用class name同时开启和结束

onrestart

执行一个命令 当Service重启时

writepid <file...>

当fork一个子进程时,写子进程的pid到一个给定的文件。是给cgroup/cpuset使用

Triggers

Triggers被用来匹配事件,然后加入执行队列。

boot

当init开启时,这是第一个执行的trigger

<name>=<value>

这种形式的触发器当属性满足条件时触发

属性可以多个,如:

  1. on property:test.a=1 && property:test.b=1
  2. setprop test.c 1
on property:test.a=1 && property:test.b=1
setprop test.c 1

Commands

bootchart_init

开启bootcharting

chmod <octal-mode> <path>

改变文件执行权限

chown <owner> <group> <path>

改变文件的owner group

class_start <serviceclass>

开启class start all services

class_stop <servicelass>

停止&disable all services

class_reset <serviceclass>

停止all services

copy  <src> <dst>

copy一个文件  类似 write,但是对二进制大容量文件有用

domainname <name>

设置domain 名字

enable <servicename>

将一个disabled的service变成enabled。且start

exec [ <seclabel> [ <user> [ <group> ] * ] ]  -- <command> [ <argument> ] *

Fork一个进程然后执行命令

export <name> <value>

设置环境变量into global

hostname <name>

设置host name

ifup  <interface>

使网络 interface online

import <filename>

引入init文件

insmod <path>

安装一个module

load_all_props

加载system vendor的属性

load_persist_props

加载data下面的persist属性

loglevel

设置kernel的log level

mkdir <path> [mode] [owner] [group]

创建目录

mount_all <fstab>

挂载fstab中的设备

mount <type> <device> <dir> [ <flag> ]* [<option>]

挂载设备

powerctl

对sys.powerctl属性的respond

restart <service>

类似stop 但是不会disable service

restorecon <path> [ <path> ] *

恢复文件到sercurity context在file_contexts配置的

restorecon_recursive <path> [ <path> ]*

递归的恢复目录中的文件到sercurity context

rm  <path>

rm path

rmdir  <path>

rmdir  目录

setprop <name> <value>

设置系统属性

setrlimit <resource> <cur> <max>

设置资源的rlimit

start <service>

开启service

stop  <service>

关闭service

swapon_all <fstab>

调用fs_mgr_swapon_all on the fstab文件

symlink <target> <path>

创建软链接

sysclktz  <mins_west_of_gmt>

设置系统clock base

trigger <event>

触发触发器

verity_load_state

加载dm-verity state

verity-update_state  <mount_point>

update dm-versity state

wait <path> [ <timeout> ]

poll for 给定的文件 或者 timeout时间到。如果时间没有设定,默认为5秒

write <path> <content>

打开文件,write string到给定文件。没有文件会被创建。有的话,会truncated

android rc文件分析的更多相关文章

  1. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  2. [Android Pro] 通过Android trace文件分析死锁ANR

    转载自: http://blog.csdn.net/oujunli/article/details/9102101#reply 对于从事Android开发的人来说,遇到ANR(Application ...

  3. [置顶] Android资源文件分析

    1)修改开机默认壁纸 Android开机默认资源文件为:frameworks/base/core/res/res/values/config.xml 我们找到wallpaper行: <strin ...

  4. 【转】android makefile文件分析

    Makefile的规则如下: target ... : prerequisites ... command ... ... target可以是一个目标文件,也可以是Object File(例如hell ...

  5. Android源码分析(一)-----如何快速掌握Android编译文件

    一 : Android.mk文件概述 主要向编译系统指定相应的编译规则.会被解析一次或多次.因此尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析.这个文件的语法会把源代码组织成 ...

  6. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  7. Android.mk 文件语法详解 转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  8. Android JNI的Android.mk文件语法详解

    Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...

  9. Android源码分析(十七)----init.rc文件添加脚本代码

    一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh ...

随机推荐

  1. Vue+WebSocket 实现页面实时刷新长连接

    最近vue项目要做数据实时刷新,折线图每秒重画一次,数据每0.5秒刷新一次,说白了就是实时刷新,因为数据量较大,用定时器估计页面停留一会就会卡死... 与后台人员讨论过后决定使用h5新增的WebSoc ...

  2. servlet编程操作

    所谓servlet指:服务器处理来自Web浏览器或其他客户端的HTTP请求的服务器程序.客户端向服务器发送Http请求,经Tomcat封装处理转给Servlet容器,Servlet容器在把请求或回应交 ...

  3. js数字自执行随机滚动

    每三秒执行一次,若是需要触发执行,可添加一个单击事件.<!DOCTYPE HTML> <html> <head> <meta http-equiv=" ...

  4. MySQL:日期函数、时间函数总结(MySQL 5.X)

    http://www.cnblogs.com/she27/archive/2009/01/16/1377089.html 原文:http://www.51sdj.com/phpcms/picture/ ...

  5. Python3 Flask+nginx+Gunicorn部署(上)

    前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...

  6. GanttProject 项目管理软件的优点

    GanttProject 的优点 GanttProject 是一款基于 GPL 协议的开源软件,代码完全开源,使用的是 Java 语言编写. 最近在试用,有以下一些优大. 文件格式为 xml,这个是我 ...

  7. py-day3 python 全局变量和局部变量

    # 全局变量 如果函数的内容无 global关键字,优先读取全局变量,无法对全局变量重新赋值, name = 'mj' def change_name(): print('change_name',n ...

  8. Python——列表、元祖、字典、集合的基本操作

    列表 1. 列表——增 (1)append li = ['xcsd', 'cdc', [1, 5, 2], 'eht', '辛辰'] li.append('nihao') print(li) #['x ...

  9. 服务器tcp连接timewait过多优化及详细分析

    [背景说明] 在7层负载均衡上,查询网络状态发现timewait太多,于是开始准备优化事宜 整体的拓扑结构,前面是lvs做dr模式的4层负载均衡,后端使用(nginx.or haproxy)做7层负载 ...

  10. 2.STM32启动文件

    一.概念声明 中断向量:由硬件产生的中断标识码,一般用于存放中断服务程序的跳转指令.根据硬件产生的中断号查找中断向量表来确定对应的中断向量.CM3内核有15个异常  和240个中断源.    程序的内 ...