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 ...
随机推荐
- Mysql 复制一个新表
1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete from newtable;来 ...
- GoogLeNet 之 Inception-v1 解读
本篇博客的目的是展示 GoogLeNet 的 Inception-v1 中的结构,顺便温习里面涉及的思想. Going Deeper with Convolutions:http://arxiv.or ...
- java基础(4)继承和多态
1 继承 1.1 继承概述 继承要解决的问题:共性抽取 1.2 继承的格式 class 父类 { ... } class 子类 extends 父类 { ... } 1.3 继承中成员变量的特点(变 ...
- js 跨域问题
Cross-Origin Resource Sharing 跨域资源共享 Cross-Origin Resource Sharing,跨域资源共享,简称 CORS.CORS系统定义了一种浏览器和服务器 ...
- Reasoning With Neural Tensor Networks For Knowledge Base Completion-paper
https://www.socher.org/index.php/Main/ReasoningWithNeuralTensorNetworksForKnowledgeBaseCompletion 年份 ...
- A New Function(LightOJ 1098)积性函数前缀和的应用
题意:要求对于1~n,每个数的约数(不包括1和其本身)的和. 题解:由于题目数据有2*10^9之大,因而不能直接暴力.需要考虑积性函数的特性,由于必定有重复的约数出现,因而可以对重复约数所在的区间进行 ...
- 常见模块(四) os模块
注: os模块是实现python程序对操作系统(operation system)的操作 1.对文件或者目录进行删除或者创建的相关操作 # os.rename("b"," ...
- java.io.EOFException ValueOperations.increment()操作后,获取值时有的bug
---恢复内容开始--- 今天使用spring-data-redis包操作redis,就是简单的使用redis的计数功能,在redis中的操作命令如:incr key;get key; 这两步操作使用 ...
- sails.js mvc framework learning
目的:加快开发速度,总结使用方法: menu list: custom controller custom 模块使用 custom model custom middleware custom ser ...
- SELinux初探