管理启动时间

引导过程是从引导 ROM 开始的一系列操作,然后是引导加载程序、内核、 InitZygote系统服务器(粗体表示 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

    • 监视阻塞操作(服务与命令调用相比)。
    • 仅启动已使用的内容。
    • 为服务设置正确的优先级。
  • 合子。类预加载优化(指定要加载的类列表)。

  • 包管理器

  • 系统服务器。仅启动使用的系统服务。

为了帮助优化,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 都移动到内核启动映像,并静态链接所有依赖库。