diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 5832c0d..d32f2fe 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -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", diff --git a/Bootloader到Init.md b/Bootloader到Init.md new file mode 100644 index 0000000..19d35ba --- /dev/null +++ b/Bootloader到Init.md @@ -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工程师的重要基础。 \ No newline at end of file diff --git a/Launcher启动流程.md b/Launcher启动流程.md new file mode 100644 index 0000000..6cfc657 --- /dev/null +++ b/Launcher启动流程.md @@ -0,0 +1,3 @@ +# Launcher启动流程 + +Android系统Launcher的完整启动流程分析。 \ No newline at end of file diff --git a/SystemServer核心服务.md b/SystemServer核心服务.md new file mode 100644 index 0000000..0c5914c --- /dev/null +++ b/SystemServer核心服务.md @@ -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工程师进行系统定制、性能优化和问题排查具有重要意义。 \ No newline at end of file diff --git a/Zygote进程启动.md b/Zygote进程启动.md new file mode 100644 index 0000000..1cd4f49 --- /dev/null +++ b/Zygote进程启动.md @@ -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 +``` + +### 6.3 性能分析 +- **启动时间**:分析应用启动时间 +- **内存占用**:分析内存共享效果 +- **CPU使用**:分析Zygote CPU使用率 + +## 7. 定制化开发 + +### 7.1 预加载策略调整 +- **自定义类**:添加自定义预加载类 +- **资源优化**:优化预加载资源列表 +- **库管理**:管理预加载的本地库 + +### 7.2 进程管理优化 +- **进程限制**:调整进程创建限制 +- **优先级管理**:优化进程优先级 +- **资源控制**:控制进程资源使用 + +### 7.3 厂商定制 +- **硬件适配**:针对特定硬件优化 +- **功能扩展**:扩展Zygote功能 +- **性能调优**:针对特定场景优化 + +## 总结 + +Zygote作为Android应用进程的孵化器,其设计和实现直接影响: +- **应用启动速度**:通过预加载和资源共享加速启动 +- **系统内存效率**:通过Copy-on-Write减少内存占用 +- **系统稳定性**:确保进程创建的安全可靠 +- **系统扩展性**:支持多种应用场景和需求 + +深入理解Zygote的工作原理和优化策略,对于Android Framework工程师进行系统性能优化、问题排查和功能扩展具有重要意义。 \ No newline at end of file diff --git a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md index e05e1f1..bec5ff5 100644 Binary files a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md and b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md differ diff --git a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak deleted file mode 100644 index 08028ef..0000000 Binary files a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Bootloader到Init.md.bak and /dev/null differ diff --git a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md index 886c846..f150596 100644 Binary files a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md and b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Launcher启动流程.md differ diff --git a/docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md b/docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md index eaf4a7f..d908e99 100644 Binary files a/docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md and b/docs/Obsidian笔记体系/Areas/01-系统启动流程/SystemServer核心服务.md differ diff --git a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md index 206bdf2..e6314e5 100644 Binary files a/docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md and b/docs/Obsidian笔记体系/Areas/01-系统启动流程/Zygote进程启动.md differ