Android的从Linux启动

Android的从Linux启动主要分为四个过程:

1、  init进程的启动;

2、  native进程启动;

3、  system serviceandroid服务启动;

4、  Home的启动

如图:

 

    Init属于用户级进程,在内核启动(载入内存,初始化所有设备驱动和数据结构)结束后运行,接着根据init.rcinit.XXX.rc脚本文件建立servicemanager以及zygote等基本服务;创建完毕后,init进程并不会退出,而是转为property service功能;

Servicemanagerzygote奠定了android的基础。Zygote进程建立起来,才会建立android的运行空间,这里说下 zygote 的建立过程

Zygoteinit.rc的描述:

   Service zygote/system/bin/app_process-Xzygote/system/bin –zygote –start-server

所以Zygotemain@frameworks/base/cmds/app_main.cpp开始(这里的解析init.rc脚本语言还是不太明白,暂时先把整体流程搞通,如何去解析和对应起来有空再学习)

建立Java  runtime runtime.start);

建立虚拟机

通过main@com.android.interal.os.ZyoteInit,建立真正的zygote

接着登记listen端口(都是以socket通信方式):resisterZygoteSocket()

接着startSystemServer(),进入zygote服务框架

建立好后的Zygote通过socket通信,接收ActivityManagerService的请求 fork应用程序。

 

    在建立zygotestartSystemServerZygoteforck了一个com.android.server.SystemServer,于是SystemServer就建立了,在init2()中建立一个线程来new service来建立android需要的服务 Add service把这些服务 service managerservice_list)中

 

    SystemService的启动完android所有服务后调用(XXX.systemReady())来通知所有服务系统准备就绪,Home就是在这个ActivityManager. systemReady()通知过程中建立的

这样 android系统就启动结束了。

 

你可能感兴趣的:(Android的从Linux启动)