Android-系统启动

200 阅读2分钟

init进程是Android中用户空间的第一个进程,进程号为1。该进程会创建Zygote和属性服务等。

init是由多个源文件共同组成的,源码位于system/core/init中。

init启动流程:

  • 按下电源键引导芯片代码从预定义的地方开始执行。加载引导程序BootLoader到RAM中,并执行。
  • BootLoader是Andorid中第一个运行小程序,作用是把系统OS拉起并运行。
  • 当系统OS运行,内核就会启动,设置缓存,被保护储存器,计划列表,加载驱动。完成系统设置后,在系统文件中寻找init.rc文件,并启动init进程。init进程的入口函数为main函数。
  • init进程开始初始化和启动属性服务,启动Zygote进程。

main函数做很多事情,创建和挂载启动所需的文件目录,其中有tmpfs,devpts,proc,sysif和selinexfs,这些都是系统运行时目录。

main函数中会对属性进行初始化并启动属性服务。

main函数会设置子进程信号处理函数,防止init进程的子进程成为僵尸进程。加入子进程Zygote终止了,会移除所有Zygote进程的信息,重启Zygote服务的启动脚本中带有onrestart选项的服务。

Android中的属性服务就类似于Windows平台上的注册表管理器,会用键值对形式记录用户和软件的一些使用信息。当系统重启后还是能够找到注册表中的信息,进行相应的初始化工作。init进程启动时会启动属性服务,并为其分配内存,用来储存这些属性。

属性服务会处理客户端的请求,系统属性分为两个类型,一个是普通属性,一个是控制属性。控制属性用来执行一些命令,例如开机动画。

总结init进程启动:

  • 创建和挂载启动所需的文件目录
  • 初始化和启动属性服务
  • 解析init.rc配置文件并启动Zygote进程