引导过程是从引导 ROM 开始的一系列操作,然后是引导加载程序、内核、 Init 、 Zygote和系统服务器(粗体表示 Android 特定的引导过程)。在汽车专用的启动过程中,后视摄像头 (RVC) 等早期服务必须在内核启动期间启动。
命令 | 成分 | 安卓 | 安卓汽车 |
---|---|---|---|
1 | 引导ROM | 将引导加载程序的第一阶段加载到内部 RAM 中。 | |
2 | 引导装载程序 | 初始化内存、验证安全性并加载内核。 | |
3 | 核心 | 设置中断控制器、内存保护、缓存和调度;启动用户空间进程。 | 后视摄像头 (RVC)进程在内核启动初期启动。进程启动后,VMCU 的 GPIO 触发 RVC 在显示屏上显示。 |
4 | 初始化进程 | 解析init.rc 脚本,挂载文件系统,启动 Zygote,启动系统进程。 | Vehicle HAL (VHAL)在初始化阶段作为核心服务的一部分启动。可以根据ServiceManager移至较早的状态;需要删除对共享库(例如 init)的依赖。 |
5 | 合子 | 为 Android 对象设置 Java 运行时和初始化内存。 | |
6 | 系统服务器 | 系统中的第一个 Java 组件启动核心 Android 服务。 | CarService在所有系统服务启动后启动。 |
优化启动时间
要缩短系统的启动时间,请遵循以下准则:
核心。仅加载正在使用的模块并仅初始化正在使用的硬件组件。
init.rc
- 监视阻塞操作(服务与命令调用相比)。
- 仅启动已使用的内容。
- 为服务设置正确的优先级。
合子。类预加载优化(指定要加载的类列表)。
包管理器
优化产品图像以仅包含正在使用的 APK。
系统服务器。仅启动使用的系统服务。
为了帮助优化,Google 提供了以下工具:
使用
packages/services/Car/tools/bootanalyze/bootanalyze.py
来分析logcat和dmesg日志。使用
packages/services/Car/tools/bootio/
记录启动期间进程的I/O。您必须使用特定标志编译内核(请参阅README.md
文件)。
尽早开始服务
在启动顺序中,某些服务可能会在 Android 启动之前启动。
后视摄像头
后视摄像头(RVC)应该在内核中处理。当车辆换入倒车档时,VMCU 通知本机内核进程,之后本机内核进程将 RVC 图像显示到显示器上。车辆 HAL 可以使用hardware/libhardware/include/hardware/vehicle_camera.h
控制 RVC。
车辆 HAL (VHAL)
某些系统可能需要在启动序列的早期阶段读取和缓冲 CAN 数据(例如,车速、档位状态),同时等待用户空间服务启动(启动序列稍后发生)。这种情况要求 VNS 以及 HAL 和 CAN 控制器很早就启动,通常在几秒钟内启动。
可以快速挂载
/system
系统可以简单地启动服务管理器,然后尽早启动 VNS。无法快速挂载
/system
系统必须将服务管理器和 VNS 都移动到内核启动映像,并静态链接所有依赖库。