正如《Android开机启动过程》一文中所讲的,在Android中启动system\core\rootdir\init.rc脚本后,系统的初始化过程中进行一些简单的初始化操作。首先创建系统运行所需的各种环境变量,接着创建各种文件系统(如系统文件系统、用户文件系统、SD Card、缓存(Cache)等)的挂载点,并将这些文件系统挂载到MTD(Memory Technology Device)上。
init.rc这个脚本被直接安装到目标系统的根文件系统中,被 init可执行程序解析。为了让大家理解init.rc脚本,本文会对init.rc脚本的编写做简要的说明。在init.rc脚本中,有4种类型的命令方式,分别为"Actions"、"Commands"、"Services"和"Options"。
"Actions"的命令行参数如下:
on <trigger>
<command>
<command>
<command>
"Commands"的方法包括:
exec <path> [ <argument> ]* //创建进程
export <name> <value> //设置环境变量
ifup <interface> //激活网络接口
import <filename> //导入配置文件
hostname <name> //设置主机名
chmod <octal-mode> <path> //改变文件权限
chown <owner> <group> <path> //改变文件归属
class_start <serviceclass> //启动特定服务
class_stop <serviceclass> //停止特定服务
domainname <name> //设置守护进程名
insmod &l;tpath> //安装共享库
mkdir <path> [mode] [owner] [group] //创建路径
mount <type> <device> <dir> [ &l;tmountoption> ]* //挂载文件系统
setkey //按键映射
setprop <name> <value> //设置系统属性
setrlimit <resource> <cur> <max> //设置资源限制
start <service> //启动服务
stop <service> //停止服务
symlink <target> <path> //创建符号链接
sysclktz <mins_west_of_gmt> //设置系统时区
trigger <event> //触发事件
write <path> <string> [ <string> ]* //打开文件并写入内容
"Services"的命令行参数如下:
service <name> <pathname> [ <argument> ]*
<option>
<option>
...
"Options"为"services"的补充,其方法包括:
Critical //系统核心服务,可导致系统重启
Disabled //服务必须显式启动
setenv <name> <value> //设置环境变量
socket <name> <type> <perm> [ <user> [ <group> ] ] //创建套接字
user <username> //改变用户归属
group <groupname> [ <groupname> ]* //改变用户归属
neshot //指明不能重启服务
class <name> //指定服务的类名
onrestart //服务重启时执行命令
Triggers //触发器
Boot //初始化过程的第一个触发器
<name>=<value> //属性触发
device-added-<path> //设备添加时触发
device-removed-<path> //设备移除时触发
service-exited-<name> //当特定服务存在时触发
init脚本的关键字可以参考init进程的system/core/init/keyword.h文件。
init.rc的使用方法,可以参考说明文件system/core/init/readme.txt
如果想要修改启动过程只需要修改init.c(system/core/init)或者init.rc里的内容即可.