美文网首页
android 启动总览

android 启动总览

作者: 古风子 | 来源:发表于2022-04-29 15:14 被阅读0次
    Flowchart0.png

    开机启动流程

    启动一个Android手机的步骤是:

    1. 按电源键
    2. 进入开机动画
    3. 经过漫长的等待
    4. 开机动画结束
    5. 正式开机,进入设置画面
    6. 进入系统桌面(Launcher)

    Bootloader引导

    当电源按下时,引导芯片代码 从 ROM (4G)开始执行。Bootloader引导程序把操作系统映像文件拷贝到
    RAM中去,然后跳转到它的入口处去执行,启动Linux内核。

    主要负责对kenel进行解压和初始化的工作

    idle进程
    kernel中的idle进程是0号进程,由内核中启动,并始终执行在内核态,
    由内核态的idle进程开启我们常提的1号进程,init(对应源码,system/core/init/init.cpp)

    init进程

    “天字号”进程,但是经过我们上面的分析,其实它并不是开天辟地的始祖,他也是由idle创建的

    主要任务是解析 init.rc 配置文件并启动 Zygote , servicemanager等进程

    import /init.environ.rc
    import /system/etc/init/hw/init.usb.rc
    import /init.${ro.hardware}.rc
    import /vendor/etc/init/hw/init.${ro.hardware}.rc
    import /system/etc/init/hw/init.usb.configfs.rc
    import /system/etc/init/hw/init.${ro.zygote}.rc
    

    如下所示,init的父进程是0号idle进程

    USER      PID   PPID  VSIZE  RSS   WCHAN            PC  NAME
    aosp:/ # ps | grep "1 "
    root      1     0     8216   2056           0 c7fffc10 S /init
    root      783   1     3024   1428           0 c7fffc10 S /sbin/ueventd
    system    1073  1     5868   2124           0 c7f28c10 S /system/bin/servicemanager
    root      1074  1     48060  6116           0 c7f28c10 S /system/bin/surfaceflinger
    root      1080  1     1124684 75268          0 c7f28c10 S zygote
    audioserver 1081  1     41576  6788           0 c7f28c10 S /system/bin/audioserver
    cameraserver 1082  1     36680  6140           0 c7f28c10 S /system/bin/cameraserver
    media     1089  1     72824  12608          0 c7f28c10 S /system/bin/mediaserver
    

    zygote进程启动

    进程入口:framework/base/cmds/app_process/app_main

    1. 孵化其他应用程序进程,所有的应用的进程都是由zygote进程fork出来的。
      通过创建服务端Socket,等待AMS的请求来创建新的应用程序进程。
    2. 创建SystemServer进程,在Zygote进程启动之后,会通过ZygoteInit的main方法fork出SystemServer进程
    service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server
        class main
        priority -20
        user root
        group root readproc reserved_disk
        socket zygote stream 660 root system
        socket usap_pool_primary stream 660 root system
        onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
        onrestart write /sys/power/state on
        onrestart restart audioserver
        onrestart restart cameraserver
        onrestart restart media
        onrestart restart netd
        onrestart restart wificond
        writepid /dev/cpuset/foreground/tasks
    
    

    由zigote创建的进程

    aosp:/ # ps | grep "1080"
    root      1080  1     1124684 75268          0 c7f28c10 S zygote
    system    1266  1080  1277624 115916          0 c7f28c10 S system_server
    radio     1455  1080  1086252 84392          0 c7f28c10 S com.android.phone
    u0_a17    1462  1080  1209704 142496          0 c7f28c10 S com.android.systemui
    system    1536  1080  1099024 79508          0 c7f28c10 S com.android.settings
    u0_a8     1646  1080  1065556 53912          0 c7f28c10 S android.ext.services
    system    1673  1080  1085972 63144          0 c7f28c10 S com.android.coreservice
    u0_a7     1679  1080  1075960 75232          0 c7f28c10 S android.process.media
    u0_a28    1705  1080  1114972 110280          0 c7f28c10 S com.android.launcher3
    system    1711  1080  1066764 55988          0 c7f28c10 S com.android.keychain
    u0_a31    1743  1080  1067748 58176          0 c7f28c10 S com.android.printspooler
    u0_a2     1787  1080  1067892 54448          0 c7f28c10 S com.android.carrierconfig
    u0_a11    1809  1080  1066544 54732          0 c7f28c10 S com.android.managedprovisioning
    u0_a1     1826  1080  1068220 65096          0 c7f28c10 S com.android.providers.calendar
    u0_a30    1849  1080  1067212 64140          0 c7f28c10 S com.android.inputmethod.pinyin
    

    systemServer进程启动

    1. 创建SystemServiceManager,一个普通类,它用来对系统服务进行创建、启动和生命周期管理。
    2. ServerManager.startService启动各种系统服务:WMS/PMS/AMS等,
    3. 调用ServerManager的addService
      方,将这些Service服务注册到创建SystemServiceManagerr里面

    参考列表:
    https://juejin.cn/post/6844903942292242440

    0号进程:
    https://cloud.tencent.com/developer/article/1434468

    相关文章

      网友评论

          本文标题:android 启动总览

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