android开机过程

合集下载

android启动流程

android启动流程

android启动流程Android启动流程:Android是一款广泛使用的移动操作系统,其启动流程是一个相对复杂的过程,涉及到多个模块的加载和启动。

下面将详细介绍Android的启动流程。

1、开机自检(Boot)当手机开机时,首先进行开机自检。

在这个阶段,系统会检测硬件设备的状态,包括电池是否齐全、屏幕是否正常等。

如果硬件设备通过了自检,系统将会开始启动。

2、引导加载程序(Bootloader)开机自检完成后,系统会加载引导加载程序(Bootloader)。

引导加载程序是硬件平台的一部分,其主要作用是启动操作系统。

在加载引导加载程序的过程中,系统会自动检测手机的存储器设备,确定存储设备中是否有可用的引导文件。

3、Linux内核加载一旦引导加载程序找到可用的引导文件,系统将会加载Linux内核。

Linux内核是Android系统的核心组件,负责管理内存、文件系统、驱动程序等。

4、文件系统加载一旦Linux内核加载完成,系统将会加载文件系统。

Android系统使用的是基于Linux的文件系统,在这个过程中,系统会加载并初始化各个文件系统,包括根文件系统、系统文件系统、数据文件系统等。

5、初始化进程(Init)一旦文件系统加载完成,系统将会启动初始化进程(Init)。

初始化进程是Android系统的第一个进程,其作用是启动系统的各个进程和服务。

6、启动用户空间(System Server)在初始化进程启动后,系统会启动用户空间,加载系统的用户界面等组件。

7、启动应用程序一旦用户空间加载完成,系统将会启动应用程序。

应用程序是Android系统的核心功能,包括系统应用程序和用户安装的应用程序。

系统应用程序包括电话、短信、浏览器等,而用户安装的应用程序则是用户根据自己的需求下载和安装的。

8、应用程序启动完成一旦应用程序启动完成,系统将进入正常运行状态,用户可以通过界面操作手机。

总结:Android系统的启动流程是一个复杂而严密的过程,经过开机自检、引导加载程序、Linux内核加载、文件系统加载、初始化进程、启动用户空间、启动应用程序等多个步骤,最终实现用户界面的显示和应用程序的运行。

手机开机的原理

手机开机的原理

手机开机的原理
手机开机的原理是指手机从关机状态转换为开机状态的过程。

开机过程主要包括电源接通、硬件初始化、系统启动等步骤。

首先,当用户按下手机的电源键时,电源系统接通,电源开始为手机提供电能。

此时,手机的电源管理芯片开始工作,向各个部件提供合适的电压和电流。

接着,手机的硬件部件进行初始化。

这包括各个硬件组件的自检和初始化,如处理器、内存、存储器、显示屏等。

处理器会检测硬件状态,初始化寄存器和其他器件,确保各个硬件组件工作正常。

然后,手机系统启动。

一般来说,手机的系统存储在闪存中,当电源接通后,处理器会加载系统内核到内存中,并执行。

系统内核会进行一系列的初始化操作,包括初始化文件系统、加载驱动程序、启动各个系统服务等。

最后,手机进入待机状态,用户可以开始使用手机进行各种操作。

在待机状态下,手机会监测各种输入事件,如用户触摸屏幕、按下按键等,以响应用户的操作。

总体而言,手机开机的原理可以归纳为电源接通、硬件初始化和系统启动三个主要步骤。

通过这些步骤,手机能够从关机状态快速切换为开机状态,为用户提供各种功能和服务。

手机开机的工作原理

手机开机的工作原理

手机开机的工作原理手机开机的工作原理是通过一系列操作和调度来启动系统并准备手机的各种功能。

以下是手机开机的一般工作原理:1. 按下手机的电源按钮。

当用户按下手机的电源按钮时,电源管理芯片会接收到相应的信号,并开始供电。

2. 电源管理芯片供电。

电源管理芯片会为手机的各个组件供电,包括处理器、内存、显示屏等。

同时,电源管理芯片还会检测电池电量,并向处理器发送相应的信息。

3. 处理器初始化。

在供电之后,处理器会接收到电源管理芯片发送的信号,并开始初始化。

处理器首先会进行一系列自检程序,检测硬件设备是否正常,并配置处理器的工作状态。

4. 加载引导程序。

处理器初始化完成后,会加载引导程序到内存中。

引导程序是手机系统启动的第一阶段,在这个阶段,系统会进行一些基本的设置和准备工作。

5. 加载操作系统。

引导程序会读取系统存储器中存储的操作系统,并将操作系统加载到内存中。

加载完成后,处理器会跳转到操作系统的入口点,开始运行操作系统。

6. 初始化系统。

操作系统开始运行后,会进行一系列初始化工作,包括初始化设备驱动程序、设置系统参数、加载用户界面等。

7. 启动应用程序。

系统初始化完成后,会开始启动已安装的应用程序。

应用程序会根据用户的设置和需求进行相应的操作和响应。

8. 显示启动界面。

在应用程序启动的同时,手机的显示屏会显示启动界面,向用户显示手机正在开机的状态。

9. 开机完成。

当系统和应用程序完全启动后,手机开机过程就完成了。

此时,用户可以正常使用手机的各种功能。

总之,手机开机的过程是一个复杂的操作和调度过程,涉及到多个硬件组件和软件模块的配合工作。

通过这个过程,手机从断电状态恢复到正常工作状态,并准备好接受用户的操作。

RK系统启动流程

RK系统启动流程

