1. init 进程是Android 启动后由内核启动的第一用户级进程,init 进程是系统的守护进程,init进程有四个作用依次为:子进程终止处理,生成设备驱动节点,分析及运行init.rc 文件和init.*.rc 文件, 初始化属性服务。init 进程源码位于android_root_dir/system/core/init/init.c 内。
2.init 进程执行流程:
注册与子进程相关的SIGCHLD信号处理器,
创建并挂载启动所需的文件目录,
解析init.rc 文件,
初始化qemu设备,设置模拟器环境,
解析init.*.rc 文件,
创建进程中已经定义好的设备节点文件,生成静态设备节点,
初始化属性服务,
显示logo 在LCD屏幕上,只支持rle565格式的图片,
设置系统初始值,
执行与action_list 相关的init区块的命令,
启动属性服务,
创建套接字,因为子进程若要修改属性值必须向Init申请,故生成“dev/socket/property_service" 套接字,以接收申请,
执行与action_list 相关的init区块的命令,
设置事件处理循环的监听事件,
循环处理事件,
2. init.rc 是init进程启动后执行的启动脚本,定义android系统通用的环境设置及与记录进程相关设置,Init.*.rc 是定义android 在不同平台下的特定进程和环境设置,与Init.rc类似。init.rc 主要包括以On开头的 action list和以service开头的service list, action list 创建所需目录,指定特定文件的权限,service list 记录初始化程序需要启动的程序。
on init 部分:设置环境变量,挂载文件系统,
主要设置根文件系统目录,以及编译时所需的库目录, android 采用NAND FLASH 所以挂载文件系统格式为yaffs2 , 主要挂载 /system /data 两个目录,
/system/bin 存放shell 命令集, app- 基本应用, framework- java lib, lib- bionic lib , /data 及其子目录存放user data.
on boot 部分:设置应用程序终止条件以及驱动目录和文件权限等,
在应用程序终止条件中为各应用指定了OOM 的调整值,值越大,终止优先级越高
service部分 记录 init 进程启动的进程,
一般是一次性程序或运行在后台的deamon 进程