Android开机启动流程样本

合集下载

Android系统完整的启动过程

Android系统完整的启动过程

Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。

一、启动BootLoaderAndroid 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。

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

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

而Linux系统启动时:1)首先要加载BIOS的硬件信息,并获取第一个启动设备的代号2)读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的启动信息。

3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有的硬件设备。

…………在嵌入式系统中,通常不会有像BIOS那样的固件程序,因此整个系统的加载任务都是通过BootLoader完成的。

二、加载系统内核Linux内核映像通常包括两部分代码,分别为实模式代码和保护模式代码。

当BootLoader装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行完成后转入保护模式代码。

实模式和保护模式的概念再次不做过多解释,读者可以自行查阅资料。

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

Init进程启动完成之后,还负责启动其他的一些重要守护进程,包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。

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

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内核加载、文件系统加载、初始化进程、启动用户空间、启动应用程序等多个步骤,最终实现用户界面的显示和应用程序的运行。

安卓启动流程

安卓启动流程

安卓启动流程Android启动流程是指当我们按下手机开机键之后,系统如何进行初始化和加载应用程序等相关操作,最终完成系统的正常启动并进入主界面的过程。

下面将详细介绍Android启动流程的主要步骤。

1. 加电与引导当我们按下手机的开机键时,电源管理芯片开始提供电力供应并接通整个电路。

同时,电源管理芯片会发送信号给处理器引导启动系统。

2. 启动引导加载程序处理器接收到启动信号后,会加载引导加载程序(Bootloader)。

引导加载程序主要负责初始化硬件设备、加载系统内核等操作。

引导加载程序是嵌入式系统中运行的一段代码,它的作用是为系统加载内核和其他软件。

3. 加载内核引导加载程序会根据设备启动模式(Fastboot、Recovery或正常启动)来选择加载相应的内核。

内核是操作系统的核心,它负责管理和控制系统的硬件资源,提供各种功能的驱动程序,同时也会启动各种系统服务。

4. 初始化设备驱动在内核加载完成后,系统会初始化设备驱动程序。

设备驱动程序负责与硬件设备进行通信和控制,让硬件设备可以正确地与系统交互。

5. 启动init进程在设备驱动程序加载完毕后,系统会启动init进程。

init进程是Android系统中的第一个用户级进程,它的PID(Process ID)为1。

init进程负责启动和管理其他用户级进程,它通过读取init.rc配置文件来确定要启动的进程和服务。

6. 启动系统服务init进程会根据init.rc配置文件的指令,启动各种系统服务,例如Binder服务、Activity Manager服务、Window Manager服务等。

这些系统服务是Android系统的核心组件,负责管理应用程序的生命周期、绘制界面等功能。

7. Zygote进程与应用程序加载在系统服务启动完成后,init进程会启动Zygote进程。

Zygote进程是Android系统中的特殊进程,其作用是为应用程序提供应用程序运行环境(即Dalvik或ART虚拟机环境)。

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以告知已注册的第三方程序在开机时自动启动。

android开机过程

android开机过程

一、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信号。

android启动流程

android启动流程

android启动流程Android启动流程。

Android系统启动流程是指Android设备在开机时,系统从无到有的整个启动过程。

了解Android启动流程对于开发者和系统维护者来说都是非常重要的,因此本文将对Android启动流程进行详细介绍。

1. 加电启动。

当用户按下设备的电源按钮时,电源管理芯片开始为设备供电,同时CPU开始执行启动代码。

此时,设备进入了启动阶段。

2. Bootloader启动。

在加电启动后,设备会首先运行Bootloader,Bootloader是设备的引导程序,负责初始化硬件并加载操作系统。

Bootloader会检查设备的硬件情况,然后加载操作系统内核。

3. 内核启动。

一旦Bootloader加载了操作系统内核,内核开始初始化设备的硬件,包括CPU、内存、外设等。

内核还会挂载根文件系统,并启动init进程。

4. init进程启动。

init进程是Android系统的第一个用户空间进程,它负责启动系统的其他进程和服务。

init进程会读取init.rc文件,根据文件中的配置启动系统服务和应用程序。

5. 系统服务启动。

在init进程启动后,系统服务会被依次启动。

这些系统服务包括SurfaceFlinger、Zygote、AMS(Activity Manager Service)、PMS(Package Manager Service)等,它们负责管理系统的各个方面,如界面显示、应用程序管理、包管理等。

6. Launcher启动。

当系统服务启动完成后,Launcher会被启动,用户可以看到设备的桌面界面。

Launcher是Android系统的桌面管理器,负责显示桌面、启动应用程序等功能。

7. 应用程序启动。

最后,用户可以通过桌面上的图标启动各种应用程序,进入到自己想要使用的应用程序中。

总结。

Android启动流程经历了Bootloader启动、内核启动、init进程启动、系统服务启动、Launcher启动和应用程序启动等步骤。

Android启动流程(一)

