부팅 프로세스는 부팅 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
- 차단 작업을 주의 깊게 살펴보세요(명령 호출과 서비스 비교).
- 사용되는 것만 시작하십시오.
- 서비스에 대한 올바른 우선순위를 설정합니다.
접합자. 클래스 사전 로드 최적화(로드할 클래스 목록 지정)
패키지 관리자
사용 중인 APK만 포함하도록 제품 이미지를 최적화합니다.
시스템 서버. 사용되는 시스템 서비스만 시작하십시오.
최적화에 도움이 되도록 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를 모두 커널 부팅 이미지로 이동하고 모든 종속 라이브러리를 정적으로 연결해야 합니다.