/********************************************************************************************
* author:conowen@大钟
* E-mail:conowen@hotmail.com
* http://blog.csdn.net/conowen
* 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。
********************************************************************************************/
第一步:系统引导bootloader,即RK29xxLoaderXXX.bin文件
加电后,CPU将先执行 bootloader程序,然后bootloader首先会读寄存器地址base + APP_DATA1的内容, 根据这个地址的值决定是否进入recovery模式或者其它模式。bootloader还会读取MISC分区第一块的内容, 决定进入recovery模式还是升级基带Baseband Processor(BP)或做其它事情
而上述寄存器与分区的值是有按键触发或者软件触发的。
a)开机按reset+返回键,系统进入recovery模式,加载recovery.img,recovery.img包含内核,基本的文件系统,用于工程模式的烧写
b)开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动机器(以下只分析正常启动的情况)
第二步: 启动内核kernel
1)源码:kernel/*
2)说明:kernel由bootloader加载
第三步: 文件系统(rootfs)及应用初始化(init)
1)源码:system/core/init/*
2)配置文件:system/rootdir/init.rc,
3)说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能
第四步: 重要的后台程序zygote
1)源码:frameworks/base/cmds/app_main.cpp等
2)说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process
a)建立Java Runtime,建立虚拟机
b)建立Socket接收ActivityManangerService的请求,用于Fork应用程序
c)启动SystemServer
第五步: 系统服务system server
1)源码:frameworks/base/services/java/com/android/server/SystemServer.java
2)说明:被zygote启动,通过System Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)
第六步:桌面launcher
1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现
2)说 明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在 ActivityManagerService.systemReady()通知的过程中建立的,最终调用 ()启launcher
第七步: 解锁
1)源码:
frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*
2)说 明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用 PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个 Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置
第八步: 开机自启动的第三方应用程序
1)源码:
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
2)说 明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。
第九步: 总结
综上所述,系统层次关于启动最核心的部分是zygote(即app_process)和system server,zygote它负责最基本的虚拟机的建立,以支持各个应用程序的启动,而systemserver用于管理android后台服务,启动步骤及顺序。
10. 参考
http://blog.csdn.net/basonjiang_sz/category/648399.aspx
分享到:
相关推荐
本文档“Android 增加一个分区配置指南 V1.00_rk系统新增分区_android_”详细介绍了如何在Rockchip(rk)平台上为Android系统添加新的分区。以下是对该指南的主要内容的概述: 1. **理解Android分区体系结构** - *...
RK3566 RK3568_RK_ANDROID11.0__ANDROID12.0_SDK_RELEASE
本文将详细讲解如何在基于Android 6.0(API级别23)的rk平台(如rk3288或rk3368)上,通过广播接收器来实现系统栏的动态显示与隐藏,并且利用系统属性`def_systembar_hide`来控制设备启动时系统栏的默认状态。...
### Linux内核启动过程及Android根文件系统的挂载 #### Linux内核启动流程概览 Linux内核的启动过程是一个复杂而有序的过程,涉及到多个关键步骤。为了更好地理解这一过程,我们将从架构特定的启动代码开始,逐步...
瑞芯RK3066机型Root教程及工具,懂的~
本ROOT方法适用于RK3288/RK3399 的Android 32/64位系统
RK3288/RK3399 的Android 32/64位系统root工具包 详见我的博客:https://blog.csdn.net/houxn22/article/details/81013718
RK系列 Android系统隐藏工具栏虚拟按键Jar包
rk3568关于4G内存不能启动的问题解决方法
在Android系统中,开机自启动应用是指当设备完成启动过程后,系统会自动运行的一类应用程序。这些应用通常会在用户无须手动干预的情况下执行特定任务,例如同步数据、推送通知或者进行后台服务的初始化。"BOOT_...
在本文中,我们将深入探讨基于Rockchip RK356X平台的Android 11系统对移远EC20 4G模块的集成和支持。Rockchip RK356X是一款高性能、低功耗的处理器,广泛应用于各种智能设备,如平板电脑、电视盒以及物联网设备。...
RK3128平台android系统添加修改遥控器键值参考文档,input.h中定义的键值在KeyEvent.java中不一定有定义哦,如果需要添加新的键值,可参考KeyEvent.java中添加新键值的那段注释。
RK远程提供的RK3399 Android7.1 root patch,有需要root的朋友,请下载,
在Android系统中,RK3588芯片的关机充电流程涉及到多个组件和步骤,确保设备在非运行状态下也能安全有效地进行充电。以下是对该流程的详细解析: 一、代码流程分析 1. 当设备开机并启动Uboot时,它会进入`charge_...
压缩包内OpencvWitchUVCCamera.apk实现功能如下 1、安卓主板运行外接USB摄像头 ...3、解决Android10以上系统运行崩溃问题(插入USB摄像头崩溃,Android7系统无崩溃问题) 4、包含RK3568主板开发相关资料
通过以上知识点,可以看出RK356x系列Android 11.0 SDK涉及到了硬件平台选择、软件环境配置、源码获取、编译流程以及镜像升级等多个方面的内容。对于开发者而言,掌握这些知识点是进行RK356x系列处理器应用开发的必要...
内含: 1、AndroidTool_Release_V2.58(RK3399烧录备份EXE) 2、DriverAssitant_v4.5.rar(RK3399 windows驱动) 3、mkbootimg,resource_tool,umkbootimg,rkdeveloptool(RK3399 linux解包工具)
本文将深入探讨"RK3288 android 5.1 EC20驱动"的相关知识点,这涉及到一个基于Rockchip RK3288处理器的Android 5.1系统,以及如何在其上集成EC20 4G模块的驱动程序。 首先,让我们了解核心组件: 1. **RK3288**: ...