This commit is contained in:
renjianbo
2026-01-12 14:16:40 +08:00
parent 53eb2abda5
commit bf8ead27cd
10 changed files with 479 additions and 13 deletions

View File

@@ -13,12 +13,12 @@
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "docs/Obsidian笔记体系/Areas/07-系统安全/密钥存储与加密.md", "file": "docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "密钥存储与加密" "title": "Zygote进程启动"
} }
} }
] ]
@@ -185,16 +185,22 @@
}, },
"active": "f1ecba89214e3cc5", "active": "f1ecba89214e3cc5",
"lastOpenFiles": [ "lastOpenFiles": [
"docs/Obsidian笔记体系/Areas/07-系统安全/漏洞案例库.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/README.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md", "docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md", "docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md",
"Zygote进程启动.md",
"SystemServer核心服务.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md", "docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/README.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md",
"Launcher启动流程.md",
"Bootloader到Init.md",
"docs/Obsidian笔记体系/README.md",
"README.md",
"docs/Obsidian笔记体系/Areas/07-系统安全/密钥存储与加密.md",
"docs/Obsidian笔记体系/Areas/07-系统安全/漏洞案例库.md",
"docs/Obsidian/2026-01-05 个人文档管理.md", "docs/Obsidian/2026-01-05 个人文档管理.md",
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak", "docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak",
"docs/学习笔记/gerrit分支规范.md", "docs/学习笔记/gerrit分支规范.md",
"docs/Obsidian笔记体系/README.md",
"docs/Obsidian笔记体系/MOCs/Android Framework知识体系图.md", "docs/Obsidian笔记体系/MOCs/Android Framework知识体系图.md",
"docs/Obsidian笔记体系/MOCs/源码阅读地图.md", "docs/Obsidian笔记体系/MOCs/源码阅读地图.md",
"docs/Obsidian笔记体系/MOCs/高频问题索引.md", "docs/Obsidian笔记体系/MOCs/高频问题索引.md",
@@ -206,12 +212,6 @@
"docs/Obsidian笔记体系/Areas/02-Activity管理/异常恢复机制.md", "docs/Obsidian笔记体系/Areas/02-Activity管理/异常恢复机制.md",
"docs/Obsidian笔记体系/Areas/03-Window系统/WindowManagerService架构.md", "docs/Obsidian笔记体系/Areas/03-Window系统/WindowManagerService架构.md",
"docs/Obsidian笔记体系/Areas/03-Window系统/SurfaceFlinger交互流程.md", "docs/Obsidian笔记体系/Areas/03-Window系统/SurfaceFlinger交互流程.md",
"docs/Obsidian笔记体系/Areas/03-Window系统/README.md",
"docs/Obsidian笔记体系/Areas/03-Window系统/窗口类型与层级.md",
"docs/Obsidian笔记体系/Areas/03-Window系统/触摸事件传递.md",
"docs/Obsidian笔记体系/Areas/02-Activity管理/Activity启动流程跨进程.md",
"docs/Obsidian笔记体系/Areas/02-Activity管理/Activity栈管理Task&Stack.md",
"docs/Obsidian笔记体系/Areas/02-Activity管理/README.md",
"docs/Obsidian笔记体系/Config/自定义脚本/源码链接生成器.py", "docs/Obsidian笔记体系/Config/自定义脚本/源码链接生成器.py",
"docs/Obsidian笔记体系/Config/自定义脚本/自动生成日报.js", "docs/Obsidian笔记体系/Config/自定义脚本/自动生成日报.js",
"docs/Obsidian笔记体系/Config/主题与样式.css", "docs/Obsidian笔记体系/Config/主题与样式.css",

125
Bootloader到Init.md Normal file
View File

@@ -0,0 +1,125 @@
# Bootloader到InitAndroid系统启动的第一阶段
Android系统启动是一个复杂的过程从硬件上电到用户界面呈现涉及多个阶段的协同工作。本文详细分析从Bootloader到Init进程的完整启动流程。
## 启动流程概览
```mermaid
graph TD
A[硬件上电] --> B[Bootloader执行]
B --> C[加载内核]
C --> D[内核初始化]
D --> E[挂载文件系统]
E --> F[启动Init进程]
F --> G[解析init.rc]
G --> H[启动系统服务]
```
## 1. Bootloader阶段
### 1.1 硬件初始化
- **电源管理**初始化CPU、内存、时钟等硬件
- **外设检测**:识别存储设备、显示设备等
- **安全验证**:验证引导镜像的完整性和签名
### 1.2 引导加载程序
- **Primary Bootloader**:芯片厂商提供的初始引导程序
- **Secondary Bootloader**设备厂商定制的引导程序如U-Boot
- **引导参数传递**通过设备树Device Tree或ATAGS向内核传递参数
### 1.3 内核加载
- **镜像选择**:根据启动模式选择相应的内核镜像
- **内存布局**:设置内核加载地址和内存映射
- **跳转到内核**:将控制权交给内核入口点
## 2. 内核启动阶段
### 2.1 内核初始化
- **体系结构相关初始化**CPU架构特定的设置
- **内存管理初始化**:建立页表,初始化内存分配器
- **设备树解析**:解析硬件配置信息
### 2.2 驱动加载
- **早期驱动**:控制台、定时器等基础驱动
- **存储驱动**:加载文件系统所需的驱动
- **设备初始化**:初始化各种硬件设备
### 2.3 挂载文件系统
- **根文件系统**挂载ramdisk或实际存储
- **必要目录创建**:创建/dev、/proc、/sys等目录
- **设备节点创建**:创建设备文件节点
## 3. Init进程启动
### 3.1 Init进程的职责
- **第一个用户空间进程**PID为1的特殊进程
- **系统服务管理**:启动和管理所有系统服务
- **进程监控**:监控子进程状态,处理僵尸进程
### 3.2 init.rc配置文件
```bash
# init.rc示例片段
on early-init
# 早期初始化
mkdir /dev
mount tmpfs tmpfs /dev
on init
# 主初始化阶段
symlink /system/bin /bin
on boot
# 启动系统服务
start servicemanager
start surfaceflinger
```
### 3.3 关键系统服务启动顺序
1. **servicemanager**Binder IPC服务管理器
2. **surfaceflinger**:图形合成服务
3. **zygote**:应用进程孵化器
4. **system_server**:系统核心服务
## 4. 调试与优化
### 4.1 启动时间分析
- **bootchart工具**:可视化启动时间分布
- **内核日志分析**`dmesg | grep -i "init"`
- **init日志**`logcat -b events | grep "boot_progress"`
### 4.2 常见问题排查
- **启动卡住**:检查驱动初始化顺序
- **服务启动失败**:查看服务依赖关系
- **权限问题**检查SELinux策略
### 4.3 优化建议
- **并行启动**:优化服务启动顺序,减少依赖等待
- **延迟加载**:非关键服务延迟到系统启动后加载
- **预加载优化**:预加载常用库和资源
## 5. 实践案例
### 5.1 自定义启动服务
```bash
# 在init.rc中添加自定义服务
service myservice /system/bin/myservice
class main
user system
group system
oneshot
```
### 5.2 启动参数调优
- **内核参数**:调整内存分配、调度策略
- **init参数**:设置环境变量、调整服务优先级
- **系统属性**:配置系统特性开关
## 总结
Bootloader到Init是Android系统启动的基础阶段理解这一过程对于
- **系统定制开发**:修改启动流程满足特定需求
- **性能优化**:减少启动时间,提升用户体验
- **问题排查**:快速定位启动阶段的问题
- **安全加固**:增强启动过程的安全性
掌握这一阶段的原理和技术细节是成为高级Android Framework工程师的重要基础。

3
Launcher启动流程.md Normal file
View File

@@ -0,0 +1,3 @@
# Launcher启动流程
Android系统Launcher的完整启动流程分析。

171
SystemServer核心服务.md Normal file
View File

@@ -0,0 +1,171 @@
# SystemServer核心服务Android系统服务的基石
SystemServer是Android系统的核心服务进程负责启动和管理所有系统级服务。本文详细分析SystemServer的启动流程、核心服务架构和关键实现。
## SystemServer启动流程概览
```mermaid
graph TD
A[Zygote fork SystemServer] --> B[加载SystemServer类]
B --> C[执行main方法]
C --> D[初始化系统上下文]
D --> E[启动引导服务]
E --> F[启动核心服务]
F --> G[启动其他服务]
G --> H[进入Looper循环]
```
## 1. SystemServer进程创建
### 1.1 从Zygote孵化
- **进程创建**Zygote通过fork创建SystemServer进程
- **资源继承**继承Zygote预加载的类和资源
- **权限设置**:设置系统级权限和用户组
### 1.2 关键启动代码
```java
// SystemServer.java
public static void main(String[] args) {
new SystemServer().run();
}
private void run() {
// 1. 初始化系统环境
Looper.prepareMainLooper();
System.loadLibrary("android_servers");
// 2. 创建系统上下文
createSystemContext();
// 3. 启动系统服务
startBootstrapServices();
startCoreServices();
startOtherServices();
// 4. 进入事件循环
Looper.loop();
}
```
## 2. 引导服务Bootstrap Services
### 2.1 关键引导服务
- **Installer**:应用安装服务
- **ActivityManagerService**Activity管理服务
- **PowerManagerService**:电源管理服务
- **PackageManagerService**:包管理服务
- **DisplayManagerService**:显示管理服务
### 2.2 服务依赖关系
```java
// 引导服务启动顺序
mSystemServiceManager.startService(Installer.class);
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemProcess();
```
## 3. 核心服务Core Services
### 3.1 系统核心服务
- **BatteryService**:电池服务
- **UsageStatsService**:使用统计服务
- **WebViewUpdateService**WebView更新服务
- **DropBoxManagerService**:日志收集服务
### 3.2 关键配置服务
- **AlarmManagerService**:闹钟服务
- **InputManagerService**:输入管理服务
- **WindowManagerService**:窗口管理服务
- **VrManagerService**VR管理服务
## 4. 其他服务Other Services
### 4.1 系统功能服务
- **CameraService**:相机服务
- **AudioService**:音频服务
- **SensorService**:传感器服务
- **BluetoothService**:蓝牙服务
### 4.2 网络与连接服务
- **ConnectivityService**:连接服务
- **NsdService**:网络服务发现
- **VpnManagerService**VPN管理服务
- **EthernetService**:以太网服务
## 5. 服务生命周期管理
### 5.1 服务启动顺序
1. **基础服务**Installer, PowerManager
2. **核心框架**ActivityManager, PackageManager
3. **硬件抽象**DisplayManager, SensorService
4. **应用服务**WindowManager, InputManager
### 5.2 服务依赖解析
- **显式依赖**:通过构造函数参数传递
- **隐式依赖**通过ServiceManager获取
- **循环依赖**:使用代理模式解决
## 6. 性能优化与调试
### 6.1 启动时间优化
- **并行启动**:无依赖服务并行启动
- **延迟加载**:非关键服务延迟启动
- **预加载优化**:预加载常用资源
### 6.2 内存管理
- **服务内存监控**:监控各服务内存使用
- **资源释放**:及时释放未使用资源
- **内存泄漏检测**:定期检查内存泄漏
### 6.3 调试工具
```bash
# 查看SystemServer日志
adb logcat -s SystemServer:I
# 分析服务启动时间
adb shell dumpsys activity service SystemServer
# 性能分析
adb shell systrace.py system_server
```
## 7. 定制化开发
### 7.1 添加自定义服务
```java
// 自定义系统服务
public class MySystemService extends SystemService {
public MySystemService(Context context) {
super(context);
}
@Override
public void onStart() {
publishBinderService("my_service", new MyServiceImpl());
}
}
// 在SystemServer中注册
mSystemServiceManager.startService(MySystemService.class);
```
### 7.2 服务配置调整
- **启动参数**:调整服务启动参数
- **资源限制**:设置服务资源限制
- **优先级调整**:调整服务运行优先级
### 7.3 厂商定制
- **硬件适配**:添加硬件特定服务
- **功能扩展**:扩展系统功能
- **性能调优**:针对特定硬件优化
## 总结
SystemServer作为Android系统的服务基石其设计和实现直接影响
- **系统稳定性**:服务的可靠性和容错能力
- **性能表现**:启动时间和运行效率
- **功能扩展**:系统功能的可扩展性
- **调试维护**:问题的定位和解决效率
深入理解SystemServer的架构和实现对于Android Framework工程师进行系统定制、性能优化和问题排查具有重要意义。

167
Zygote进程启动.md Normal file
View File

@@ -0,0 +1,167 @@
# Zygote进程启动Android应用进程的孵化器
Zygote是Android系统的特殊进程负责孵化fork应用进程实现应用的快速启动和资源共享。本文详细分析Zygote的启动流程、工作原理和优化策略。
## Zygote启动流程概览
```mermaid
sequenceDiagram
participant Init
participant Zygote进程
participant SystemServer
participant App进程
Init->>Zygote进程: 启动Zygote
Zygote进程->>Zygote进程: 预加载类和资源
Zygote进程->>SystemServer: fork SystemServer
SystemServer->>SystemServer: 启动系统服务
Zygote进程->>App进程: fork 应用进程
App进程->>App进程: 执行应用代码
```
## 1. Zygote进程创建
### 1.1 Init启动Zygote
- **init.rc配置**在init.rc中配置Zygote服务
- **进程创建**init进程fork出Zygote进程
- **权限设置**设置Zygote进程权限和资源限制
### 1.2 Zygote服务配置
```bash
# init.rc中的Zygote配置
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
```
## 2. Zygote初始化
### 2.1 预加载机制
- **类预加载**预加载常用Java类
- **资源预加载**:预加载常用资源
- **库预加载**:预加载系统库
### 2.2 关键初始化代码
```java
// ZygoteInit.java
public static void main(String argv[]) {
// 1. 预加载类和资源
preload();
// 2. 启动SystemServer如果指定
if (argv.length > 1 && argv[1].equals("--start-system-server")) {
startSystemServer();
}
// 3. 进入Socket监听循环
runSelectLoop();
}
```
## 3. 进程孵化机制
### 3.1 fork流程
1. **接收请求**通过Socket接收进程创建请求
2. **参数解析**:解析应用启动参数
3. **进程fork**调用fork系统调用创建新进程
4. **子进程初始化**:在新进程中执行应用代码
### 3.2 关键孵化代码
```java
// ZygoteConnection.java
private Runnable handleChildProc(Arguments parsedArgs, FileDescriptor[] descriptors) {
// 关闭Zygote的Socket
closeSocket();
// 设置进程名
Process.setArgV0(parsedArgs.niceName);
// 执行应用入口
return ZygoteInit.zygoteInit(parsedArgs.targetSdkVersion,
parsedArgs.remainingArgs, null);
}
```
## 4. 资源共享优化
### 4.1 Copy-on-Write机制
- **内存共享**:父子进程共享只读内存页
- **写时复制**:修改时复制内存页
- **资源复用**:复用预加载的类和资源
### 4.2 预加载内容
- **系统类**android.*, java.*, javax.* 等
- **框架资源**:主题、字符串、图片等
- **本地库**系统so库
## 5. 性能优化策略
### 5.1 启动时间优化
- **延迟预加载**:非关键类延迟加载
- **类过滤**:过滤不常用的类
- **并行加载**:并行预加载资源
### 5.2 内存优化
- **内存共享**:最大化内存共享
- **资源清理**:及时清理无用资源
- **内存监控**监控Zygote内存使用
### 5.3 稳定性优化
- **进程隔离**:确保进程间隔离
- **异常处理**:完善的异常处理机制
- **重启恢复**Zygote崩溃后的恢复
## 6. 调试与问题排查
### 6.1 常见问题
- **Zygote崩溃**:导致所有应用重启
- **内存泄漏**:预加载资源泄漏
- **启动失败**:应用进程创建失败
### 6.2 调试工具
```bash
# 查看Zygote日志
adb logcat -s Zygote:I
# 分析Zygote内存使用
adb shell dumpsys meminfo zygote
# 跟踪进程创建
adb shell strace -p <zygote_pid>
```
### 6.3 性能分析
- **启动时间**:分析应用启动时间
- **内存占用**:分析内存共享效果
- **CPU使用**分析Zygote CPU使用率
## 7. 定制化开发
### 7.1 预加载策略调整
- **自定义类**:添加自定义预加载类
- **资源优化**:优化预加载资源列表
- **库管理**:管理预加载的本地库
### 7.2 进程管理优化
- **进程限制**:调整进程创建限制
- **优先级管理**:优化进程优先级
- **资源控制**:控制进程资源使用
### 7.3 厂商定制
- **硬件适配**:针对特定硬件优化
- **功能扩展**扩展Zygote功能
- **性能调优**:针对特定场景优化
## 总结
Zygote作为Android应用进程的孵化器其设计和实现直接影响
- **应用启动速度**:通过预加载和资源共享加速启动
- **系统内存效率**通过Copy-on-Write减少内存占用
- **系统稳定性**:确保进程创建的安全可靠
- **系统扩展性**:支持多种应用场景和需求
深入理解Zygote的工作原理和优化策略对于Android Framework工程师进行系统性能优化、问题排查和功能扩展具有重要意义。