美文网首页工作生活
【转】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