부팅 시간 관리

부팅 프로세스는 부트 ROM에서 시작된 작업의 체인이며, 부트로더, 커널, Init, Zygote, 시스템 서버가 뒤따라 나옵니다(굵게 표시된 부분은 Android 관련 부팅 프로세스임). 자동차 관련 부팅 프로세스에서는 초기 서비스(예: 후방 카메라)가 커널 부팅 중에 시작해야 합니다.

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

부팅 시간 최적화

시스템의 부팅 시간을 개선하려면 다음 가이드라인을 따르세요.

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

  • init.rc

    • 차단 작업(명령어 호출과 비교되는 서비스)을 확인합니다.
    • 사용된 항목만 시작합니다.
    • 서비스의 올바른 우선순위를 설정합니다.
  • Zygote. 클래스를 미리 로드하는 것을 최적화합니다(로드할 클래스 목록을 지정).

  • 패키지 관리자

  • 시스템 서버. 사용된 시스템 서비스만 시작합니다.

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 모두를 커널 부팅 이미지로 이동하고 모든 종속 라이브러리를 정적으로 연결해야 합니다.