配置文件:system/rootdir/init.rc
init进程是一个由内核启动的用户级进程。内核自行启动之后(已经被载入内存,开始运行并已初始化所有设备驱动程序和数据结构等),通过启动一个用户级程序init的方式完成引导过程。Init始终是第一个进程,可以说它是root进程或者说是后续所有进程的父进程。
Init进程的作用包括:文件夹建立,挂载,rc文件解析,属性设置,启动服务,执行动作,socket监听……启动过程就是代码init.c中main函数执行过程。
(1) 初始化log系统
(2) 解析/init.rc和/init.{hardware}.rc文件
(3) 执行.rc文件中的early-init action
(4) 设备初始化,如/dev下创建所有设备节点,下载firmwares
(5) 初始化属性
(6) 执行init action
(7) 开启属性服务
(8) 执行early-boot和boot action
(9) 执行propertyaction
(10) 进入无限循环,等待device/property set/child process退出
rc文件解析</system/core/init.rc >
Init进程启动后,解析init.rc及init.{hardware}.rc初始化脚本文件。脚本被直接安装到目标系统的根文件系统中,,使用方法参考system/core/init/readme.txt,关键字参考system/core/init/keyword.h。Android初始化语言由四大类型的声明组成,即Commands(命令)、Actions(动作)、Services(服务)、以及Options(选项)。
- Command(命令)
Command是一些基本的操作,主要有以下常用命令:
命令 |
说明 |
sysclktz <mins_west_of_gmt> |
设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准) |
exec <path> [ <argument> ]* |
创建和执行一个程序(<path>)。在程序完全执行前,init将会阻塞。 |
export <name><value> |
在全局环境变量中设在环境变量<name>为<value>,所有在这命令之后运行的进程所继承 |
ifup <interface> |
启动网络接口<interface> |
import <filename> |
导入一个init配置文件。 |
hostname <name> |
设置主机名。 |
chmod <octal-mode><path> |