부팅 시간 관리

부팅 프로세스는 부팅 ROM에서 시작하여 부트로더, 커널, Init , Zygote시스템 서버 가 이어지는 일련의 작업입니다(굵은 글씨는 Android 관련 부팅 프로세스를 나타냄). 자동차 관련 부팅 프로세스에서는 커널 부팅 중에 후방 카메라(RVC)와 같은 초기 서비스가 시작되어야 합니다.

주문하다 요소 기계적 인조 인간 안드로이드 자동차
1 부트 ROM 부트로더의 첫 번째 단계를 내부 RAM에 로드합니다.
2 부트로더 메모리를 초기화하고, 보안을 확인하고, 커널을 로드합니다.
핵심 인터럽트 컨트롤러, 메모리 보호, 캐시 및 예약을 설정합니다. 사용자 공간 프로세스를 시작합니다. 후방 카메라(RVC) 프로세스는 커널 부팅 초기에 시작됩니다. 프로세스가 시작된 후 VMCU의 GPIO는 RVC를 트리거하여 디스플레이에 표시합니다.
4 초기화 프로세스 init.rc 스크립트를 구문 분석하고, 파일 시스템을 마운트하고, Zygote를 시작하고, 시스템 프로세스를 시작합니다. 차량 HAL(VHAL)은 핵심 서비스의 일부로 초기화 단계에서 시작됩니다. ServiceManager에 따라 이전 상태로 이동할 수 있습니다. 공유 라이브러리(예: init)에 대한 종속성을 제거해야 합니다.
5 접합자 Android 객체에 대한 Java 런타임 및 초기화 메모리를 설정합니다.
6 시스템 서버 시스템의 첫 번째 Java 구성 요소는 핵심 Android 서비스를 시작합니다. CarService는 모든 시스템 서비스가 시작된 후에 시작됩니다.

부팅 시간 최적화

시스템의 부팅 시간을 개선하려면 다음 지침을 따르십시오.

  • 핵심. 사용 중인 모듈만 로드하고 사용 중인 하드웨어 구성 요소만 초기화합니다.

  • init.rc

    • 차단 작업을 주의 깊게 살펴보세요(명령 호출과 서비스 비교).
    • 사용되는 것만 시작하십시오.
    • 서비스에 대한 올바른 우선순위를 설정합니다.
  • 접합자. 클래스 사전 로드 최적화(로드할 클래스 목록 지정)

  • 패키지 관리자

  • 시스템 서버. 사용되는 시스템 서비스만 시작하십시오.

최적화에 도움이 되도록 Google은 다음 도구를 제공합니다.

  • packages/services/Car/tools/bootanalyze/bootanalyze.py 사용하여 logcat 및 dmesg 로그를 분석하세요.

  • 부팅 중 프로세스에 대한 I/O를 기록하려면 packages/services/Car/tools/bootio/ 사용하세요. 특정 플래그를 사용하여 커널을 컴파일해야 합니다( 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를 모두 커널 부팅 이미지로 이동하고 모든 종속 라이브러리를 정적으로 연결해야 합니다.