zoukankan      html  css  js  c++  java
  • i.mx6 Android5.1.1 初始化流程之框架

    Android启动过程分为以下几个步骤:

    1.  Boot ROM:  上电后启动芯片固话代码。

    2.  BootLoader:固话代码会根据启动模式启动bootloader,(一般为启动引脚的电平的不同,从不同的介质中启动,启动介质可以分为nor flash,nand flash, emmc等,BootLoader一般为uboot)

    3. kernel:

      1). 会初始化硬件

      2). 根据uboot传过来的参数初始化系统

      3). 加载一些必要的驱动

      4). 启动两个进程init:(PID=1)  kthreadd(PID=2)

    4.Android:

      1).挂在分区,创建目录   (init进程)

      2).动态加载驱动              (int进程)

      3).启动本地服务    (init进程)  

      4).设置系统属性    (在我看来就跟环境变量,全局变量啥的没区别)    

      5).启动servicemanager服务    (这个是重要的一个本地服务。用来进行服务间的binder通讯的,当该服务重启了,所有服务都会重启)

      6).启动Zygote进程                  (该进程由init启动,主要作用为:1.启动虚拟机(可以使用Java了),2.注册JNI(可以调用本地函数了),3.加载类资源、系统资源(使得新的应用能够更快启动),4.启动System server,5.接收从System server发过来的申请,创建新的应用程序)  

      7).启动System server             (1.加载JAVA服务(本地服务在init进程中已经加载了),2.接收申请并发送给zygote,用来创建应用)        

      8).守护系统                  (根据init.rc,确保某些重要的服务不会被关闭,如果关闭则重启)

    其中i.mx6的uboot和kernel暂时不分析,以后再说,我们这里只说Android

    首先,我们先查看一下系统的进程。

    通过查看PPID,我们可以发现,大部分进程都是由init,kthreadd,zygote生成的。

    init:         其init进程也是整个Android的第一个进程,从kernel启动,使系统正式从内核空间转到用户空间了。PID为1

    kthreadd:为也是kernel启动的进程。PID为2

     zygote:  PID为133

    /init生成了:

    /sbin/ueventd

    /sbin/watchdogd

    /system/bin/logd

    /sbin/healthd

    /system/bin/lmkd

    /system/bin/servicemanager (通过binder进行通讯的服务)

    /system/bin/vold

    /system/bin/surfaceflinger  (显示管理服务)

    /system/bin/sh

    /system/bin/netd                (网络管理服务)

    /system/bin/debuggerd

    /system/bin/drmserver  

    /system/bin/mediaserver  (多媒体服务)

    /system/bin/installd    (应用安装服务)

    /system/bin/keystore

    /system/bin/rild

    zygote                                (zygote:第一个Java程序)

    /system/bin/sdcard

    /sbin/adbd        (adb服务)

    这里的zygote为init生成的

    kthreadd:看到了一个binder进程

    zygote生成了:(全是JAVA进程)

    system_server    

    com.android.systemui

    android.process.media

    com.android.inputmethod.latin

    com.android.phone

    com.android.launcher

    com.android.deskclock

    com.estrongs.android.pop

    com.android.keychain

    com.microchip.calibration

    com.android.providers.calendar

    com.android.managedprovisioning

    com.android.onetimeinitializer

    com.android.settings

    com.android.calendar

    后面接着的

    i.mx6 Android5.1.1 系统属性

    i.mx6 Android5.1.1 初始化流程之init进程

    i.mx6 Android5.1.1 初始化流程之init.rc解析

    i.mx6 Android5.1.1 初始化流程之zygote

  • 相关阅读:
    Delphi中的钩子函数HOOK详解
    Delphi好书推荐
    Windows通知栏图标高级编程概述
    关于开机自动运行程序和自动启动服务
    如何在一个窗体中嵌入另一个窗体
    三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子
    Delphi中的钩子函数HOOK详解
    STL(转)
    默认参数(c++)
    STL2
  • 原文地址:https://www.cnblogs.com/maogefff/p/7655004.html
Copyright © 2011-2022 走看看