Android开机启动流程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android开机流程
1. 2. 3.
Bootloader 显示第二屏ZTE LOGO 检测是否进入Recovery模式 检测是否进入Fastboot下载模式 Boot(Kernel+Root):Bootloader会将kernel装载到内存中 运行,并传递cmd参数. 1. Kernel启动会做好所有设备的初始化 2. Load Root文件系统到内存,Root文件系统是一个Ramdisk, 即是在内存中运行的,系统重启后,里面的内容将被重置.
博通平台软件版本Image说明
• 框图
博通平台软件版本Image说明
IMAGE详细 一.CP IMAGE: .\tool\nandpreboot_ver2.5.1_le.img: 做security相关检查,从 CPU Rom 加载到CPU内部内存中运行. .\boot1.img: 被preboot image加载,在CPU内部内存运行,做 配置nand参数等工作. .\boot2_android.img: 被boot1 image加载,运行于外部内存. .\sysparm_dep.img: 存储系统相关性参数 .\sysparm_ind.img: 存储系统无关性参数 .\patch_dsp.img: dsp模块代码 .\SpinnerFirmware\HEDGE_NVRAM6B_RF_LE_Z_Racer2.bin: rf参数 .\comms.img: CP CODE.
RacerII Log抓取原理
• 序列图
RacerII Log抓取原理
• LOG抓取开启过程 1. 开机时,init进程注册service logd:
#logd service to capture logs. service logd /system/bin/logd user root group root disabled
@ packages/apps/EMode/src/com/zte/emode/property.java
4. PropertyService打开开机时注册的logd sevice 5. logd service启动时打开抓取log scripts,同时监听信号 SIGTERM,等待停止抓取LOG指令.
Android启动流程
• 第三步 System Server
startSystemServer@com.android.internal.os.ZygoteInit在Zygote上fork了一个进程 : com.android.server.SystemServer.于是SystemServer@(SystemServer.java)就建立了。Android的 所有服务循环框架都是建立SystemServer@(SystemServer.java)上。在SystemServer.java中看不 到循环结构,只是可以看到建立了init2的实现函数,建立了一大堆服务,并AddService到 service Manager。 main() @ com/android/server/SystemServer { init1(); } Init1()是在Native空间实现的(com_andoird_server_systemServer.cpp)。我们一看这个函数就知道 了,init1->system_init() @System_init.cpp 在system_init()我们看到了循环闭合管理框架。 { Call "com/android/server/SystemServer", "init2" ….. ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); } init2()@SystemServer.java中建立了Android中所有要用到的服务。 这个init2()建立了一个线程,来New Service和AddService来建立服务
@hardware/common/log/main.c
RacerII Log抓取原理
6. 启Leabharlann Baidu抓取LOG脚本logall.sh
PROCFILE=/proc/brcm_logcfg if busybox grep "sdcard" /proc/mounts > /dev/null; then DATE_TIME=`date +%y%m%d.%H%M%S` mkdir /sdcard/Aplogs mkdir /sdcard/Aplogs/$DATE_TIME LOG_DIR=/sdcard/Aplogs/$DATE_TIME echo "7" > /proc/sys/kernel/printk logcat -v time -b main -b radio > $LOG_DIR/logcat-$DATE_TIME.txt& cat /proc/kmsg > $LOG_DIR/kmsg-$DATE_TIME.txt& #qinjinhua@wind-mobi.com 20110720 begin #add option -t, display thread status. top -t -d 10 > $LOG_DIR/top-$DATE_TIME.txt& #qinjinhua@wind-mobi.com 20110720 end ps > $LOG_DIR/ps-$DATE_TIME.txt& #dumpstate > $LOG_DIR/dump-$DATE_TIME.txt& echo "open cp log start." bcmtest -f < /data/wind/scripts/coolcard.sh & echo "open cp log end." sleep 3 echo e > $PROCFILE #kill bcmtest /data/wind/scripts/kill.sh bcmtest Fi @vendor/brcm/common/system/etc/logall.sh
Android开机启动流程
秦金华 20111206
目录
Android开机流程 Android启动流程 博通平台软件版本Image说明 RacerII Log抓取原理
Android开机流程
一.流程图
Android开机流程
二. 开机 Preboot: 存储于Nand起始地址,被CPU Rom内代码加载到CPU内部内 存中运行 Boot1: 1. 被Preboot加载到CPU内存中运行,初始化时钟和DRAM Boot2: 1. 开机震动和开机LOGO,如果是插USB或充电开机则显示充电图片 2. 检测是否进入校准模式 3. 检测是否进入USB下载模式.如果是空板下载,会自动进入下载模式.另 外,如果boot2 image出错导致无法进入下载模式,还可以在开机时通过 短接主板上的两个PIN脚强制进入下载模式.
Android启动流程
• 第一步:initial进程(system/core/init)
init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后 ,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程. Init.rc Init.bcm2157.rc
博通平台软件版本Image说明
二.AP IMAGE: .\AP\bcm2153_bootloader.img:bootloader image .\AP\boot.img: boot image .\AP\recovery.img: recovery image .\AP\system.img: system image .\AP\userdata: userdata image
Android启动流程
• 第二步 Zygote
Servicemanager和zygote进程就奠定了Android的基础。Zygote这个进程起来才会建立起真正的 Android运行空间,初始化建立的Service都是Navtive service.在.rc脚本文件中zygote的描述: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 所以Zygote从main(…)@frameworks/base/cmds/app_main.cpp开始。 (1) main(…)@frameworks/base/cmds/app_main.cpp 建立Java Runtime runtime.start("com.android.internal.os.ZygoteInit", startSystemServer); (2) runtime.start@AndroidRuntime.cpp 建立虚拟机 运行:com.android.internal.os.ZygoteInit:main函数。 (3)main()@com.android.internal.os.ZygoteInit//真正的Zygote。 registerZygoteSocket();//登记Listen端口 startSystemServer(); 进入Zygote服务框架。 经过这几个步骤,Zygote就建立好了,利用Socket通讯,接收ActivityManangerService的请求, Fork应用程序。
Init进程一起来就根据init.rc和init.xxx.rc脚本文件建立了几个基本的服务: servicemanamger zygote …… 最后Init并不退出,而是担当起property service的功能。
Android启动流程
1.1脚本文件 init@System/Core/Init Init.c: parse_config_file(Init.rc) @parse_config_file(Init.bcm2157.rc) 解析脚本文件:Init.rc和Init.xxxx.rc(硬件平台相关) Init.rc是Android自己规定的初始化脚本(Android Init Language, System/Core/Init/readme.txt) 该脚本包含四个类型的声明: Actions Commands Services Options. 1.2 服务启动机制 我们来看看Init是这样解析.rc文件开启服务的。 (1)打开.rc文件,解析文件内容@ system/core/init/init.c 将service信息放置到service_list中。@ system/core/init parser.c (2)restart_service()@ system/core/init/init.c service_start execve(…).建立service进程。
Android启动流程
• 第四步 Home启动
在ServerThread@SystemServer.java后半段,我们可以看到系统在启 动完所有的Android服务后,做了这样一些动作: (1) 使用xxx.systemReady()通知各个服务,系统已经就绪。 (2) 特别对于ActivityManagerService.systemReady(回调) Widget.wallpaper,imm(输入法)等ready通知。 Home就是在ActivityManagerService.systemReady()通知的过程中建 立的。下面是ActivityManagerService.systemReady()的伪代码: systemReady()@ActivityManagerService.java resumeTopActivityLocked() startHomeActivityLocked();//如果是第一个则启动HomeActivity。 startActivityLocked(。。。)CATEGORY_HOME
Android开机流程
System Root文件系统被装载到内存中后,运行Init 进程,从内核态转到用户态执行,开始启动 Android(存储于System分区).
Android启动流程
一.框架图
Android启动流程
二.启动 Android从Linux系统启动有4个步骤; 1. init进程启动 2. zygote, Native服务启动 3. System Server,Android服务启动 4. Home启动
@ vendor/brcm/de_racer2/init.bcm2157_bravaEDN10.rc
2. 拨号键盘输入*983*91#,发送Intent.
@成研应用,SmartDialer.apk
3. ActivityService根据Intent打开工程模式Emode log抓取界 面,用户选择”start”,设置property: android.os.SystemProperties.set("ctl.start", "logd");
相关文档
最新文档