美文网首页工作生活
【转】Android启动过程

【转】Android启动过程

作者: RonZheng2010 | 来源:发表于2019-06-29 15:40 被阅读0次

1. ROM 阶段

Android设备上电后,首先从处理器片上ROM的启动引导代码开始执行。ROM寻找Bootloader代码,并加载到内存。

2. Bootloader 阶段

Bootloader完成硬件初始化,然后找到Linux内核代码,并加载到内存。

3. Linux Kernel 阶段

Linux内核初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并执行init程序。Android世界由此开启。

4. Android Init 阶段

init 程序是Android启动过程中最核心的程序。init 工作包括:

  • 创建和挂载一些系统目录和设备节点,并设置权限。如:/dev、/proc、/sys等。
  • 解析 init.rc 和 init.<hardware>.rc,启动属性服务,启动一系列服务和进程。
  • 显示boot logo。默认是“Android”字样。

Android启动过程中,最重要的是启动各个系统服务。系统所有的功能都依赖这些服务来完成。比如启动应用程序,拨打电话,使用WIFI或者蓝牙,播放音视频等。只要这些服务能正常地启动并正常工作,整个Android系统的启动也就完成了。

4.1 本地服务

本地服务是指运行在C++层的系统守护进程。

  • 一部分本地服务由init直接启动。它们定义在init.rc和init.<hardware>.rc中。如 ueventd、servicemanager、debuggerd、rild、mediaserver等。
  • 还有一部分本地服务由前面的本地服务创建。如mediaserver会启动AudioFlinger,MediaPlayerService, 以及 CameraService 等本地服务。

4.2 Android服务

Android服务是指运行在Dalvik虚拟机进程中的服务。

init执行app_process程序,创建Zygote进程。Zygote是Android系统最重要的进程,所有后续的Android应用程序都由它fork出来。

Zygote首先fork出SystemServer,后者启动所有的Android核心服务,包括ActivityManager,WindowManager,PowerManager等。这些Android服务并不是运行在独立的进程中,而是运行在SystemServer进程中,以线程的方式存在。

android_boot.jpg

参考资料

Android内核开发:图解Android系统的启动过程
https://blog.51cto.com/ticktick/1659473

Zygote
https://blog.csdn.net/tfygg/article/details/52086621

Android 系统开机日志
https://blog.csdn.net/zhangbijun1230/article/details/79776711

相关文章

网友评论

    本文标题:【转】Android启动过程

    本文链接:https://www.haomeiwen.com/subject/mdspcctx.html