Android启动流程(⼀)Android 的启动流程话不多说上图内核⾥⾯第⼀个进程 idle 进程⼜叫做Swapper进程 PID = 0Kthread 进程相当于内核的⿐祖init 进程启动⽤户空间的⿐祖zygote java 进程⿐祖SystemServer zygote 的⼤⼉⼦SystemServer ⼜会启动很多服务, 90多个,我们很多服务都在SystemServer进程中SystemServer通过AMS 在zygote 出app进程进程启动⽅式 fork线程启动 new Thread在内核中没有进程和线程之分init 进程的启动kernel/common/init/main.c -> kernel_initinit的⼊⼝函数 -》 main.cppinit.rc脚本⽂件按照init.rc 的内容去执⾏first_state_main主要做⼀些挂载/ 创建⼀些⽂件重定向输⼊输出 error初始化内核的⽇志打印启动 selinux_setupSelinuxSetupSetupSelunx linux这块的安全策略 --- Android ---- 权限最⼩权限原则second_stage_mainPropertyInit(); --- 初始化属性域处理⼦进程终⽌信号 --- 僵⼫进程InstallSignalFdHandler(&epoll);InstallInitNotifier(&epoll);StartPropertyService(&property_fd);GetBultinFunctionmap () 匹配命令和函数之间的关系LoadBootScripts() 解析init.rc--> CreateParser : parserparser.AddSectionParser("server" , xxxx);parser.AddSectionParser("on" , xxxx);parser.AddSectionParser("import" , xxxx);parser.ParseConfig("/system/etc/init/hw/init.rc"); // 解析 init.rcparserConfigDir();parseConfigFile();ParseData() 解析init ⽂件进⼊while 循环 ---- 等待auto pending_function = epoll.Wait(epoll_timeout);⼩结:init处理的重要事情:1. 挂载⽂件2. 设置 seLinux -- 安全策略3. 开始属性服务注册到 epoll中4. 解析 init.rc5. 循环处理脚本⽂件 -- 启动 zygote6. 循环等待输⼊输出stdio --Linux ⼀切皆⽂件system.out.println(); 把这句话写到⽂件夹中(dev/nulll 管道⽂件夹)zygote 进程启动孵化器最重要的作⽤有⼀部分在nitive ⼀部分在javazygote 第⼀个进⼊Java的。

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.这之后的事,应该就是进入系统了。

详解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开机启动流程


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

Android的开机流程
1. 系统引导bootloader
1) 源码: 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. 内核kernel
1) 源码: kernel/*
2) 说明: kernel由bootloader加载
3. 文件系统及应用init
1) 源码: system/core/init/*
2) 配置文件: system/rootdir/init.rc,
3) 说明: init是一个由内核启动的用户级进程, 它按照init.rc中的设置执行: 启动服务( 这里的服务指linux底层服务, 如adbd提供adb支持, vold提供SD卡挂载等) , 执行命令和按其中的配置语句执行相应功能
4. 重要的后台程序zygote
1) 源码: frameworks/base/cmds/app_main.cpp等
2) 说明: zygote是一个在init.rc中被指定启动的服务, 该服务对应的命令是/system/bin/app_process
a) 建立Java Runtime, 建立虚拟机
b) 建立Socket接收ActivityManangerService的请求, 用于Fork应用程序
c) 启动System Server
5. 系统服务system server
1) 源码: frameworks/base/services/java/com/android/server/SystemServer.java
2) 说明: 被zygote启动, 经过System Manager管理android 的服务( 这里的服务指frameworks/base/services下的服务, 如卫星定位服务, 剪切板服务等)
6. 桌面launcher
1) 源码: ActivityManagerService.java为入口, packages/apps/launcher*实现
2) 说明: 系统启动成功后SystemServer使用xxx.systemReady()通知各个服务, 系统已经就绪, 桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的, 最终调用 ()启launcher
7. 解锁
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/ActivityManagerSe rvice.java
2) 说明: 系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager 启动成功, ActivityManager会经过置变量mBooting, 通知它的另一线程, 该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

9. 总结
综上所述, 系统层次关于启动最核心的部分是zygote(即app_process)和system server, zygote它负责最基本的虚拟机的建立, 以支持各个应用程序的启动, 而system server用于管理android后台服务, 启动步骤及顺序。

10. 参考
Android 启动过程详解
Android从Linux系统启动有4个步骤;
(1) init进程启动
(2) Native服务启动
(3) System Server, Android服务启动
(4) Home启动
总体启动框架图如:
第一步: initial进程(system/core/init)
init进程, 它是一个由内核启动的用户级进程。

内核自行启动( 已经被载入内存, 开始运行, 并已初始化所有的设备驱动程序和数据结构等) 之后, 就经过启动一个用户级程序init的方式, 完成引导进程。

init始终是第一个进程.
Init.rc
Init.marvell.rc
Init进程一起来就根据init.rc和init.xxx.rc脚本文件建立了几个基本的服务:
servicemanamger
zygote。

最后Init并不退出, 而是担当起property service的功能。

1.1脚本文件
init@System/Core/Init
Init.c: parse_config_file(Init.rc)
@parse_config_file(Init.marvel.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进程。

第二步 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)
建立虚拟机
运行: com.android.internal.os.ZygoteInit: main函数。

( 3) main()@com.android.internal.os.ZygoteInit//正真的Zygote。

registerZygoteSocket();//登记Listen端口
startSystemServer();。

相关文档
最新文档