在http://blog.csdn.net/kc58236582/article/details/52247547这篇博客中,我们分析了init进程的流程,现在我们结合代码主要分析init.rc脚本的流程。
首先我们会加载原生的init.rc,然后我们自己的一些内容放在自己的init.rc中。然后会在原生的init.rc中import。
而原生会通过ro.hardware这个属性,来获取我们设备自己的init.rc文件的名字,然后加载。
import /init.${ro.hardware}.rc
而这个ro.hardware是在proc/cmdline中获取其中关于androidboot的内容,来设置相关的ro属性。比如ro.boot.hardware(这个就是用来引入自己的init.rc) ro.boot.mode(开机模式)。
然后android init进程会触发几个关键的触发器,early-init init 后面会根据ro.boot.mode来加载是charge 还是late-init
我们下面来看看early-init init late-init这个三个触发器主要做了什么。
early-init主要是启动了ueventd,这个进程会做设备节点。然后在init进程加载这个trigger之后,会去等一个/dev/.coldboot_done文件,这个文件当ueventd设备节点都做好了会去写这个文件。
后面是init,这里面主要是创建一些目录,chown chmod操作
后面就是late-init,我们看下面late-init中又分了