android 启动总览

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值