测试
This commit is contained in:
26
.obsidian/workspace.json
vendored
26
.obsidian/workspace.json
vendored
@@ -13,12 +13,12 @@
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "docs/Obsidian笔记体系/Areas/07-系统安全/密钥存储与加密.md",
|
||||
"file": "docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "密钥存储与加密"
|
||||
"title": "Zygote进程启动"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -185,16 +185,22 @@
|
||||
},
|
||||
"active": "f1ecba89214e3cc5",
|
||||
"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-系统启动流程/Zygote进程启动.md",
|
||||
"docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md",
|
||||
"Zygote进程启动.md",
|
||||
"SystemServer核心服务.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笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak",
|
||||
"docs/学习笔记/gerrit分支规范.md",
|
||||
"docs/Obsidian笔记体系/README.md",
|
||||
"docs/Obsidian笔记体系/MOCs/Android Framework知识体系图.md",
|
||||
"docs/Obsidian笔记体系/MOCs/源码阅读地图.md",
|
||||
"docs/Obsidian笔记体系/MOCs/高频问题索引.md",
|
||||
@@ -206,12 +212,6 @@
|
||||
"docs/Obsidian笔记体系/Areas/02-Activity管理/异常恢复机制.md",
|
||||
"docs/Obsidian笔记体系/Areas/03-Window系统/WindowManagerService架构.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/自定义脚本/自动生成日报.js",
|
||||
"docs/Obsidian笔记体系/Config/主题与样式.css",
|
||||
|
||||
125
Bootloader到Init.md
Normal file
125
Bootloader到Init.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Bootloader到Init:Android系统启动的第一阶段
|
||||
|
||||
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
3
Launcher启动流程.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Launcher启动流程
|
||||
|
||||
Android系统Launcher的完整启动流程分析。
|
||||
171
SystemServer核心服务.md
Normal file
171
SystemServer核心服务.md
Normal 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
167
Zygote进程启动.md
Normal 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工程师进行系统性能优化、问题排查和功能扩展具有重要意义。
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user