zoukankan      html  css  js  c++  java
  • 第15章 Android启动过程 [Android应用开发与系统改造实战]

    15.1 Android初始化语言(init.*.rc、init.conf文件格式)的英文档在system/core/init/readme.txt中有详细说明。
    system/core/rootdir/init.rc
    15.1.8 Android调试记录:
    在默认情况下,程序在被init执行时会将标准输出和标准错误都重定向到/dev/null,若想要获得调试信息,可以通过Android中的logwrapper程序执行你的程序。它会将标准输出/标准错误都重定向到Android的日志系统(通过logcat访问)
    例如,在init.rc中加上红色部分
    service adbd /syste/bin/logwrapper /sbin/adbd
    15.2 Android启动过程     分3大阶段:
    首先是OS级别,由bootloader载入Linux Kernel后,Kernel开始初始化,并载入built-in的驱动程序。Kernel完成开机后,载入init process,切换至user-space后结束kernel的偱环过程,进入进程调度周期
    然后是Android-level,由init process开始,读取init.rc,Native服务启动,并启动重要的外部程序,如servicemanager、Zygote以及System Server.
    最后是Zygote-Mode,Zygote启动完SystemServer后,进入ZygoteMode,通过Socket接收命令。
    15.2.2 Android启动过程
    我们可以通过ps命令查看到设备启动的所有进程,从PID和PPID就可以清晰地看到它们之间的关系。
    PPID是PID的parent (USER的app_*见 http://www.cnblogs.com/jimwind/archive/2012/12/18/2823587.html
    下面我们来分析启动过程,从内核之上,首先应该从文件系统的init开始,因为init是内核进入文件系统后第一个运行的程序。
    system/core/init/init.c

     
    ---------第9章 Java启动流程、调试和程序结构[Android核心原理和系统级应用高效开发]------------
    frameworks/base/core/java/com/android/internal/os/ZygoteInit.java 
    其中的main()方法是一个Android系统正常启动后所执行的第一段Java代码.
    frameworks/base/services/java/com/android/server/SystemServer.java -> main()调用本地方法init1()
    frameworks/base/services/jni/com_android_server_SystemServer.cpp init1()调用的是system_init(),而它在libsystem_server.so中.
    frameworks/base/cmds/system_server/library/system_init.cpp
    frameworks/base/cmds/system_server目录生成可执行程序system_server,此可执行程序只用于测试,正常启动流程中不执行.



  • 相关阅读:
    二进制数组ArrayBuffer
    iperf3测量一个网络最大带宽
    Proxy与Reflect
    Symbol
    Iterator
    Set与Map
    Generator
    Android 共享参数 SharedPreferences
    DDMS files not found: xxxhprof-conv.exe
    Android 状态栏通知 Notification
  • 原文地址:https://www.cnblogs.com/jimwind/p/2833467.html
Copyright © 2011-2022 走看看