부팅 시간 관리

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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