Android      aosp启动流程1-main和FirstStageMain   
文章目录  [隐藏]

参考:
https://www.it610.com/article/1304931662924124160.htm
https://blog.csdn.net/pepsimaxin/article/details/107284563
https://juejin.cn/post/6844903946151002125


基于 LineageOS 18.1,Android 11。


简述:
1)按下电源系统启动
当电源按下时引导芯片代码开始从预定义的地方(固化在 ROM)开始执行,加载引导程序 Bootloader 到 RAM,然后执行。
2)引导程序 Bootloader
引导程序是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把系统 OS 拉起来并运行。
3)linux内核启动
内核启动时,设置缓存、被保护存储器、计划列表,加载驱动。当内核完成系统设置,它首先在系统文件中寻找 "init" 文件 ,然后启动 root 进程或者系统的第一个进程。
4)启动 init 进程
(本文内容为其中一小部分)
5)启动 Zygote 进程
创建 JavaVM 并为 JavaVM 注册 JNI,创建服务端 Socket,启动 SystemServer 进程。
6)启动 SystemServer 进程
启动 Binder 线程池和 SystemServiceManager,并且启动各种系统服务。
7)启动 Launcher
SystemServer 启动的 ActivityManagerService 会负责启动 Launcher,Launcher 启动后会将已安装应用的快捷图标显示到界面上。

系统入口main

system/core/init/main.cpp
在这里把启动过程中的操作大致分了几部分,分别执行。


FirstStageMain

main --> FirstStageMain --> SetupSelinux --> SecondStageMain

system/core/init/first_stage_main.cpp =>
system/core/init/first_stage_init.cpp

通常称这是init的第一阶段,主要是Linux启动加载的基础性操作。包括
●处理init进程挂掉的情况
●创建并挂载相关系统文件
●设置用户组,
●重定向输入输出/内核 Log 系统
●挂载特定分区
●通过init进入SetupSelinux

Linux中的几种文件系统:
▶ tmpfs:虚拟内存文件系统,它会将所有的文件存储在虚拟内存中。当tmpfs文件系统卸载或关机或系统断电,其中的内容将清除不可恢复。tmpfs既可以使用 RAM,也可以使用交换分区,会根据你的实际需要而改变大小。速度很快,即使是使用交换分区。
▶ devpts:为伪终端提供了一个标准接口,它的标准挂接点是 /dev/pts。只要 pty 的主复合设备 /dev/ptmx 被打开,就会在 /dev/pts 下动态的创建一个新的 pty 设备文件。
▶ proc:重要的虚拟文件系统,可以看作是内核内部数据结构的接口,通过它我们可以获得系统的信息,同时也能够在运行时修改特定的内核参数。
▶ sysfs:与 proc 类似,也是不占有任何磁盘空间的虚拟文件系统。通常被挂接在 /sys 目录下。sysfs 文件系统是 Linux2.6 内核引入的,它把连接在系统上的设备和总线组织成一个分级的文件,使得它们可以在用户空间存取。



- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设