android rc文件分析
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形式如下:
- on <trigger>
- <command>
- <command>
- <command>
on <trigger>
<command>
<command>
<command>
Services
Services可以通过options 当它退出时重启
- service <name> <pathname> [<argument>]*
- <option>
- <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>
这种形式的触发器当属性满足条件时触发
属性可以多个,如:
- on property:test.a=1 && property:test.b=1
- 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文件分析的更多相关文章
- Android JNI入门第四篇——Android.mk文件分析
ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...
- [Android Pro] 通过Android trace文件分析死锁ANR
转载自: http://blog.csdn.net/oujunli/article/details/9102101#reply 对于从事Android开发的人来说,遇到ANR(Application ...
- [置顶] Android资源文件分析
1)修改开机默认壁纸 Android开机默认资源文件为:frameworks/base/core/res/res/values/config.xml 我们找到wallpaper行: <strin ...
- 【转】android makefile文件分析
Makefile的规则如下: target ... : prerequisites ... command ... ... target可以是一个目标文件,也可以是Object File(例如hell ...
- Android源码分析(一)-----如何快速掌握Android编译文件
一 : Android.mk文件概述 主要向编译系统指定相应的编译规则.会被解析一次或多次.因此尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析.这个文件的语法会把源代码组织成 ...
- Android.mk 文件语法详解
0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...
- 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 ...
- Android JNI的Android.mk文件语法详解
Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build System解 ...
- Android源码分析(十七)----init.rc文件添加脚本代码
一:init.rc文件修改 开机后运行一次: chmod 777 /system/bin/bt_config.sh service bt_config /system/bin/bt_config.sh ...
随机推荐
- 小组互评Alpha版本
Thunder——爱阅app(测评人:任思佳) 一.基于NABCD评论作品,及改进建议 每个小组评论其他小组Alpha发布的作品:1.根据(不限于)NABCD评论作品的选题:2.评论作品对选题的实现效 ...
- noip-2006普及组-数列- 【模拟-找规律-快速幂】
链接:https://ac.nowcoder.com/acm/contest/153/1047 来源:牛客网 题目描述 给定一个正整数k( ≤ k ≤ ),把所有k的方幂及所有有限个互不相等的k的方幂 ...
- linux的基本操作3(权限)
sudo cat /etc/passwd 查看账户信息用户有自己的编号是uid,组也有自己的编号是giduseradd -D 查看默认添加账号的模板sudo useradd -m liu 添加带h ...
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
- Go之unsafe.Pointer && uintptr 类型
Go语言是个强类型语言.Go语言要求所有统一表达式的不同的类型之间必须做显示的类型转换.而作为Go语言鼻祖的C语言是可以直接做隐式的类型转换的. 也就是说Go对类型要求严格,不同类型不能进行赋值操作. ...
- Linux-入门配置jdk,tomcat,mysql
Mysql安装 大家可以在这里下 http://mirrors.163.com/mysql/Downloads/MySQL-5.7/ 1)查看CentOS自带的mysql rpm -qa | grep ...
- ssh 22端口号拒绝
1:当scp或者ssh登录ubuntu远程服务的时候,出现:
- maven 项目使用本地jar
<dependency> <groupId>com.yeepay.g3</groupId> <artifactId>yop</artifactId ...
- G2 绘制混合图例 demo
G2 绘制混合图例 demo import G2 from '@antv/g2'; import DataSet from '@antv/data-set'; // G2 对数据源格式的要求,仅仅是 ...
- 【剑指offer】判断出栈序列是否合法
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应 ...