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

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 開篇 我們將通過源碼分析android系統的整個開機過程中,涉及到的各個知識點,這里可能會著重說init進程的啟動...
    momxmo閱讀 1,320評論 0 2
  • 最近一時興起,想對Android的啟動流程進行一次分析,經過一番整理,從以下幾個方面進行總結,代碼部分只討論思路,...
    逸先森閱讀 37,359評論 0 53
  • Android啟動流程 Zygote進程啟動分析 SystemServer啟動分析 AMS啟動分析 Launche...
    afree_閱讀 1,422評論 0 8
  • 這篇是自己學習所用,請謹慎觀看,具體內容可看下面博客:Android啟動流程簡析[https://www.jian...
    QGv閱讀 1,347評論 0 0
  • 前言 本文著重對 Android 系統啟動流程做一個簡析,旨在從宏觀上了解 Android 啟動流程,不涉及具體代...
    Whyn閱讀 2,264評論 0 2