RK29机型之Android系统启动流程分类:瑞芯微RK 2012-02-12 14:50 4439人阅读评论(0) 收藏举报/********************************************************************************************* author:conowen@大钟* E-mail:conowen@* /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包含内核,基本文件系统,用于正常启动机器(以下只分析正常启动的情况)第二步:启动内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载第三步:文件系统(rootfs)及应用初始化(init)1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能第四步:重要的后台程序zygote1) 源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa) 建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动SystemServer第五步:系统服务system server1) 源码:frameworks/base/services/java/com/android/server/SystemServer.java2) 说明:被zygote启动,通过System Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)第六步:桌面launcher1) 源码: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.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

Android7.0开机流程--bootprof

Android7.0开机流程--bootprof

Android7.0开机流程--bootprof<< /proc/bootprof >>:----------------------------------------0 BOOT PROF (unit:msec)----------------------------------------636 : preloader1949 : lk----------------------------------------62.109537 : ON112.790461 : 1-swapper/0 : initcall: of_init 15.703770ms163.221692 : 1-swapper/0 : initcall: customize_machine 30.648923ms195.211307 : 1-swapper/0 : initcall: param_sysfs_init 17.906769ms212.963307 : 1-swapper/0 : initcall: pm_sysrq_init 17.691000ms232.896307 : 1-swapper/0 : initcall: cmdq_init 15.340000ms282.108615 : 1-swapper/0 : initcall: event_trace_init 40.209923ms299.088846 : 1-swapper/0 : initcall: pmic_mt_init 15.703846ms410.799923 : 1-swapper/0 : initcall: populate_rootfs 107.169000ms505.464769 : 1-swapper/0 : probe: probe=i2c_device_probe drv=sm5414(c104fa3c) 42.075308ms 506.070077 : 1-swapper/0 : initcall: sm5414_init 42.768000ms522.554923 : 1-swapper/0 : probe: probe=platform_drv_probe drv=musb-hdrc(c104ff50) 15.892385ms522.634539 : 1-swapper/0 : initcall: musb_init 16.529154ms554.854539 : 1-swapper/0 : probe: probe=mtkfb_probe drv=mtkfb(c1056f2c) 28.608000ms555.117539 : 1-swapper/0 : initcall: mtkfb_init 29.333846ms651.142000 : 1-swapper/0 : probe: probe=platform_drv_probe drv=mtk-msdc(c1095950) 43.962231ms701.404693 : 1-swapper/0 : probe: probe=platform_drv_probe drv=mtk-msdc(c1095950) 50.082846ms702.297924 : 1-swapper/0 : initcall: mt_msdc_init 95.402693ms743.782462 : 1-swapper/0 : probe: probe=platform_drv_probe drv=soc-audio(c109ce6c) 16.761000ms743.913539 : 1-swapper/0 : initcall: mt_soc_snd_init 17.118154ms1543.580387 : 1-swapper/0 : probe: probe=i2c_device_probedrv=LTR_578ALS(c104b748) 777.832386ms1543.860772 : 1-swapper/0 : initcall: alsps_init 778.654233ms1951.618311 : 1-swapper/0 : probe: probe=i2c_device_probedrv=MXC4005(c104b9f8) 407.059539ms1952.416465 : 1-swapper/0 : initcall: acc_init 408.320001ms2316.354312 : 133-kworker/u8:4 : probe: probe=i2c_device_probe drv=ft5x0x(c107ae8c) 350.688847ms 2317.406466 : 133-kworker/u8:4 : probe: probe=platform_drv_probe drv=mtk-tpd(c106def4) 352.631924ms2328.113235 : 1-swapper/0 : initcall: battery_init 363.983847ms2331.870851 : 1-swapper/0 : Kernel_init_done2714.569236 : 1-init : INIT:early-init3397.629315 : 1-init : INIT:late-init3397.783468 : 1-init : INIT:Mount_START5501.145627 : 1-init : INIT:Mount_END6579.013322 : 1-init : INIT:post-fs7410.389247 : 1-init : INIT:post-fs-data7456.532786 : 1-init : post-fs-data: on modem start 7786.491556 : 1-init : INIT:boot8034.992018 : 213-wmt_loader : probe: probe=platform_drv_probe drv=fm(c1061b8c) 76.002616ms 9821.586561 : 223-surfaceflinger : BOOT_Animation:START 12617.459567 : 263-main : Zygote:Preload Start14808.826111 : 263-main : Zygote:Preload 4161 classes in 2025ms15333.832343 : 263-main : Zygote:Preload 114 obtain resources in 350ms15345.829497 : 263-main : Zygote:Preload 41 resources in 12ms15761.499883 : 263-main : Zygote:Preload End15945.818806 : 955-system_server :Android:SysServerInit_START16676.514577 : 955-system_server : Android:PackageManagerService_Start17572.521118 : 955-system_server : Android:PMS_scan_START17615.765810 : 955-system_server : Android:PMS_scan_data:/vendor/overlay17638.123041 : 955-system_server : Android:PMS_scan_data:/system/framework17698.509887 : 955-system_server : Android:PMS_scan_data:/vendor/framework17720.575887 : 955-system_server : Android:PMS_scan_data:/system/priv-app19684.112815 : 955-system_server : Android:PMS_scan_data:/system/app21673.248512 : 955-system_server : Android:PMS_scan_data:/vendor/priv-app21799.495897 : 955-system_server : Android:PMS_scan_data:/system/vendor/app22122.989128 : 955-system_server : Android:PMS_scan_data:/vendor/operator/app24774.798135 : 955-system_server : Android:PMS_scan_data:/vendor/plugin24843.718443 : 955-system_server : Android:PMS_scan_END24875.600520 : 955-system_server : PMS:reconcileAppsDataLI26507.685831 : 955-system_server : Android:PMS_READY 29155.220145 : 955-system_server : AMS:systemReady29170.716222 : 955-system_server : AMS:AMS_READY29278.905992 : 955-system_server : AP_Init:[service]:[tin]:[com.android.i tin/.LatinIME]:pid:105429306.496838 : 955-system_server : AP_Init:[service]:[com.android.systemui]:[com.android.systemui/. ImageWallpaper]:pid:1060:(PersistAP)29382.938069 : 955-system_server : AP_Init:[]:[WebViewLoader-armeabi-v7a]:pid:108329654.529993 : 955-system_server : SystemServer:NetworkManagementService systemReady 29957.197147 : 955-system_server : SystemServer:NetworkStatsService systemReady30331.665071 : 955-system_server : SystemServer:NetworkPolicyManagerService systemReady 30442.371687 : 955-system_server : SystemServer:ConnectivityService systemReady30565.391226 : 955-system_server : SystemServer:PhaseThirdPartyAppsCanStart30594.640533 : 955-system_server : AP_Init:[added application]:[com.android.phone]:[com.android.phone]:pid:1180 :(PersistAP)30620.866149 : 955-system_server : Android:SysServerInit_END30644.739303 : 1131-Binder:955_6 : AP_Init:[activity]:[com.android.settings]:[com.android.settings/.F allbackHome]:pid:119330985.974073 : 1131-Binder:955_6 : AP_Init:[service]:[com.transsion.mgzkeyguard]:[com.transsion.m gzkeyguard/.remotesrv.MgzKeyguardRSrv]:pid:121231120.822073 : 983-ActivityManager :AMS:ENABLE_SCREEN31127.732150 : 991-android.display : AP_Launch: com.android.settings/.FallbackHome 497ms33601.738079 : 400-Binder:223_1 : BOOT_Animation:END 33601.792002 : OFF----------------------------------------================ END of FILE ===============。

Android 开机启动流程

Android 开机启动流程

Android的开机流程1. 系统引导bootloader1) 源码:bootable/bootloader/*2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.img包含内核,基本的文件系统,用于工程模式的烧写c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)2. 内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载3. 文件系统及应用init1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能4. 重要的后台程序zygote1) 源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa) 建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动System Server5. 系统服务system server1) 源码:frameworks/base/services/java/com/android/server/SystemServer.java2) 说明:被zygote启动,通过System Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)6. 桌面launcher1) 源码:ActivityManagerService.java为入口,packages/apps/launcher*实现2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher7. 解锁1) 源码:frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置8. 开机自启动的第三方应用程序1) 源码:frameworks/base/services/java/com/android/server/am/ActivityManagerService.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

安卓手机的正确操作方法

安卓手机的正确操作方法

安卓手机的正确操作方法
以下是一些安卓手机的正确操作方法:
1. 开机和重启:长按电源按钮,选择“开机”或“重启”选项。

2. 锁屏和解锁:按下电源按钮或使用指纹识别、面容识别等功能进行解锁。

3. 导航栏和通知栏:从屏幕底部向上滑动可打开导航栏,从屏幕顶部向下滑动可打开通知栏。

4. 主屏幕和应用列表:主屏幕上显示常用的应用程序图标,可以左右滑动查看其他页面。

从主屏幕下方的应用程序图标或者右上角的应用程序图标可以打开应用列表。

5. 应用程序的安装和卸载:打开“Play 商店”应用,搜索您需要的应用程序并安装。

长按应用图标,选择“卸载”选项进行卸载。

6. 应用的切换和关闭:长按导航栏上方的小方块按钮或使用全屏手势进行应用的切换。

从导航栏上方向上滑动或者按下导航栏的返回按钮可以关闭应用。

7. 设置和个人化:打开“设置”应用,可以进行网络连接、声音、显示、安全等设置。

也可以更改壁纸、主题、字体等进行个性化设置。

8. 数据连接和Wi-Fi:打开“设置”应用,选择“无线和网络”或“网络和互联网”选项,开启或关闭移动数据和Wi-Fi连接。

9. 多任务管理:长按导航栏上方的小方块按钮或使用全屏手势进行多任务界面的切换。

在多任务界面可以滑动或点击应用图标切换不同的应用程序。

10. 照相和录像:打开相机应用,通过点击拍照按钮拍照,或者选择录像模式进行录像。

可以使用前置或后置摄像头,并进行各种设置和调整。

以上是一些基本的安卓手机操作方法,具体操作可能会因手机品牌和型号而有所不同。

Android2.2手机中文详细说明书

Android2.2手机中文详细说明书

用户使用手册欢迎:欢迎您选择使用本手机,您可以通过阅读本手册,全面的了解此款手机的使用,领略其完善的功能和简介的操作方法。

声明:本手册仅作为产品使用指导,并不代表对产品软硬件配置的说明,产品和配件可能因地区而异。

本手机为双卡双待手机,适用于WCDMA以及GSM/GPRS网络环境,某些功能需要网络运营商或服务提供商的支持,详细请参见用户手册相关内容。

为保证您的安全使用,请先阅读“安全须知”。

III手册图标说明:【 】 表示一个按键操作。

黑体字 表示一个界面菜单或图标操作。

表示提示信息。

表示产品使用之特别说明或提示。

表示特别需要注意的警示信息。

目录1.认识您的手机 (1)∙按键说明 (3)∙开始使用设备 (4)∙安装USIM/SIM卡和电池 (4)∙安装存储卡 (10)∙为电池充电 (11)∙开机和关机 (12)∙密码 (12)PIN码 (12)PIN2码 (12)PUK与PUK2码 (12)2.快速入门指南 (13)∙开启和关闭屏幕 (13)∙锁定与解锁 (13)∙主屏幕 (14)∙状态栏图标 (15)∙应用程序菜单 (17)∙设置时间和日期 (18)∙拨打电话 (18)从拨号盘拨打电话 (18)从联系人拨打电话 (19)从通话记录拨打电话 (19)从收藏中拨打电话 (19)创建一个收藏联系人 (19)III∙接听来电,查看未接来电 (20)接听来电 (20)查看未接来电 (20)∙信息 (20)3.文本输入和智能手机设置 (22)∙文本输入 (22)∙智能手机设置 (23)声音设置 (23)显示设置 (24)安全设置 (25)主屏幕设置 (25)4.互联网 (27)∙浏览器 (27)浏览网页 (27)浏览器设置 (28)∙蓝牙连接 (28)开启/关闭蓝牙 (28)蓝牙设置 (29)将手机连接到新设备 (30)∙W I-F I (30)连接Wi-Fi (30)Wi-Fi搜索和连接 (31)5.联系人 (32)查看联系人 (32)创建联系人 (33)编辑联系人 (34)删除联系人 (34)导入导出联系人 (34)6.信息与邮件 (35)IV∙信息 (35)创建短信息 (35)回复信息 (35)创建彩信 (36)管理信息 (36)∙邮件 (37)设置电子邮件 (37)发送邮件 (38)接收邮件 (38)7.多媒体 (40)∙照相机 (40)拍摄照片 (40)查看照片 (41)∙音乐播放器 (41)播放音乐 (42)∙录音机 (44)8.其他应用程序 (45)∙时钟 (45)添加闹钟 (45)∙日历 (45)添加新活动 (46)管理日程安排 (46)∙计算器 (46)∙地图 (47)9.电池维护与设备保养 (48)∙电池维护 (48)∙设备保养 (49)10.简单故障排除 (50)V移动电话机环保说明 (52)VI安全须知请阅读下列简易的使用规则。

红米首次开机操作方法

红米首次开机操作方法

红米首次开机操作方法
红米首次开机操作方法如下:
1. 找到手机的电源按钮,通常位于手机的右侧或顶部。

2. 按住电源按钮直到手机震动或屏幕亮起。

3. 接下来,你会看到手机的启动画面和品牌标志,这表明手机正在开机。

4. 随后,手机会进入引导界面,提示你选择语言、时区等设置。

根据个人需要进行设置。

5. 完成设置后,手机会进入主屏幕,你可以开始使用红米手机了。

需要注意的是,首次开机时可能需要连接到Wi-Fi网络,以便下载和安装系统更新。

另外,在开机过程中最好保持手机的电量足够,并确保SIM卡已插好,以获得最佳的使用体验。

android系统从systemserver开始的launcher启动详细流程

android系统从systemserver开始的launcher启动详细流程

android系统启动流程——从systemserver开始的launcher目录1 概述: (2)2 systemserver工作内容分析 (4)2.1 SystemServer类简述 (4)2.2 ServerThread类简述 (4)3 ActivityManagerService工作内容分析 (6)3.1 ActivityManagerService之main (7)3.1.1创建ActivityManagerService实例 (7)3.1.2 创建ActivityThread实例,获取全局Context (8)3.1.3创建ActivityStackSupervisor实例 (10)3.1.4调用startRunning (10)3.2 ActivityManagerService之setSystemProcess (11)3.3. ActivityManagerService之setWindowManager (12)3.4 ActivityManagerService之systemready (12)3.4.1 启动所有Persistent属性的APK (13)3.4.2 启动launcher (14)4 ActivityStackSupervisor启动launcher (15)4.1首先回顾一下ActivityStackSupervisor实例的初始化 (15)4.2 进入ActivityStackSupervisor.resumeTopActivitiesLocked (16)4.3 进入ActivityStack.resumeTopActivityLocked (16)4.4 回到ActivityStackSupervisor.resumeHomeActivity。

(17)4.5 ActivityStackSupervisor.mProbeThread (17)4.6 ActivityStackSupervisor.mProbeHandler (18)4.7 回到ActivityManagerService.startHomeActivityLocked (18)4.8 ActivityStackSupervisor.startHomeActivity (19)4.9 ActivityStackSupervisor.startActivityUncheckedLocked (20)4.10 ActivityStack.startActivityLocked (21)4.11 ActivityStackSupervisor.resumeTopActivitiesLocked (22)4.12 ActivityStack.resumeTopActivityLocked (22)4.13 ActivityStackSupervisor.startSpecificActivityLocked (24)4.14 ActivityStackSupervisor.realStartActivityLocked (24)4.15 ActivityManagerService.startProcessLocked (25)5 Process类管理创建activity进程 (27)5.1 Process.start: (27)5.2Process.startViaZygote (28)5.3 zygoteSendArgsAndGetResult和openZygoteSocketIfNeeded (28)6 ActivityThread线程类分析 (30)6.1 ActivityThread.main分析 (30)6.1.1创建了looper对象和本线程绑定。

高通Andriod开机流程与镜像说明

高通Andriod开机流程与镜像说明

⾼通Andriod开机流程与镜像说明Android镜像说明Android设备刷机时都需要ROM包,ROM包下⾯有很多的.img和其他的相关镜像⽂件,其中这⾥⾯包含了Android很多的分区,Android镜像⽂件是通过源码编译⽣成的,下⾯是ROM包各个镜像的作⽤:镜像⽂件说明boot.img boot分区,包括内核⽂件和虚拟内存盘Ramdisk,负责设备开机,可在recovery模式进⾏擦除,重新安装带有boot分区的新系统system.img system分区,包含Android系统的⽤户界⾯以及设置上的⼀些预装系统应⽤recovery.img recovery分区,替代启动分区,执⾏恢复和维护系统的⼀些操作userdata.img data分区,⽤于保存⽤户的数据,例如联系⼈,短信,设置偏好和应⽤程序存放的地⽅cache.img cache分区,⽤于放置系统频繁访问的数据和应⽤程序组件的分区persist.img persist分区包含了设备的传感器和信号部分的驱动程序,例如wifi,蓝⽛连接都有关系splash.img开机画⾯⽂件NON-HLOS.bin modem image负责处理通讯协议相关的基带镜像prog_emmc_firehose_8953_ddr.mbn QFIL软件烧录系统的时候,需要⽤到此⽂件,应该是关于EMMC、DDR的配置参数相关的sbl1.mbn硬件的初始化,并且保存加载其他模块信息的顺序tz.mbn trustzone是ARM TrustZone® 技术是系统范围的安全⽅法,基于安全需求和引导模式配置XPU,NAND MPU,它和其他模块代码运⾏在相互隔离的区域,主要实现底层很多安全性特性emmc_appsboot.mbn bootloader⽂件,进⼊fastboot模式相关⽂件rpm.mbn电源管理器,是⾼通MSM平台另外加的⼀块芯⽚,虽然与AP芯⽚打包在⼀起,但其是⼀个独⽴的ARM Core。

详解Android(安卓)手机系统启动过程

详解Android(安卓)手机系统启动过程

最近打算自己移植MIUI,所以自学了不少东西,分享一下,recovery刷机模式中启动到过程吧,一下所有内容均有我略读相关源码得到和总结得来,不一定完全正确,不对之处还望海涵:当我们只是按下电源键开机时,会进入正常启动模式。

Secondary stage bootloader 会从boot 分区开始启动。

Boot 分区的格式是固定的,首先是一个头部,然后是Linux 内核,最后是用作根文件系统的ramdisk。

当Linux 内核启动完毕后,就开始执行根文件系统中的init 程序,init 程序会读取启动脚本文件(init.rc 和init.goldfish)。

现在就来说一下,init.rc到底在做些什么,我会在附件上传有关init_rc脚本语法和自己阅读是坐下到笔记,希望对各位有所帮助。

1.on boot-pause2. exec sbin/chargerlogo #运行sbin/chargerlogo(此运行在内核目录下)3.4.on early-init5. start ueventd #调用sbin/uventd链接所指的可执行程序,其源码位于system/core/init/ueventd.c,为设备赋予权限6.7.on init #源码位于system/core/init/init.c8.#主要完成一下的工作9.#清空umask、创建并挂载一些基本的目录(/dev-设备、/proc-系统信息、/sys-系统信息、/dev/pts-终端控制字,用于执行adb、/dev/socket)10.11.sysclktz 0 #把硬件时钟当成本地时间(GMT时区)12.13.loglevel 3 #讲系统LOG设置成可见,0为(NONE)14.15. write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"performance"16.17.# setup the global environment 设置全局变量18. export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin#PATH变量19. export LD_LIBRARY_PATH /vendor/lib:/system/lib #库20. export ANDROID_BOOTLOGO 121. export ANDROID_CACHE /cache #cache目录22. export ANDROID_ROOT /system #安卓系统root分区-->/system23. export ANDROID_ASSETS /system/app #安卓系统可访问到-->/system/app(这就是为什么没有root权限不能删除/system/app下到文件)24. export ANDROID_DATA /data #安卓data区25. export DOWNLOAD_CACHE /cache/download #下载缓存为/cache/download26. export EXTERNAL_STORAGE /mnt/sdcard #附加存储-->sdcard卡27. export ASEC_MOUNTPOINT /mnt/asec #asec根文件目录28. export LOOP_MOUNTPOINT /mnt/obb29. export SD_EXT_DIRECTORY /sd-ext #sdcard挂载格式30. export BOOTCLASSPATH/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/f ramework/ext.jar:/system/framework/framework.jar:/system/framework/andr oid.policy.jar:/system/framework/services.jar:/system/framework/core-ju nit.jar #bootclasspath31. export DSP_PATH /system/lib/dsp #dsp(数字信号处理器) path32. export DEFAULT_BASEIMAGE /system/lib/dsp/baseimage.dof33. export QOSDYN_FILE /system/lib/dsp/qosdyn_3430.dll64P34.35.# Backward compatibility #反向兼容,确保对以前版本到兼容?(不缺定)36. symlink /system/etc /etc #在/etc下创建链接到/system/etc到链接37. symlink /sys/kernel/debug /d38.39.# Right now vendor lives on the same filesystem as system,40.# but someday that may change.41. symlink /system/vendor /vendor42.43.# create mountpoints44. mkdir /mnt 0775 root system45. #给system赋予0775的权限,也就是rwx-rwx-rw-现在详细解释如下46. #此权限数值对应为:47. #u(用户):r(读)-w(写)-x(执行)48. #g(群组):r(读)-w(写)-x(执行)49. #0(其他):r(读)-w(写)-50. #对应到2进制数值为:51. #1 1 1 :111 ---752. #1 1 1 :111 ---753. #1 1 0 :110 ---554. #55. mkdir /mnt/sdcard 0000 system system56.57.# Create cgroup mount point for cpu accounting #为cpu创建58. mkdir /acct59. mount cgroup none /acct cpuacct60. mkdir /acct/uid61.62.# Backwards Compat - XXX: Going away in G*63. symlink /mnt/sdcard /sdcard64.65. mkdir /system66. mkdir /data 0771 system system67. mkdir /cache 0771 system cache68. mkdir /config 0500 root root69.70. mkdir /sqlite_stmt_journals 01777 root root71. mount tmpfs tmpfs /sqlite_stmt_journals size=4m72.73. # Directory for putting things only root should see.#创建用于存放root用户才能可见到文件夹74. mkdir /mnt/secure 0700 root root75.76. # Directory for staging bindmounts #伺服器根文件目录77. mkdir /mnt/secure/staging 0700 root root78.79. # Directory-target for where the secure container80. # imagefile directory will be bind-mounted81. mkdir /mnt/secure/asec 0700 root root82.83. # Secure container public mount points.84. mkdir /mnt/asec 0700 root system85. mount tmpfs tmpfs /mnt/asec mode=0755,gid=100086.87. # Filesystem image public mount points.88. mkdir /mnt/obb 0700 root system89. mount tmpfs tmpfs /mnt/obb mode=0755,gid=100090.91. mkdir /sd-ext 0771 system system92.93. write /proc/sys/kernel/panic_on_oops 194. write /proc/sys/kernel/hung_task_timeout_secs 095. write /proc/cpu/alignment 496. write /proc/sys/kernel/sched_latency_ns 1000000097. write /proc/sys/kernel/sched_wakeup_granularity_ns 200000098. write /proc/sys/kernel/sched_compat_yield 199. write /proc/sys/kernel/sched_child_runs_first 0100.101.# Create cgroup mount points for process groups102. mkdir /dev/cpuctl103. mount cgroup none /dev/cpuctl cpu104. chown system system /dev/cpuctl105. chown system system /dev/cpuctl/tasks106. chmod 0777 /dev/cpuctl/tasks107. write /dev/cpuctl/cpu.shares 1024108.109. mkdir /dev/cpuctl/fg_boost110. chown system system /dev/cpuctl/fg_boost/tasks111. chmod 0777 /dev/cpuctl/fg_boost/tasks112. write /dev/cpuctl/fg_boost/cpu.shares 1024113.114. mkdir /dev/cpuctl/bg_non_interactive115. chown system system /dev/cpuctl/bg_non_interactive/tasks 116. chmod 0777 /dev/cpuctl/bg_non_interactive/tasks117. # 5.0 %118. write /dev/cpuctl/bg_non_interactive/cpu.shares 52119.120.#[LGE_start] hyunwoong.ahn121. mkdir /dvp 0771 system system122. mkdir /dvp/hwkey 0771 system system123. mkdir /dvp/userdata 0771 system system124.#[LGE_end] hyunwoong.ahn125.126. chown system system /sys/class/leds/lcd-backlight/als 127.128. # Increase readahead buffers on MMC devices129. write /sys/block/mmcblk0/bdi/read_ahead_kb 1024130. write /sys/block/mmcblk1/bdi/read_ahead_kb 1024131.132.on fs133.# mount mtd partitions134. # Mount /system rw first to give the filesystem a chance to save a checkpoint135. mount ext4 /dev/block/mmcblk0p8 /system ro noatime barrier=1 wait 136. # We chown/chmod /data again so because mount is run as root + defaults 137. mount ext4 /dev/block/mmcblk0p9 /data nosuid nodev noatime barrier=1 wait138. chown system system /data139. chmod 0771 /data140.141.#[LGE_star]Hyunwoong.ahn^M142. mount ext3 /dev/block/mmcblk0p6 /dvp/hwkey nosuid nodev143. chown system system /dvp/hwkey144. chown system divxdrm /dvp/hwkey/key.hw145. chmod 0660 /dvp/hwkey/key.hw146. mount ext3 /dev/block/mmcblk0p6 /dvp/userdata nosuid nodev147. chown system divxdrm /dvp/userdata148. chmod 0770 /dvp/userdata149. chown system system /dev/block/mmcblk0p5150. chown system system /dev/block/mmcblk0p12151. chmod 0777 /dev/block/mmcblk0p5152. chmod 0777 /dev/block/mmcblk0p12153.154. mount ext4 /dev/block/mmcblk0p10 /cache nosuid nodev noatime barrier=1 wait155.156. mkdir /lgdrm 0770 lgdrm lgdrm_acc157. mount ext3 /dev/block/mmcblk0p5 /lgdrm nosuid nodev158.159.160.161.162.163.on post-fs164.165. # once everything is setup, no need to modify /166. mount rootfs rootfs / ro remount167.168. # We chown/chmod /data again so because mount is run as root + defaults 169. chown system system /data170. chmod 0771 /data171.172. # Mount compressed filesystems173. mount squashfs loop@/system/lib/modules/modules.sqf/system/lib/modules ro174. mount squashfs loop@/system/xbin/xbin.sqf /system/xbin ro175.176. # Create dump dir and collect dumps.177. # Do this before we mount cache so eventually we can use cache for 178. # storing dumps on platforms which do not have a dedicated dump partition.179.180. mkdir /data/dontpanic181. chown root log /data/dontpanic182. chmod 0750 /data/dontpanic183.184. # Collect apanic data, free resources and re-arm trigger185. copy /proc/apanic_console /data/dontpanic/apanic_console186. chown root log /data/dontpanic/apanic_console187. chmod 0640 /data/dontpanic/apanic_console188.189. copy /proc/apanic_threads /data/dontpanic/apanic_threads190. chown root log /data/dontpanic/apanic_threads191. chmod 0640 /data/dontpanic/apanic_threads192.193. write /proc/apanic_console 1194.195. # Same reason as /data above196. chown system cache /cache197. chmod 0771 /cache198.199. # This may have been created by the recovery system with odd permissions 200. chown system cache /cache/recovery201. chmod 0770 /cache/recovery202.203. #change permissions on vmallocinfo so we can grab it from bugreports 204. chown root log /proc/vmallocinfo205. chmod 0440 /proc/vmallocinfo206.207. #change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks208. chown root system /proc/kmsg209. chmod 0440 /proc/kmsg210. chown root system /proc/sysrq-trigger211. chmod 0220 /proc/sysrq-trigger212.213.# create basic filesystem structure214. mkdir /data/misc 01771 system misc215. mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth216. mkdir /data/misc/bluetooth 0770 system system217. mkdir /data/misc/keystore 0700 keystore keystore218. mkdir /data/misc/vpn 0770 system system219. mkdir /data/misc/systemkeys 0700 system system220. mkdir /data/misc/vpn/profiles 0770 system system221. # give system access to wpa_supplicant.conf for backup and restore 222. mkdir /data/misc/wifi 0770 wifi wifi223. chmod 0770 /data/misc/wifi224. chmod 0660 /data/misc/wifi/wpa_supplicant.conf225. mkdir /data/local 0771 shell shell226. mkdir /data/local/tmp 0771 shell shell227. mkdir /data/local/download 0771 system cache228. mkdir /data/data 0771 system system229. mkdir /data/app-private 0771 system system230. mkdir /data/app 0771 system system231. mkdir /data/property 0700 root root232.233. mkdir /cache/download 0771 system cache234.235. # create dalvik-cache and double-check the perms236. mkdir /data/dalvik-cache 0771 system system237. chown system system /data/dalvik-cache238. chmod 0771 /data/dalvik-cache239.240. mkdir /cache/dalvik-cache 0771 system system241. chown system system /cache/dalvik-cache242. chmod 0771 /cache/dalvik-cache243.244. # create the lost+found directories, so as to enforce our permissions 245. mkdir /data/lost+found 0770246. mkdir /cache/lost+found 0770247.248. # double check the perms, in case lost+found already exists, and set owner249. chown root root /data/lost+found250. chmod 0770 /data/lost+found251. chown root root /cache/lost+found252. chmod 0770 /cache/lost+found253.254. # allow net_raw to have access to /dev/socket directory255. chown root net_raw /dev/socket256. chmod 0775 /dev/socket257.258. # allow system to modify cpufreq control files259. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor260. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 261. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq262. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 263. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq264. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 265.266. chmod 0777 /data/misc/wifi/config_mac267. mkdir /data/misc/wifi/sockets 0770 wifi wifi268. mkdir /data/misc/dhcp 0777 dhcp dhcp269. setprop wifi.supplicant_scan_interval 20270. setprop wifi.interface wlan0271.272.on boot273.# basic network init274. ifup lo275. hostname localhost276. domainname localdomain277.278.# set RLIMIT_NICE to allow priorities from 19 to -20279. setrlimit 13 40 40280.281.# Define the oom_adj values for the classes of processes that can be 282.# killed by the kernel. These are used in ActivityManagerService. 283. setprop ro.FOREGROUND_APP_ADJ 0284. setprop ro.VISIBLE_APP_ADJ 1285. setprop ro.PERCEPTIBLE_APP_ADJ 2286. setprop ro.HEAVY_WEIGHT_APP_ADJ 3287. setprop ro.SECONDARY_SERVER_ADJ 4288. setprop ro.BACKUP_APP_ADJ 5289. setprop ro.HOME_APP_ADJ 6290. setprop ro.HIDDEN_APP_MIN_ADJ 7291. setprop ro.EMPTY_APP_ADJ 15292.293.# Define the memory thresholds at which the above process classes will 294.# be killed. These numbers are in pages (4k).295. setprop ro.FOREGROUND_APP_MEM 2048296. setprop ro.VISIBLE_APP_MEM 3072297. setprop ro.PERCEPTIBLE_APP_MEM 4096298. setprop ro.HEAVY_WEIGHT_APP_MEM 4096299. setprop ro.SECONDARY_SERVER_MEM 6144300. setprop ro.BACKUP_APP_MEM 6144301. setprop ro.HOME_APP_MEM 6144302. setprop ro.HIDDEN_APP_MEM 7168303. setprop ro.EMPTY_APP_MEM 8192304.305.# Write value must be consistent with the above properties.306.# Note that the driver only supports 6 slots, so we have combined some of 307.# the classes into the same memory level; the associated processes of higher 308.# classes will still be killed first.309. write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15310.311. write /proc/sys/vm/overcommit_memory 1312. write /proc/sys/vm/min_free_order_shift 4313. write /sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192314.315. # Set init its forked children's oom_adj.316. write /proc/1/oom_adj -16317.318. # Tweak background writeout319. write /proc/sys/vm/dirty_expire_centisecs 200320. write /proc/sys/vm/dirty_background_ratio 5321.322. # Permissions for System Server and daemons.323. chown radio system /sys/android_power/state324. chown radio system /sys/android_power/request_state325. chown radio system /sys/android_power/acquire_full_wake_lock 326. chown radio system /sys/android_power/acquire_partial_wake_lock 327. chown radio system /sys/android_power/release_wake_lock328. chown radio system /sys/power/state329. chown radio system /sys/power/wake_lock330. chown radio system /sys/power/wake_unlock331. chmod 0660 /sys/power/state332. chmod 0660 /sys/power/wake_lock333. chmod 0660 /sys/power/wake_unlock334. chown system system /sys/class/timed_output/vibrator/enable335. chown system system /sys/class/leds/keyboard-backlight/brightness 336. chown system system /sys/class/leds/lcd-backlight/brightness 337. chown system system /sys/class/leds/button-backlight/brightness 338. chown system system /sys/class/leds/jogball-backlight/brightness 339. chown system system /sys/class/leds/red/brightness340. chown system system /sys/class/leds/green/brightness341. chown system system /sys/class/leds/blue/brightness342. chown system system /sys/class/leds/red/device/grpfreq343. chown system system /sys/class/leds/red/device/grppwm344. chown system system /sys/class/leds/red/device/blink345. chown system system /sys/class/leds/red/brightness346. chown system system /sys/class/leds/green/brightness347. chown system system /sys/class/leds/blue/brightness348. chown system system /sys/class/leds/red/device/grpfreq349. chown system system /sys/class/leds/red/device/grppwm350. chown system system /sys/class/leds/red/device/blink351. chown system system /sys/class/timed_output/vibrator/enable352. chown system system /sys/module/sco/parameters/disable_esco353. chown system system /sys/kernel/ipv4/tcp_wmem_min354. chown system system /sys/kernel/ipv4/tcp_wmem_def355. chown system system /sys/kernel/ipv4/tcp_wmem_max356. chown system system /sys/kernel/ipv4/tcp_rmem_min357. chown system system /sys/kernel/ipv4/tcp_rmem_def358. chown system system /sys/kernel/ipv4/tcp_rmem_max359. chown root radio /proc/cmdline360.361.# Define TCP buffer sizes for various networks362.# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax, 363. setprop net.tcp.buffersize.default4096,87380,110208,4096,16384,110208364. setpropnet.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208365. setpropnet.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208366. setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040 367. setpropnet.tcp.buffersize.hspa 4094,87380,110208,4096,16384,110208368. setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680 369.370. chmod 0660 /sys/class/rfkill/rfkill0/state371. chmod 0660 /sys/class/rfkill/rfkill0/type372. chmod 0660 /sys/class/rfkill/rfkill1/state373. chmod 0660 /sys/class/rfkill/rfkill1/type374. chmod 0666 /sys/devices/platform/bd_address/bdaddr_if375. chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state376. chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type377. chown bluetooth bluetooth /sys/class/rfkill/rfkill1/state378. chown bluetooth bluetooth /sys/class/rfkill/rfkill1/type379. write /sys/class/rfkill/rfkill0/state 0380.381. chown system system /sys/devices/platform/motion_sensor/accel_onoff 382. chown system system /sys/devices/platform/motion_sensor/accel_delay 383. chown system system /sys/devices/platform/motion_sensor/compass_onoff 384. chown system system /sys/devices/platform/motion_sensor/compass_delay 385. chown system system /sys/devices/platform/motion_sensor/tilt_onoff 386. chown system system /sys/devices/platform/motion_sensor/tilt_delay 387. chown system system /sys/devices/platform/motion_sensor/gyro_onoff 388. chown system system /sys/devices/platform/motion_sensor/gyro_delay 389. chown system system /sys/bus/i2c/drivers/hub_proxi/3-0044/onoff 390. chown system system /sys/bus/i2c/drivers/hub_proxi/3-0044/delay 391. chown system system /sys/devices/platform/motion_sensor/shake_onoff 392. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/shake_onoff 393. chown system system /sys/devices/platform/motion_sensor/snap_onoff 394. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/snap_onoff 395. chown system system /sys/devices/platform/motion_sensor/flip_onoff 396. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/flip_onoff 397. chown system system /sys/devices/platform/motion_sensor/tap_onoff 398. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/tap_onoff 399. chown system system/sys/devices/platform/motion_sensor/yawimage_onoff400. chown system system/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkresult 401. chown system system/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkopmode 402. chmod 0666 /sys/devices/platform/motion_sensor/accel_onoff403. chmod 0666 /sys/devices/platform/motion_sensor/accel_delay404. chmod 0666 /sys/devices/platform/motion_sensor/compass_onoff 405. chmod 0666 /sys/devices/platform/motion_sensor/compass_delay 406. chmod 0666 /sys/devices/platform/motion_sensor/tilt_onoff407. chmod 0666 /sys/devices/platform/motion_sensor/tilt_delay408. chmod 0666 /sys/devices/platform/motion_sensor/gyro_onoff409. chmod 0666 /sys/devices/platform/motion_sensor/gyro_delay410. chmod 0666 /sys/bus/i2c/drivers/hub_proxi/3-0044/onoff411. chmod 0666 /sys/bus/i2c/drivers/hub_proxi/3-0044/delay412. chmod 0666 /sys/devices/platform/motion_sensor/shake_onoff413. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/shake_onoff414. chmod 0666 /sys/devices/platform/motion_sensor/snap_onoff415. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/snap_onoff416. chmod 0666 /sys/devices/platform/motion_sensor/flip_onoff417. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/flip_onoff418. chmod 0666 /sys/devices/platform/motion_sensor/tap_onoff419. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/tap_onoff420. chmod 0666 /sys/devices/platform/motion_sensor/yawimage_onoff 421. chmod 0666/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkresult 422. chmod 0666/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkopmode 423.424. chmod 0666 /sys/devices/platform/omapdss/display0/name425. chmod 0666 /sys/devices/platform/omapdss/display1/name426. chmod 0666 /sys/devices/platform/omapdss/display0/enabled427. chmod 0666 /sys/devices/platform/omapdss/display1/enabled428. chmod 0666 /sys/devices/platform/omapdss/display0/timings429. chmod 0666 /sys/devices/platform/omapdss/display1/timings430. chmod 0666 /sys/devices/platform/omapdss/overlay0/manager431. chmod 0666 /sys/devices/platform/omapdss/overlay1/manager432. chmod 0666 /sys/devices/platform/omapdss/overlay2/manager433. chmod 0666 /sys/devices/platform/omapdss/overlay0/zorder434. chmod 0666 /sys/devices/platform/omapdss/overlay1/zorder435. chmod 0666 /sys/devices/platform/omapdss/overlay2/zorder436. chmod 0666 /sys/devices/platform/omapdss/overlay0/enabled437. chmod 0666 /sys/devices/platform/omapdss/overlay1/enabled438. chmod 0666 /sys/devices/platform/omapdss/overlay2/enabled439. chmod 0666 /sys/devices/platform/omapdss/manager0/display440. chmod 0666 /sys/devices/platform/omapdss/manager1/display441. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_enabled 442. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_enabled 443. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_type 444. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_type 445. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_value 446. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_value 447. chmod 0666/sys/devices/platform/omapdss/manager0/alpha_blending_enabled448. chmod 0666/sys/devices/platform/omapdss/manager1/alpha_blending_enabled449. write /sys/devices/platform/omapdss/manager0/alpha_blending_enabled 1450.451.# MMS: Create log directory for fw3a_core452. mkdir /data/log/fw3A 0775 root root453.454.# change permissions for alsa nodes455. symlink /dev/snd/pcmC0D0c /dev/pcmC0D0c456. symlink /dev/snd/pcmC0D0p /dev/pcmC0D0p457. symlink /dev/snd/controlC0 /dev/controlC0458. symlink /dev/snd/timer /dev/timer459. chmod 0777 /dev/pcmC0D0c460. chmod 0777 /dev/pcmC0D0p461. chmod 0777 /dev/controlC0462. chmod 0777 /dev/timer463.464. chmod 0664/sys/devices/platform/i2c_omap.2/i2c-2/2-0060/leds/lcd-backlight/als 465. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-0060/leds/lcd-backlight/als 466.467. # Batt gauge error detection468. chmod 0666/sys/bus/platform/drivers/twl4030_bci/twl4030_bci/gauge_if469.470. # Enabling sleep in idle path471. write /sys/power/sleep_while_idle 1472.473. # Enabling Off mode474. write /sys/power/enable_off_mode 1475.476. # Enabling voltage off while idle477. write /sys/power/voltage_off_while_idle 1478.479. # Permissions for setting the DSP Frequency480. chown media root /sys/power/dsp_freq481. chown media system /sys/devices/platform/omap3isp/isp_reserve 482.483.# Include extra init file484. import /system/etc/init.local.rc485.486.# gps permissions487. chown system system /sys/devices/platform/hub_gps_gpio/poweron 488. chown system system /sys/devices/platform/hub_gps_gpio/reset 489. mkdir /data/gps490. chmod 777 /data/gps491. mkdir /data/gps/var492. chmod 777 /data/gps/var493. mkdir /data/gps/var/run494. chmod 777 /data/gps/var/run495. mkdir /data/gps/log496. chmod 777 /data/gps/log497. mkdir /data/cache498. chmod 777 /data/cache499.500. ## Torch perms501. chown system camera /sys/class/leds/rt8515/brightness502. chmod 0660 /sys/class/leds/rt8515/brightness503.504. ## liblights505. chown system system /sys/class/leds/lcd-backlight/brightness 506. chown system system /sys/class/leds/lcd-backlight/onoff 507. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_brightness 508. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_onoff509. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_sync510. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/blink_enable511. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x06512. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x07513. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0D514. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0E515. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x10 516. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x11 517. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x03 518. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x04 519. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x09 520. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0A 521. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x13 522. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x14 523.524.# Run sysinit525. exec /system/bin/sysinit526.527. class_start default528.529.## Daemon processes to be run by init.530.##531.service ueventd /sbin/ueventd532. critical533.534.service prb /sbin/prb535. user root536. disabled537. oneshot538. keycodes 114 116539.540.service console /system/bin/sh541. console542. disabled543. user shell544. group log545.546.on property:ro.secure=0547. start console548.549.# adbd is controlled by the persist.service.adb.enable system property 550.service adbd /sbin/adbd551. disabled552.553.# adbd on at boot in emulator554.on property:ro.kernel.qemu=1555. start adbd556.557.on property:persist.service.adb.enable=1558. start adbd559.560.on property:persist.service.adb.enable=0561. stop adbd562.563.service pvrsrvinit /system/bin/pvrsrvinit564. user root565. oneshot566.567.# load DSP firmware 防火墙568.service baseimage /system/bin/cexec.out /system/lib/dsp/baseimage.dof 569. user root570. group audio571. oneshot572.573.service fw3a /system/bin/fw3a_core --dbgport=6660 --dbgremote --dbgpath=/data/log/fw3A574. user root575. group root576.577.service servicemanager /system/bin/servicemanager578. user system579. critical580. onrestart restart zygote581. onrestart restart media582.583.service vold /system/bin/vold584. socket vold stream 0660 root mount585. ioprio be 2586.587.service netd /system/bin/netd588. socket netd stream 0660 root system589. socket dnsproxyd stream 0660 root inet590.591.service debuggerd /system/bin/debuggerd592.593.service ril-daemon /system/bin/rild594. socket rild stream 660 root radio595. socket rild-debug stream 660 radio system596. user root597. group radio cache inet misc audio sdcard_rw net_admin net_raw 598.599.service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server600. socket zygote stream 666601. onrestart write /sys/android_power/request_state wake602. onrestart write /sys/power/state on603. onrestart restart media604. onrestart restart netd605.606.service media /system/bin/mediaserver607. user media608. group system audio camera graphics inet net_bt net_bt_admin net_raw 609. ioprio rt 4610.611.service bootanim /system/bin/bootanimation612. user graphics613. group graphics614. disabled615. oneshot616.617.service dbus /system/bin/dbus-daemon --system --nofork618. socket dbus stream 660 bluetooth bluetooth619. user bluetooth620. group bluetooth net_bt_admin621.622.service bluetoothd /system/bin/bluetoothd -n623. socket bluetooth stream 660 bluetooth bluetooth624. socket dbus_bluetooth stream 660 bluetooth bluetooth625. # init.rc does not yet support applying capabilities, so run as root and626. # let bluetoothd drop uid to bluetooth with the right linux capabilities 627. group bluetooth net_bt_admin misc628. disabled629.630.service hfag /system/bin/sdptool add --channel=10 HFAG631. user bluetooth。

android 开机logo修改

android 开机logo修改

Android 开机其实总共会出现3个画面:1、第一个就是linux 系统启动,出现Linux小企鹅画面(reboot);2、当android系统从Linux内核启动后,将会执行anddroid平台的初始化过程,屏幕上将会出现”A N D R I O D”文字字样画面(但是在我的系统里这个界面并不没有出现;或者说是肉眼没有看到这个画面的出现,这里依然送上这个画面的修改方法);3、开机动画:这个阶段就是大家能看到的系统启动过程中,显示完"A ND R O I D"字样后显示的图片,类似进度条一样,图片内容也是“A N D R O I D”字样。

第一个(小企鹅)画面的修改:Linux Kernel引导启动后,加载该图片,涉及到的代码在如下的目录中:/kernel/trunk/drivers/video/fbmem.c/kernel/trunk/drivers/video/fbmem.h/kernel/trunk/drivers/video/logo/logo.c/kernel/trunk/drivers/video/logo/logo.h/kernel/trunk/drivers/video/logo/Kconfig/kernel/trunk/include/linux/linux_logo.h让内核中添加此开机logo的步骤如下:1、让内核支持启动LOGO在内核目录中make menuconfigDevice Drivers ----> Graphics support ---->选中Bootup logo ----> Standard 224-color Linux logo2、制作开机logo的图片将要当作开机LOGO的图片按照你屏幕的大小进行裁减,并将其保存为bmp格式或png格式; 例如linuxlogo.bmp 或linuxlogo.png 在linux下输入以下命令(for bmp):#bmptoppm linuxlogo.bmp >linuxlogo.ppm //生成ppm#ppmquant 224 linuxlogo.ppm >linuxlogo224.ppm //转换成224颜色#pnmnoraw linuxlogo224.ppm >linuxlogo224.ppm //转换成ascii格式在Linux下输入以下命令(for png):# pngtopnm linuxlogo.png > linuxlogo.pnm# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm注:上述命令需要安装netpbm的工具包sudo apt-get install netpbm3、将LOGO文件放入内核中拷贝到制作好的LOGO文件到 /drivers/video/logo 文件夹替换logo_linux_clut224.ppm 文件,还要删除该文件夹下的logo_linux_clut224.o和logo_linux_clut224.c4、重新编译内核就OK了!这里就不详说。

Android开机启动流程

Android开机启动流程

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启动流程
• 第二步 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应用程序。

i6100S-Android折页说明书

i6100S-Android折页说明书

i6100S(Android)手持数据终端简易操作图示一、设备外观及常用按键介绍1、正面介绍开机:在关机状态下按电源键直至设备发出震动。

关机:在开机状态下长按电源键直至出现关机提示,点击关机后确定。

关屏:设备在正常工作状态下轻按一下电源键,屏幕会被关闭。

休眠:设备在正常工作状态下手动按电源键或设置系统休眠后可触发休眠模式。

唤醒:设备在休眠状态下轻按一下电源键,屏幕点亮系统唤醒。

冷启动:按住Fn键再使用触摸笔点击复位键注意:如果长时间不用设备请将设备关机。

2、侧面介绍3、背面介绍二、锂离子充电电池客户使用、运输须知及注意事项1、客户使用须知①收到设备(含电池)后建议即刻使用,闲置时间不宜超过3个月;②不宜在温度过高或过低的环境中使用设备或对设备进行充电;③仅限使用产品标配充电器或座充对电池充电;④如果暂时不使用设备(含电池),请将电池和设备分开存放,禁止将电池装入设备内一起存放;⑤对暂时不用的电池每隔 3 个月必须进行1 次充放电操作,并补电至60%~70%电量(即3.8V~3.9V)存放;⑥锂离子电池应被储存于清凉、干燥、通风的环境中,建议在0~28℃的环境中。

2、运输须知①电池在环境温度高于 65℃时运输电池不可运输;②需将电池分开放置,不可将电池直接叠放在一起,避免电池与电池之间正、负极接触短路、避免造成异常事件上;③可以用包装袋、纸、泡棉等绝缘材料进行隔开即可,然后再放纸箱内,尽可能将纸箱内部塞满,避免晃动。

3、注意事项1、禁止把电池丢入火中,或者暴露在产生热源的地方;2、禁止把电池的正、负极反接、短路;3、禁止冲击或者震动电池;4、禁止把电池浸入水中或者使电池受潮;5、禁止把不同型号和不同生产厂商的电池混合在一起使用;6、禁止使用被改装过的或者损坏的充电器;7、禁止使用不符合厂家指定要求的充电器;8、禁止使用超出电池规格书指定的规格放电;9、禁止在强静场和强磁场的地方使用电池,否则易破坏电池安全保护装置,带来安全隐患;10、电池组合外包装膜易被镍片、尖针等尖锐部件损伤,禁止用尖锐部件碰伤电池;11、如果电池在使用或储存中发出异味、发热、变色、变形,或是在充电过程中出现任何异常现象,立即将电池从充电器或装置中移开,并停止使用;12、如果发现电池漏液或者有异味(电解液)请立即报废该电池,如电解液进入眼睛,请不要揉擦,应用清水清洗眼睛,并立即送医院治疗,否则会伤害眼睛;13、电池属于损耗品,会随着使用循环的增多其容量也会逐渐降低,建议1-2年更换新电池;14、若使用电池时发生意外,请保护现场、保留拍照等证据,及时联系我司售后处理。

onbootphase systemready顺序

onbootphase systemready顺序

onbootphase systemready顺序OnBootPhase和SystemReady是Android系统启动过程中的两个重要阶段。

在这两个阶段中,系统会执行一系列的操作,以确保系统能够正常启动并运行。

OnBootPhase是Android系统启动过程中的第一个阶段。

在这个阶段中,系统会执行一些基本的初始化操作,例如加载内核、初始化硬件、启动服务等。

这些操作都是为了确保系统能够正常启动,并为后续的操作做好准备。

在OnBootPhase阶段中,系统会按照一定的顺序执行各项操作。

首先,系统会加载内核,并初始化硬件。

然后,系统会启动一些基本服务,例如Zygote进程、System Server进程等。

接着,系统会加载一些必要的库文件,并启动一些系统应用程序,例如Launcher、Settings等。

最后,系统会启动一些第三方应用程序,例如社交网络应用、游戏等。

SystemReady是Android系统启动过程中的第二个阶段。

在这个阶段中,系统会执行一些更加复杂的操作,例如加载应用程序、初始化用户界面等。

这些操作都是为了确保系统能够正常运行,并为用户提供更好的体验。

在SystemReady阶段中,系统会按照一定的顺序执行各项操作。

首先,系统会加载所有的应用程序,并初始化它们。

然后,系统会初始化用户界面,并启动Launcher应用程序。

接着,系统会启动一些系统服务,例如通知服务、位置服务等。

最后,系统会启动一些第三方应用程序,例如社交网络应用、游戏等。

总的来说,OnBootPhase和SystemReady是Android系统启动过程中的两个重要阶段。

在这两个阶段中,系统会执行一系列的操作,以确保系统能够正常启动并运行。

在执行这些操作时,系统会按照一定的顺序进行,以确保各项操作能够顺利完成。

因此,在开发Android应用程序时,我们需要了解这些阶段和操作,以便更好地优化我们的应用程序,提高用户体验。

android系统启动过程(1)

android系统启动过程(1)

1Android系统的启动过程1.1启动过程Android系统完整的启动过程,可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段,从开机到启动Home Launcher完成具体的任务细节可分为七个步骤。

1.启动BootLoader2.加载系统内核3.启动Init和其它重要守护进程4.启动Zygote进程5.启动Runtime进程,初始化Service Manager。

Service Manager用于binder通讯,负责绑定服务的注册与查找。

6.启动SystemService7.启动Home Laucher8.启动其它应用程序1.1.1BootLoaderAndroid 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。

当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。

通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。

1.1.2启动Init和守护进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,进程号永远是1。

当Init进程启动后,如(图1-1)它还负责启动其他的一些重要守护进程,主要包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。

adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。

debuggerd 进程(Debugger Daemon) :调试器后台进程,负责管理调试请求及调试过程。

rild进程(Radio Interface Layer Daemon):无线接口层后台进程,负责管理无线通信服务。

图1-1 Init和其它重要守护进程的启动,图片来源:http://www-igm.univ-mlv.fr/~dr/XPOSE2008/android/fonct.html1.1.3启动Zygote进程如(图1-2)所示,当Init进程和一些重要的守护进程启动完成之后,将启动Zygote 进程。

AndroidAPP开机自启动基本方法

AndroidAPP开机自启动基本方法

AndroidAPP开机自启动基本方法前言应用自启动主要是通过接收系统广播BOOT_COMPLETED来实现的,在receiver中执行APP启动的方法。

实现主要分为两个部分:1.AndroidManifest.xml配置,包括权限配置和广播注册。

2.广播中添加应用启动的代码。

1. 权限添加在AndroidManifest.xml文件中添加BOOT监听权限:<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETE D"/>2. 安装方式配置在manifest根目录下设置为安装方式:<manifest xmlns:android="/apk/res/android"...android:installLocation="internalOnly">设置为将应用安装到内部存储中,安装在SD卡中可能会导致自启动失败。

3. 广播注册AndroidManifest.xml文件中注册广播:<receiverandroid:name=".receiver.BootReceiver"android:enabled="true"android:exported="true"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver>4. receiver中添加应用启动逻辑示例代码如下:class BootReceiver : BroadcastReceiver() {override fun onReceive(context: Context, intent: Intent) {if (intent == null) returnif (TextUtils.equals(intent.action, "android.intent.action.BOOT_COMPLETED")) {val newIntent = Intent(context, MainActivity::class.java)ContextCompat.startActivity(context, newIntent, null)}}}设置一下应用启动逻辑。

Android启动过程

Android启动过程

1. Boot系统初始化,具体过程参见(system\core\init\Init.c)中的main函数,这时候,手机或者模拟器出现的画面是一个console,显示“ANDROID”msg。

2. 初始化成功后,就开始mounting系统,具体参见(system\core\mountd\Mountd.c) 中的main 函数。

3.接下来运行ndroidRuntime,并开始启动java虚拟机dalvikvm。

4. Java虚拟机启动成功后,开始系统初始化。

系统初始的第一步是用JNI方式实现的,对应java代码为(frameworks\base\services\java\com\android\server\SystemServer.java) init1(Native)函数,对应的JNI C++代码为(frameworks\base\core\jni\server\com_android_server_SystemServer.cpp),而实现的C++代码为(frameworks\base\cmds\system_server\library\ System_init.cpp) 中的system_init()函数。

5. system_init调用SurfaceFlinger,SurfaceFlinger的readyToRun()函数用BootAnimation来实现开机动画,这时候手机或者模拟器显示是一副背景图加一个动态的小机器人。

6. 系统初始化的第二步,将启动ServerThread进程,参见SystemServer.init2()。

ServerThread 将启动各种系统服务,如Power Manager、Activity Manager等等,具体参见ServerThread的run函数,ServerThread同在SystemServer.java中。

7.这之后的事,应该就是进入系统了。

安卓手机开机操作方法教程

安卓手机开机操作方法教程

安卓手机开机操作方法教程
开机操作方法教程:
1. 确保手机电池有电,插入SIM卡和存储卡(如果有)。

2. 按住手机侧面或背面的电源键。

通常,电源键是位于手机顶部、侧面或背面的按钮。

3. 长按电源键,直到手机屏幕上出现品牌或厂商的Logo。

4. 松开电源键,并等待几秒钟,直到手机完全开机。

5. 一旦手机开机,屏幕将显示“滑动解锁”、“输入密码”或其他相关提示。

6. 根据您的手机设置,您可以滑动屏幕或输入密码来解锁手机。

7. 解锁后,您可以开始使用手机了。

您可以滑动屏幕浏览应用程序、拨打电话、发送短信等。

请注意,不同品牌和型号的安卓手机可能会有略微不同的开机操作方法。

此教程适用于大多数安卓手机。

如有需要,请参考您手机的用户手册或官方网站,以了
解详细操作方法。

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

一、Android开机启动流程简介1、OS-level:由bootloader载入linux kernel后kernel开始初始化, 并载入built-in 的驱动程序。

Kernel完成开机后,载入init process,切换至user-space。

Init进程是第一个在user-space启动的进程。

2、Android-level:由init process读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server等。

由 init process 根据硬件类型读取init.xxx.rc。

由init.xxx.rc加载init.xxx.sh。

由 init.xxx.sh 加载特定的硬件驱动。

如hi_tuner.ko、hi_demux.ko等。

3、Zygote-Mode:Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。

随后,使用者将看到一个桌面环境(Home Screen)。

桌面环境由一个名为[Launcher]的应用程序负责提供。

本文档重点研究Android-level中的启动流程。

启动流程如下图所示:二、init process流程分析init进程简介init进程是第一个在user-space启动的进程。

由内核启动参数[init]传递给内核,如果该项没有设置,内核会按/etc/init,/bin/init,/sbin/init,/bin/sh的顺序进行尝试,如果都有的都没找到,内核会抛出 kernel panic:的错误。

init进程包含在跟文件系统中,跟文件系统被直接编译到了内核。

对init 进程的修改,需要重新编译烧写内核。

编译命令:#cd kernel#make uImagCONFIG_INITRAMFS_SOURCE=../out/target/product/Hi3716C/root/ -j 8#cp kernel/arch/arm/boot/uImage out/target/product/Hi3716C/kernel -afv 源代码路径:froyo\system\core\init编译的文件:builtins.cinit.cdevices.cproperty_service.cutil.cparser.clogo.c编译命令:make init生成的文件:/out/target/product/Hi3716C/root/initinit进程启动流程1.安装SIGCHLD信号。

sigaction(SIGCHLD, &act, 0);如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。

因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。

2.对umask进行清零。

umask(0);umask是什么?登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。

umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。

设置文件的默认权限,umask和chmod的权限刚好反的,umask的0000相当于chmod的0777。

3.为rootfs建立必要的文件夹,并挂载适当的分区。

mkdir("/dev", 0755);mkdir("/proc", 0755);mkdir("/sys", 0755);mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755");mkdir("/dev/pts", 0755);mkdir("/dev/socket", 0755);mount("devpts", "/dev/pts", "devpts", 0, NULL);mount("proc", "/proc", "proc", 0, NULL);mount("sysfs", "/sys", "sysfs", 0, NULL);4.创建/dev/null和/dev/kmsg节点。

创建/dev/null结点,重定向标准输入,输出以及标准出错。

open_devnull_stdio();创建/dev/kmsg设备结点,我们可以利用这个设备输出调试信息log_init();5.解析/init.rc,将所有服务和操作信息加入链表。

解析初始化脚本,这里只是parse,将脚本解析到一个链表中,并没有执行。

parse_config_file("/init.rc");6.从/proc/cmdline中提取信息内核启动参数,并保存到全局变量。

qemu_init();import_kernel_cmdline(0);7.根据6获得的hardware参数信息,解析额外的硬件相关init脚本.hi3726c 中为 init.godbox.rcget_hardware_name();snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);parse_config_file(tmp);8.找到init.rc paser链表中为early-init属性的项目,将其添加到actionqueue中,并执行执行这些queue中的动作。

action_for_each_trigger("early-init", action_add_queue_tail);drain_action_queue();9.遍历/sys文件夹,是内核产生设备添加事件(为了自动产生设备节点)。

device_fd = device_init();10.初始化属性系统,并导入初始化属性文件。

property_init();每个属性都有一个名称和值,它们都是字符串格式。

属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换。

属性是在整个系统中全局可见的。

每个进程可以get/set属性。

在系统初始化时,Android 将分配一个共享内存区来存储的属性,这里主要是从/default.prop属性文件读取属性。

类似于像Windows下的注册表的作用。

/default.pro的内容ro.secure=0ro.allow.mock.location=1ro.debuggable=1persist.service.adb.enable=111.从属性系统中得到ro.debuggable,若为1,則初始化keychord监听。

keychord_fd = open_keychord();12.判断是否有控制台,如果没有,就尝试是否是可以打缺省的控制台。

缺省控制台名称:static char *console_name = "/dev/console";if (console[0]) {snprintf(tmp, sizeof(tmp), "/dev/%s", console);console_name = strdup(tmp);}fd = open(console_name, O_RDWR);if (fd >= 0)have_console = 1;close(fd);13.读取/initlogo.rle,如果成功則在/dev/graphics/fb0显示Logo,如果失败则将/dev/tty0设为文本模式,并打开/dev/tty0,输出文本“ANDROID”。

if( load_565rle_image(INIT_IMAGE_FILE) ) {fd = open("/dev/tty0", O_WRONLY);if (fd >= 0) {const char *msg;msg = "\n""\n""\n""\n""\n""\n""\n" /*console is 40 cols x 30 lines*/"\n""\n""\n""\n""\n""\n""\n"" A N D R O I D ";write(fd, msg, strlen(msg));close(fd);}}14.判断是否使用模拟器运行,如果时,就加载内核命令行参数。

if (qemu[0])import_kernel_cmdline(1);15.根据内核命令行参数来设置工厂模式测试。

if (!strcmp(bootmode,"factory"))property_set("ro.factorytest", "1");else if (!strcmp(bootmode,"factory2"))property_set("ro.factorytest", "2");elseproperty_set("ro.factorytest", "0");16.设置序列号属性值。

property_set("ro.serialno", serialno[0] ? serialno : "");17.设置启动模式属性值。

property_set("ro.bootmode", bootmode[0] ? bootmode : "unknown");18.设置基带频率属性值。

property_set("ro.baseband", baseband[0] ? baseband : "unknown");19.设置硬件载波方式属性值。

相关文档
最新文档