这里只是简单翻译一下,源码中的readme。如果你想更详细的了解整个过程,你需要查看:
$GINGERBREAD/system/core/init/buitins.c
$GINGERBREAD/system/core/init/keywords.h
$GINGERBREAD/system/core/init/init.c
android初始化文件(init.rc)
1,init.rc是一个可配置的初始化文件,通常定制厂商可以配置额外的初始化配置,init.%PRODUCT%.rc
2,init.rc是在$GINGERBREAD/system/core/init/init.c中读取的,它基于“行”,包含一些用空格隔开的关键字(它属于特殊字符)
3,如果关键字中有空格,处理方法类似于C语言,使用/表示转义,使用“”防止关键字被断开,另外注意/在末尾表示换行
4,#开头的表示注释
5,init.rc包含4种状态类别:Actions/Commands/Services/Options
6,当声明一个service或者action的时候,它将隐式声明一个section,它之后跟随的command或者option都将属于这个section
7,action和service不能重名,否则忽略为error
8,actions就是在某种条件下触发一系列的命令,通常有一个trigger,形式如:
on
9,service结构如下:
service
10,option是service的修饰词,主要包括:
critical
表示如果服务在4分钟内存在多于4次,则系统重启到recovery mode
disabled
表示服务不会自动启动,需要手动调用名字启动
setEnv
设置启动环境变量
socket
开启一个unix域的socket,名字为/dev/socket/
user
表示将用户切换为
group
表示将组切换为
oneshot
表示这个service只启动一次
class
指定一个要启动的类,这个类中如果有多个service,将会被同时启动。默认的class将会是“default”
onrestart
在重启时执行一条命令
11,trigger主要包括:
boot
当/init.conf加载完毕时
当
device-added-
设备
device-removed-
设备
service-exited-
服务
12,命令主要包括:
exec
执行一个
export
设置一个全局变量
ifup
使网络接口
import
引入其他的配置文件
hostname
设置主机名
chdir
切换工作目录
chmod
设置访问权限
chown
设置用户和组
chroot
设置根目录
class_start
启动类中的service
class_stop
停止类中的service
domainname
设置域名
insmod
安装模块
mkdir
创建一个目录,并可以指定权限,用户和组
mount
加载指定设备到目录下
setprop
设置系统属性
setrlimit
设置资源访问权限
start
开启服务
stop
停止服务
symlink
创建一个动态链接
sysclktz
设置系统时钟
trigger
触发事件
write
向