详情地址:https://fengke.club/GeekMart/views/offline/android
购买链接:https://fengke.club/GeekMart/su_fHnaDyD1o.jsp Linux引导过程Linux内核与Android系统linux内核有什么区别?
什么是引导装载程序?
什么是Zygote?
什么是init.rc?
什么是系统服务? 第一节Android启动步骤
 第二节引导程序 — Boot Loader
源代码目录:$(dir)\rk3128-source\u-boot 第三节内核 — Kernel
Android内核就是Linux。内核启动时,设置硬件,挂载文件系统,执行第一个应用程序 init。 第四节Init进程
init是第一个进程,可以说它是root进程或者所有进程的父进程。init进程有两个责任,一是挂载目录,比如/sys、/dev、/proc,二是运行init.rc脚本。对于init.rc文件,Android中有特定的格式以及规则。在Android中,我们叫做Android初始化语言。
init.rc位于目录$(dir)\rk3128-source\device\rockchip\rksdk
Android初始化语言由四大类型的声明组成,即Actions(动作)、Commands(命令)、Services(服务)、以及Options(选项)。
Action(动作):动作是以命令流程命名的,有一个触发器决定动作是否发生。
语法:
on
Service是init加载的和是退出重启的(可选)程序。Service具有如下格式:
service [ ]* [color=rgba(0, 0, 0, 0.75)]... Options(选项) 选项是对服务的描述,它们影响init进程如何以及何时启动服务。 来看看默认的init.rc文件。这里只列出了主要的事件以及服务。 Table 在这个阶段你可以在设备的屏幕上看到“android”logo了。 第五节Zygote
在Java中,不同的虚拟机实例会为不同的应用分配不同的内存。但如果Android系统为每一个应用启动不同的Dalvik虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android系统创造了”Zygote”,Zygote让Dalvik虚拟机共享代码、低内存占用以及最小的启动时间成为可能。 第六节系统服务或服务
完成了上面几步之后,运行环境请求Zygote运行系统服务。系统服务同时使用native以及java编写,系统服务可以认为是一个进程,系统服务包含了所有的System Services。
Zygote创建新的进程去启动系统服务,可以在ZygoteInit类的”startSystemServer”方法中找到源代码。 第七节引导完成
一旦系统服务在内存中跑起来了,Android就完成了引导过程。在这个时候“ACTION_BOOT_COMPLETED”开机启动广播就会发出去。 第八节实验
init.rc中增加一条启动参数setprop fengke.test 100 第九节实验现象
系统启动后用getprop fengke.test来看是否这个值已经写入

|